aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--babel.ini3
-rw-r--r--docs/source/deploying.rst25
-rw-r--r--docs/source/index.rst1
-rw-r--r--docs/source/production-deployments.rst82
-rw-r--r--mediagoblin.ini3
-rw-r--r--mediagoblin/app.py27
-rw-r--r--mediagoblin/auth/views.py21
-rw-r--r--mediagoblin/config_spec.ini7
-rw-r--r--mediagoblin/db/migrations.py8
-rw-r--r--mediagoblin/db/models.py8
-rw-r--r--mediagoblin/decorators.py2
-rw-r--r--mediagoblin/edit/forms.py17
-rw-r--r--mediagoblin/edit/views.py39
-rw-r--r--mediagoblin/gmg_commands/import_export.py10
-rw-r--r--mediagoblin/gmg_commands/migrate.py6
-rw-r--r--mediagoblin/gmg_commands/users.py15
-rw-r--r--mediagoblin/gmg_commands/util.py13
-rw-r--r--mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mobin12268 -> 12717 bytes
-rw-r--r--mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po306
-rw-r--r--mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mobin10826 -> 11505 bytes
-rw-r--r--mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po328
-rw-r--r--mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mobin11119 -> 11805 bytes
-rw-r--r--mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po352
-rw-r--r--mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po284
-rw-r--r--mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mobin10809 -> 11754 bytes
-rw-r--r--mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po334
-rw-r--r--mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mobin11329 -> 12093 bytes
-rw-r--r--mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po337
-rw-r--r--mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mobin11583 -> 12304 bytes
-rw-r--r--mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po340
-rw-r--r--mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mobin10530 -> 11238 bytes
-rw-r--r--mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po284
-rw-r--r--mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mobin11026 -> 11622 bytes
-rw-r--r--mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po310
-rw-r--r--mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mobin11224 -> 11879 bytes
-rw-r--r--mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po294
-rw-r--r--mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mobin10695 -> 11394 bytes
-rw-r--r--mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po296
-rw-r--r--mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mobin10287 -> 10933 bytes
-rw-r--r--mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po318
-rw-r--r--mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mobin10945 -> 11596 bytes
-rw-r--r--mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po316
-rw-r--r--mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mobin11067 -> 11882 bytes
-rw-r--r--mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po343
-rw-r--r--mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mobin13899 -> 15455 bytes
-rw-r--r--mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po346
-rw-r--r--mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mobin11267 -> 11789 bytes
-rw-r--r--mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po316
-rw-r--r--mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mobin10764 -> 11439 bytes
-rw-r--r--mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po309
-rw-r--r--mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mobin10627 -> 11335 bytes
-rw-r--r--mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po284
-rw-r--r--mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mobin11015 -> 11538 bytes
-rw-r--r--mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po320
-rw-r--r--mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mobin10812 -> 11527 bytes
-rw-r--r--mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po288
-rw-r--r--mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mobin10509 -> 11190 bytes
-rw-r--r--mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po314
-rw-r--r--mediagoblin/init/celery/__init__.py2
-rw-r--r--mediagoblin/listings/views.py2
-rw-r--r--mediagoblin/meddleware/__init__.py32
-rw-r--r--mediagoblin/meddleware/csrf.py (renamed from mediagoblin/middleware/csrf.py)28
-rw-r--r--mediagoblin/meddleware/noop.py (renamed from mediagoblin/middleware/noop.py)8
-rw-r--r--mediagoblin/media_types/__init__.py69
-rw-r--r--mediagoblin/media_types/image/__init__.py26
-rw-r--r--mediagoblin/media_types/image/processing.py114
-rw-r--r--mediagoblin/media_types/video/__init__.py27
-rw-r--r--mediagoblin/media_types/video/devices/web-advanced.json505
-rw-r--r--mediagoblin/media_types/video/devices/web-flv.pngbin0 -> 2234 bytes
-rw-r--r--mediagoblin/media_types/video/devices/web-webm.svg259
-rw-r--r--mediagoblin/media_types/video/devices/web.svg982
-rw-r--r--mediagoblin/media_types/video/processing.py118
-rw-r--r--mediagoblin/media_types/video/transcoders.py658
-rw-r--r--mediagoblin/process_media/errors.py45
-rw-r--r--mediagoblin/processing.py (renamed from mediagoblin/process_media/__init__.py)97
-rw-r--r--mediagoblin/static/css/base.css60
-rw-r--r--mediagoblin/static/images/empty_back.pngbin0 -> 191 bytes
-rw-r--r--mediagoblin/static/images/icon_delete.pngbin472 -> 0 bytes
-rw-r--r--mediagoblin/static/images/icon_edit.pngbin297 -> 0 bytes
-rw-r--r--mediagoblin/static/images/media_thumbs/video.jpgbin0 -> 7278 bytes
-rw-r--r--mediagoblin/static/images/navigation_end.pngbin718 -> 0 bytes
-rw-r--r--mediagoblin/static/images/navigation_left.pngbin406 -> 0 bytes
-rw-r--r--mediagoblin/static/images/navigation_right.pngbin383 -> 0 bytes
-rw-r--r--mediagoblin/storage/__init__.py12
-rw-r--r--mediagoblin/storage/cloudfiles.py10
-rw-r--r--mediagoblin/storage/filestorage.py14
-rw-r--r--mediagoblin/submit/forms.py4
-rw-r--r--mediagoblin/submit/views.py139
-rw-r--r--mediagoblin/templates/mediagoblin/auth/change_fp.html2
-rw-r--r--mediagoblin/templates/mediagoblin/auth/forgot_password.html2
-rw-r--r--mediagoblin/templates/mediagoblin/auth/login.html4
-rw-r--r--mediagoblin/templates/mediagoblin/auth/register.html2
-rw-r--r--mediagoblin/templates/mediagoblin/base.html8
-rw-r--r--mediagoblin/templates/mediagoblin/edit/attachments.html4
-rw-r--r--mediagoblin/templates/mediagoblin/edit/edit.html4
-rw-r--r--mediagoblin/templates/mediagoblin/edit/edit_profile.html2
-rw-r--r--mediagoblin/templates/mediagoblin/media_displays/image.html1
-rw-r--r--mediagoblin/templates/mediagoblin/media_displays/video.html25
-rw-r--r--mediagoblin/templates/mediagoblin/root.html6
-rw-r--r--mediagoblin/templates/mediagoblin/submit/start.html2
-rw-r--r--mediagoblin/templates/mediagoblin/test_submit.html2
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/media.html223
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html4
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/user.html6
-rw-r--r--mediagoblin/templates/mediagoblin/utils/pagination.html2
-rw-r--r--mediagoblin/templates/mediagoblin/utils/prev_next.html8
-rw-r--r--mediagoblin/templates/mediagoblin/utils/tags.html24
-rw-r--r--mediagoblin/templates/mediagoblin/utils/wtforms.html4
-rw-r--r--mediagoblin/tests/test_auth.py16
-rw-r--r--mediagoblin/tests/test_celery_setup.py4
-rw-r--r--mediagoblin/tests/test_csrf_middleware.py21
-rw-r--r--mediagoblin/tests/test_edit.py99
-rw-r--r--mediagoblin/tests/test_mgoblin_app.ini1
-rw-r--r--mediagoblin/tests/test_misc.py (renamed from mediagoblin/middleware/__init__.py)14
-rw-r--r--mediagoblin/tests/test_storage.py27
-rw-r--r--mediagoblin/tests/test_submission.py22
-rw-r--r--mediagoblin/tests/test_tags.py9
-rw-r--r--mediagoblin/tests/tools.py34
-rw-r--r--mediagoblin/tools/response.py2
-rw-r--r--mediagoblin/tools/template.py6
-rw-r--r--mediagoblin/tools/text.py5
-rw-r--r--mediagoblin/user_pages/views.py19
-rw-r--r--mediagoblin/views.py8
-rw-r--r--mediagoblin/workbench.py5
-rw-r--r--setup.py1
125 files changed, 7566 insertions, 3179 deletions
diff --git a/babel.ini b/babel.ini
index a4e3267a..1a8231f5 100644
--- a/babel.ini
+++ b/babel.ini
@@ -4,9 +4,12 @@
[jinja2: mediagoblin/templates/**.html]
# Extract jinja templates (html)
encoding = utf-8
+extensions = jinja2.ext.autoescape
+
[jinja2: mediagoblin/templates/**.txt]
# Extract jinja templates (text)
encoding = utf-8
+extensions = jinja2.ext.autoescape
# # Extraction from JavaScript files
# [javascript: mediagoblin/static/js/**.js]
diff --git a/docs/source/deploying.rst b/docs/source/deploying.rst
index b944a3d3..70b1a6af 100644
--- a/docs/source/deploying.rst
+++ b/docs/source/deploying.rst
@@ -239,26 +239,9 @@ example: ::
Visit the site you've set up in your browser by visiting
<http://mediagobilin.example.org>. You should see MediaGoblin!
-Production MediaGoblin Deployments with Paste
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The instance configured with ``lazyserver`` is not ideal for a
-production MediaGoblin deployment. Ideally, you should be able to use
-a a control script (i.e. init script.) to launch and restart the
-MediaGoblin process.
-
-Use the following command as the basis for such a script: ::
-
- CELERY_ALWAYS_EAGER=true \
- /srv/mediagoblin.example.org/mediagoblin/bin/paster serve \
- /srv/mediagoblin.example.org/mediagoblin/paste.ini \
- --pid-file=/tmp/mediagoblin.pid \
- --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543 \
-
.. note::
- The above configuration places MediaGoblin in "always eager" mode
- with Celery. This is fine for development and smaller
- deployments. However, if you're getting into the really large
- deployment category, consider reading the section of this manual on
- Celery.
+ The configuration described above is sufficient for development and
+ smaller deployments. However, for larger production deployments
+ with larger processing requirements, see the
+ ":doc:`production-deployments`" documentation.
diff --git a/docs/source/index.rst b/docs/source/index.rst
index e9f3993e..6ffe0974 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -14,6 +14,7 @@ Table of Contents:
foreword
about
deploying
+ production-deployments
configuration
help
theming
diff --git a/docs/source/production-deployments.rst b/docs/source/production-deployments.rst
new file mode 100644
index 00000000..7bf26169
--- /dev/null
+++ b/docs/source/production-deployments.rst
@@ -0,0 +1,82 @@
+=========================================
+Considerations for Production Deployments
+=========================================
+
+This document contains a number of suggestions for deploying
+MediaGoblin in actual production environments. Consider
+":doc:`deploying`" for a basic overview of how to deploy Media
+Goblin.
+
+Deploy with Paste
+-----------------
+
+The instance configured with ``./lazyserver.sh`` is not ideal for a
+production MediaGoblin deployment. Ideally, you should be able to use
+an "init" or "control" script to launch and restart the MediaGoblin
+process.
+
+Use the following command as the basis for such a script: ::
+
+ CELERY_ALWAYS_EAGER=true \
+ /srv/mediagoblin.example.org/mediagoblin/bin/paster serve \
+ /srv/mediagoblin.example.org/mediagoblin/paste.ini \
+ --pid-file=/var/run/mediagoblin.pid \
+ --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543 \
+
+The above configuration places MediaGoblin in "always eager" mode
+with Celery, this means that submissions of content will be processed
+synchronously, and the user will advance to the next page only after
+processing is complete. If we take Celery out of "always eager mode,"
+the user will be able to immediately return to the MediaGoblin site
+while processing is ongoing. In these cases, use the following command
+as the basis for your script: ::
+
+ CELERY_ALWAYS_EAGER=false \
+ /srv/mediagoblin.example.org/mediagoblin/bin/paster serve \
+ /srv/mediagoblin.example.org/mediagoblin/paste.ini \
+ --pid-file=/var/run/mediagoblin.pid \
+ --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543 \
+
+Separate Celery
+---------------
+
+While the ``./lazyserer.sh`` configuration provides an efficient way to
+start using a MediaGoblin instance, it is not suitable for production
+deployments for several reasons:
+
+In nearly every scenario, work on the Celery queue will need to
+balance with the demands of other processes, and cannot proceed
+synchronously. This is a particularly relevant problem if you use
+MediaGoblin to host video content. Processing with Celery ought to be
+operationally separate from the MediaGoblin application itself, this
+simplifies management and support better workload distribution.
+
+Basically, if you're doing anything beyond a trivial workload, such as
+image hosting for a small set of users, or have limited media types
+such as "ASCII art" or icon sharing, you will need to run ``celeryd``
+as a separate process.
+
+Build an :ref:`init script <init-script>` around the following
+command.
+
+ CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd
+
+Modify your existing MediaGoblin and application init scripts, if
+necessary, to prevent them from starting their own ``celeryd``
+processes.
+
+.. _init-script:
+
+Use an Init Script
+------------------
+
+Look in your system's ``/etc/init.d/`` or ``/etc/rc.d/`` directory for
+examples of how to build scripts that will start, stop, and restart
+MediaGoblin and Celery. These scripts will vary by
+distribution/operating system. In the future, MediaGoblin will provide
+example scripts as examples.
+
+.. TODO insert init script here
+.. TODO are additional concernts ?
+ .. Other Concerns
+ .. --------------
diff --git a/mediagoblin.ini b/mediagoblin.ini
index 728ab2f2..dbde6e51 100644
--- a/mediagoblin.ini
+++ b/mediagoblin.ini
@@ -11,6 +11,9 @@ email_debug_mode = true
# Set to false to disable registrations
allow_registration = true
+## Uncomment this to turn on video or enable other media types
+# media_types = mediagoblin.media_types.image, mediagoblin.media_types.video
+
## Uncomment this to put some user-overriding templates here
#local_templates = %(here)s/user_dev/templates/
diff --git a/mediagoblin/app.py b/mediagoblin/app.py
index ce4b0bec..04eb2acc 100644
--- a/mediagoblin/app.py
+++ b/mediagoblin/app.py
@@ -20,7 +20,7 @@ import urllib
import routes
from webob import Request, exc
-from mediagoblin import routing, middleware
+from mediagoblin import routing, meddleware
from mediagoblin.tools import common, translate, template
from mediagoblin.tools.response import render_404
from mediagoblin.tools import request as mg_request
@@ -63,7 +63,7 @@ class MediaGoblinApp(object):
# Get the template environment
self.template_loader = get_jinja_loader(
- app_config.get('user_template_path'))
+ app_config.get('local_templates'))
# Set up storage systems
self.public_store, self.queue_store = setup_storage()
@@ -100,19 +100,13 @@ class MediaGoblinApp(object):
# matters in always eager mode :)
setup_workbench()
- # instantiate application middleware
- self.middleware = [common.import_component(m)(self)
- for m in middleware.ENABLED_MIDDLEWARE]
+ # instantiate application meddleware
+ self.meddleware = [common.import_component(m)(self)
+ for m in meddleware.ENABLED_MEDDLEWARE]
def __call__(self, environ, start_response):
request = Request(environ)
- # pass the request through our middleware classes
- for m in self.middleware:
- response = m.process_request(request)
- if response is not None:
- return response(environ, start_response)
-
## Routing / controller loading stuff
path_info = request.path_info
route_match = self.routing.match(path_info)
@@ -164,13 +158,20 @@ class MediaGoblinApp(object):
return render_404(request)(environ, start_response)
controller = common.import_component(route_match['controller'])
+
+ # pass the request through our meddleware classes
+ for m in self.meddleware:
+ response = m.process_request(request, controller)
+ if response is not None:
+ return response(environ, start_response)
+
request.start_response = start_response
# get the response from the controller
response = controller(request)
- # pass the response through the middleware
- for m in self.middleware[::-1]:
+ # pass the response through the meddleware
+ for m in self.meddleware[::-1]:
m.process_response(request, response)
return response(environ, start_response)
diff --git a/mediagoblin/auth/views.py b/mediagoblin/auth/views.py
index 8412b81c..d01861d1 100644
--- a/mediagoblin/auth/views.py
+++ b/mediagoblin/auth/views.py
@@ -74,7 +74,7 @@ def register(request):
extra_validation_passes = False
if users_with_email:
register_form.email.errors.append(
- _(u'Sorry, that email address has already been taken.'))
+ _(u'Sorry, a user with that email address already exists.'))
extra_validation_passes = False
if extra_validation_passes:
@@ -195,9 +195,26 @@ def resend_activation(request):
Resend the activation email.
"""
+
+ if request.user is None:
+ messages.add_message(
+ request,
+ messages.ERROR,
+ _('You must be logged in so we know who to send the email to!'))
+
+ return redirect(request, 'mediagoblin.auth.login')
+
+ if request.user["email_verified"]:
+ messages.add_message(
+ request,
+ messages.ERROR,
+ _("You've already verified your email address!"))
+
+ return redirect(request, "mediagoblin.user_pages.user_home", user=request.user['username'])
+
request.user[u'verification_key'] = unicode(uuid.uuid4())
request.user.save()
-
+
email_debug_message(request)
send_verification_email(request.user, request)
diff --git a/mediagoblin/config_spec.ini b/mediagoblin/config_spec.ini
index eef6f6e0..13ce925e 100644
--- a/mediagoblin/config_spec.ini
+++ b/mediagoblin/config_spec.ini
@@ -2,16 +2,17 @@
# HTML title of the pages
html_title = string(default="GNU MediaGoblin")
+# Enabled media types
+media_types = string_list(default=list("mediagoblin.media_types.image"))
+
# database stuff
db_host = string()
db_name = string(default="mediagoblin")
db_port = integer()
-
# Where temporary files used in processing and etc are kept
workbench_path = string(default="%(here)s/user_dev/media/workbench")
-
# Where mediagoblin-builtin static assets are kept
direct_remote_path = string(default="/mgoblin_static/")
@@ -27,7 +28,6 @@ email_smtp_pass = string(default=None)
allow_registration = boolean(default=True)
# tag parsing
-tags_delimiter = string(default=",")
tags_max_length = integer(default=50)
# Whether comments are ascending or descending
@@ -50,6 +50,7 @@ allow_attachments = boolean(default=False)
# Cookie stuff
csrf_cookie_name = string(default='mediagoblin_csrftoken')
+
[storage:publicstore]
storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage")
base_dir = string(default="%(here)s/user_dev/media/public")
diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py
index edaf5630..cfc01287 100644
--- a/mediagoblin/db/migrations.py
+++ b/mediagoblin/db/migrations.py
@@ -100,3 +100,11 @@ def user_add_forgot_password_token_and_expires(database):
"""
add_table_field(database, 'users', 'fp_verification_key', None)
add_table_field(database, 'users', 'fp_token_expire', None)
+
+
+@RegisterMigration(7)
+def media_type_image_to_multimedia_type_image(database):
+ database['media_entries'].update(
+ {'media_type': 'image'},
+ {'$set': {'media_type': 'mediagoblin.media_types.image'}},
+ multi=True)
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py
index f13a4457..265fe36d 100644
--- a/mediagoblin/db/models.py
+++ b/mediagoblin/db/models.py
@@ -263,7 +263,7 @@ class MediaEntry(Document):
Use a slug if we have one, else use our '_id'.
"""
- uploader = self.uploader()
+ uploader = self.get_uploader()
if self.get('slug'):
return urlgen(
@@ -286,7 +286,7 @@ class MediaEntry(Document):
'_id', ASCENDING).limit(1)
if cursor.count():
return urlgen('mediagoblin.user_pages.media_home',
- user=self.uploader()['username'],
+ user=self.get_uploader()['username'],
media=unicode(cursor[0]['slug']))
def url_to_next(self, urlgen):
@@ -300,10 +300,10 @@ class MediaEntry(Document):
if cursor.count():
return urlgen('mediagoblin.user_pages.media_home',
- user=self.uploader()['username'],
+ user=self.get_uploader()['username'],
media=unicode(cursor[0]['slug']))
- def uploader(self):
+ def get_uploader(self):
return self.db.User.find_one({'_id': self['uploader']})
def get_fail_exception(self):
diff --git a/mediagoblin/decorators.py b/mediagoblin/decorators.py
index 9cac1cfa..56dddb44 100644
--- a/mediagoblin/decorators.py
+++ b/mediagoblin/decorators.py
@@ -58,7 +58,7 @@ def user_may_delete_media(controller):
"""
def wrapper(request, *args, **kwargs):
uploader = request.db.MediaEntry.find_one(
- {'slug': request.matchdict['media'] }).uploader()
+ {'slug': request.matchdict['media']}).get_uploader()
if not (request.user['is_admin'] or
request.user._id == uploader._id):
return exc.HTTPForbidden()
diff --git a/mediagoblin/edit/forms.py b/mediagoblin/edit/forms.py
index 7e71722c..dd339e08 100644
--- a/mediagoblin/edit/forms.py
+++ b/mediagoblin/edit/forms.py
@@ -26,7 +26,9 @@ class EditForm(wtforms.Form):
description = wtforms.TextAreaField('Description of this work')
tags = wtforms.TextField(
_('Tags'),
- [tag_length_validator])
+ [tag_length_validator],
+ description=_(
+ "Seperate tags by commas."))
slug = wtforms.TextField(
_('Slug'),
[wtforms.validators.Required(message=_("The slug can't be empty"))],
@@ -43,6 +45,19 @@ class EditProfileForm(wtforms.Form):
_('Website'),
[wtforms.validators.Optional(),
wtforms.validators.URL(message='Improperly formed URL')])
+ old_password = wtforms.PasswordField(
+ _('Old password'),
+ [wtforms.validators.Optional()])
+ new_password = wtforms.PasswordField(
+ _('New Password'),
+ [wtforms.validators.Optional(),
+ wtforms.validators.Length(min=6, max=30),
+ wtforms.validators.EqualTo(
+ 'confirm_password',
+ 'Passwords must match.')])
+ confirm_password = wtforms.PasswordField(
+ 'Confirm password',
+ [wtforms.validators.Optional()])
class EditAttachmentsForm(wtforms.Form):
diff --git a/mediagoblin/edit/views.py b/mediagoblin/edit/views.py
index 5f781552..673409bd 100644
--- a/mediagoblin/edit/views.py
+++ b/mediagoblin/edit/views.py
@@ -26,6 +26,7 @@ from werkzeug.utils import secure_filename
from mediagoblin import messages
from mediagoblin import mg_globals
+from mediagoblin.auth import lib as auth_lib
from mediagoblin.edit import forms
from mediagoblin.edit.lib import may_edit_media
from mediagoblin.decorators import require_active_login, get_user_media_entry
@@ -161,19 +162,37 @@ def edit_profile(request):
bio=user.get('bio'))
if request.method == 'POST' and form.validate():
- user['url'] = unicode(request.POST['url'])
- user['bio'] = unicode(request.POST['bio'])
+ password_matches = auth_lib.bcrypt_check_password(
+ request.POST['old_password'],
+ user['pw_hash'])
- user['bio_html'] = cleaned_markdown_conversion(user['bio'])
+ if (request.POST['old_password'] or request.POST['new_password']) and not \
+ password_matches:
+ form.old_password.errors.append(_('Wrong password'))
- user.save()
+ return render_to_response(
+ request,
+ 'mediagoblin/edit/edit_profile.html',
+ {'user': user,
+ 'form': form})
- messages.add_message(request,
- messages.SUCCESS,
- _("Profile edited!"))
- return redirect(request,
- 'mediagoblin.user_pages.user_home',
- user=edit_username)
+ user['url'] = unicode(request.POST['url'])
+ user['bio'] = unicode(request.POST['bio'])
+
+ if password_matches:
+ user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(
+ request.POST['new_password'])
+
+ user['bio_html'] = cleaned_markdown_conversion(user['bio'])
+
+ user.save()
+
+ messages.add_message(request,
+ messages.SUCCESS,
+ _("Profile edited!"))
+ return redirect(request,
+ 'mediagoblin.user_pages.user_home',
+ user=user['username'])
return render_to_response(
request,
diff --git a/mediagoblin/gmg_commands/import_export.py b/mediagoblin/gmg_commands/import_export.py
index 30112969..4ec17d47 100644
--- a/mediagoblin/gmg_commands/import_export.py
+++ b/mediagoblin/gmg_commands/import_export.py
@@ -211,10 +211,12 @@ def _export_media(db, args):
_log.info(u'Exporting {0} - {1}'.format(
entry['title'],
name))
-
- mc_file = media_cache.get_file(path, mode='wb')
- mc_file.write(
- mg_globals.public_store.get_file(path, mode='rb').read())
+ try:
+ mc_file = media_cache.get_file(path, mode='wb')
+ mc_file.write(
+ mg_globals.public_store.get_file(path, mode='rb').read())
+ except e:
+ _log.error('Failed: {0}'.format(e))
_log.info('...Media exported')
diff --git a/mediagoblin/gmg_commands/migrate.py b/mediagoblin/gmg_commands/migrate.py
index beea109d..bd3bcb20 100644
--- a/mediagoblin/gmg_commands/migrate.py
+++ b/mediagoblin/gmg_commands/migrate.py
@@ -18,7 +18,7 @@ import sys
from mediagoblin.db import util as db_util
from mediagoblin.db.open import setup_connection_and_db_from_config
-from mediagoblin.init.config import read_mediagoblin_config
+from mediagoblin.init import setup_global_and_app_config
# This MUST be imported so as to set up the appropriate migrations!
from mediagoblin.db import migrations
@@ -41,9 +41,9 @@ def _print_finished_migration(migration_number, migration_func):
def migrate(args):
- config, validation_result = read_mediagoblin_config(args.conf_file)
+ global_config, app_config = setup_global_and_app_config(args.conf_file)
connection, db = setup_connection_and_db_from_config(
- config['mediagoblin'], use_pymongo=True)
+ app_config, use_pymongo=True)
migration_manager = db_util.MigrationManager(db)
# Clear old indexes
diff --git a/mediagoblin/gmg_commands/users.py b/mediagoblin/gmg_commands/users.py
index 4c4b0c1b..b437e839 100644
--- a/mediagoblin/gmg_commands/users.py
+++ b/mediagoblin/gmg_commands/users.py
@@ -18,23 +18,26 @@ from mediagoblin.gmg_commands import util as commands_util
from mediagoblin.auth import lib as auth_lib
from mediagoblin import mg_globals
-
def adduser_parser_setup(subparser):
subparser.add_argument(
- 'username',
+ '--username','-u',
help="Username used to login")
subparser.add_argument(
- 'password',
- help="Your supersecret word to login")
+ '--password','-p',
+ help="Your supersecret word to login, beware of storing it in bash history")
subparser.add_argument(
- 'email',
- help="Email to recieve notifications")
+ '--email','-e',
+ help="Email to receive notifications")
def adduser(args):
#TODO: Lets trust admins this do not validate Emails :)
commands_util.setup_app(args)
+ args.username = commands_util.prompt_if_not_set(args.username, "Username:")
+ args.password = commands_util.prompt_if_not_set(args.password, "Password:",True)
+ args.email = commands_util.prompt_if_not_set(args.email, "Email:")
+
db = mg_globals.database
users_with_username = \
db.User.find({
diff --git a/mediagoblin/gmg_commands/util.py b/mediagoblin/gmg_commands/util.py
index 168a0760..3e26c53f 100644
--- a/mediagoblin/gmg_commands/util.py
+++ b/mediagoblin/gmg_commands/util.py
@@ -16,6 +16,7 @@
from mediagoblin import app
+import getpass
def setup_app(args):
@@ -25,3 +26,15 @@ def setup_app(args):
mgoblin_app = app.MediaGoblinApp(args.conf_file)
return mgoblin_app
+
+def prompt_if_not_set(variable, text, password=False):
+ """
+ Checks if the variable is None and prompt for a value if it is
+ """
+ if variable is None:
+ if not password:
+ variable=raw_input(text + u' ')
+ else:
+ variable=getpass.getpass(text + u' ')
+
+ return variable
diff --git a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo
index 4e4e8863..02dfa29a 100644
--- a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po
index 548e971f..61abc63f 100644
--- a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -21,6 +21,10 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr ""
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "اسم المستخدم"
@@ -54,8 +58,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "عذرًا، لقد اختار مستخدم آخر هذا الاسم."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "عÙوًا، هذا العنوان البريدي مستخدم."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
#: mediagoblin/auth/views.py:179
msgid ""
@@ -69,11 +73,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "Ù…ÙØªØ§Ø­ التحقق أو معر٠المستخدم خاطئ"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "أعدنا إرسال رسالة التحقق."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -89,43 +101,63 @@ msgstr "العنوان"
msgid "Tags"
msgstr "الوسوم"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "المسار"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "لا يمكن ترك المسار ÙØ§Ø±ØºÙ‹Ø§"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
"الجزء الذي يمثل عنوان المل٠ÙÙŠ المسار. لا حاجة إلى تغيير محتوى هذه الخانة "
"عادةً."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "السيرة"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "الموقع الإلكتروني"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "يوجد مل٠آخر بهذا المسار لدى هذى المستخدم."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "أنت تحرّر وسائط مستخدم آخر. كن حذرًا أثناء العملية."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "أنت تحرّر مل٠مستخدم آخر. كن حذرًا أثناء العملية."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
msgstr ""
#: mediagoblin/submit/forms.py:25
@@ -136,18 +168,18 @@ msgstr "الملÙ"
msgid "Description of this work"
msgstr "وص٠هذا العمل."
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "يجب أن تضع ملÙًا."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "لا يبدو أن هذا المل٠صورة!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "يا سلام! Ù†ÙØ´Ø±ÙŽØª!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "ويحي!"
@@ -167,29 +199,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "صورة قزم مرتبك"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "غنو ميدياغوبلن"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "شعار ميدياغوبلن"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "أرسل وسائط"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "أكّد بريدك"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Ù„ÙØ¬"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -200,61 +232,34 @@ msgid "Explore"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "مرحبًا بكم يا محبي الوسائط! ميدياغوبلن هو..."
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "المكان الأنسب لوسائطك!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr "مكان يجتمع Ùيه الناس ليتعاونوا ويعرضوا إبداعاتهم الأصلية والمقتبسة!"
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
-msgstr "مشروع حر، Ùنحن أحد مشاريع <a href=\"http://gnu.org\">غنو</a>."
-
-#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr "مشروع يحاول جعل عالمنا Ø£ÙØ¶Ù„ عن طريق اللامركزية (قريبًا!)."
+msgid "Hi there, welcome to this MediaGoblin site!"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:33
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"جاهز للتمدد. (Ø³ÙŠÙØ¶Ø§Ù دعم أنساق كثيرة من الوسائط قريبًا، كما سندعم الÙيديو!)."
-#: mediagoblin/templates/mediagoblin/root.html:34
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">أنشئ حسابًا مجانيًا</a>\n"
-" أو\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">ركّب ميدياغوبلن على خادومك الخاص</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "أحدث الوسائط"
@@ -262,9 +267,18 @@ msgstr "أحدث الوسائط"
msgid "Enter your new password"
msgstr "أدخل كلمة سرك الجديدة"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "أدخل اسم المستخدم أو بريدك الإلكتروني"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "أرسل"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -300,22 +314,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "ÙØ´Ù„ الولوج!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "ألا تملك حسابًا بعد؟"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "أنشئ حسابًا هنا!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "أنسيت كلمة سرك؟"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "غيّرها!"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "أنشئ حسابًا!"
@@ -361,27 +371,54 @@ msgstr "Ø§Ø­ÙØ¸ التغييرات"
msgid "Editing %(username)s's profile"
msgstr "تحرير مل٠%(username)s الشخصي"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "الوسائط الموسومة بâ€"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "انشر وسائطك"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "أرسل"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "وسائط <a href=\"%(user_url)s\">%(username)s</a>"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "عذرًا، تعذر العثور على مستخدم بهذا الاسم."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -413,35 +450,45 @@ msgstr "لا توجد وسائط تحت المعالجة"
msgid "These uploads failed to process:"
msgstr "ÙØ´Ù„ت معالجة هذه Ø§Ù„Ù…Ù„ÙØ§Øª:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "مل٠%(username)s الشخصي"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "عذرًا، تعذر العثور على مستخدم بهذا الاسم."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "يجب التحقق من البريد الإلكتروني"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "أوشكنا على الانتهاء! ما زال حسابك بحاجة إلى Ø§Ù„ØªÙØ¹ÙŠÙ„."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr "ستصلك رسالة إلكترونية خلال لحظات بها التعليمات."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "إن لم تصل."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "أعد إرسال رسالة التحقق"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr "سجّل أحدهم حسابًا بهذا الاسم، ولكننا بانتظار Ø§Ù„ØªÙØ¹ÙŠÙ„ حتى الآن."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -450,40 +497,35 @@ msgstr ""
"إن كنت أنت ذلك الشخص لكنك Ùقدت رسالة التحقق، يمكنك <a "
"href=\"%(login_url)s\">الولوج</a> وإعادة إرسالها."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "مل٠%(username)s الشخصي"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "هذه زاوية لتخبر الآخرين Ùيها عن Ù†ÙØ³Ùƒ."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Ø­Ø±Ù‘ÙØ± المل٠الشخصي"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "لم يعبئ هذا العضو بيانات ملÙÙ‡ بعد."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Ø£Ø¸Ù‡ÙØ± كل وسائط %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr "هنا ستظهر وسائطك، ولكن يبدو أنك لم تض٠شيئًا بعد."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "أض٠وسائط"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "لا يبدو أنه توجد أي وسائط هنا حتى الآن..."
@@ -503,6 +545,18 @@ msgstr "الأحدث"
msgid "Older"
msgstr "الأقدم"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "علّÙÙ‚"
@@ -511,15 +565,23 @@ msgstr "علّÙÙ‚"
msgid "I am sure I want to delete this"
msgstr "أنا متأكد من رغبتي بحذ٠هذا العمل"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "أنت على وشك حذ٠وسائط مستخدم آخر. كن حذرًا أثناء العملية."
diff --git a/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo
index 9b9e7e3b..34179a53 100644
--- a/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po
index e2cd8342..9609cb34 100644
--- a/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PROJECT project.
#
# Translators:
+# Al fred <devaleitzer@aim.com>, 2011.
# <devaleitzer@aim.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +20,10 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Aquest tipus de fitxer no és vàlid."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Nom d'usuari"
@@ -52,8 +57,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "Lamentablement aquest usuari ja existeix."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Disculpeu, aquesta adreça electrònica ja s'està utilitzant."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
#: mediagoblin/auth/views.py:179
msgid ""
@@ -68,11 +73,19 @@ msgid "The verification key or user id is incorrect"
msgstr ""
"La clau de verificació o la identificació de l'usuari no són correctes."
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "Torna'm a enviar el correu de verificació"
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -86,42 +99,62 @@ msgstr "Títol"
msgid "Tags"
msgstr "Etiquetes"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr ""
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr ""
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Biografia"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Lloc web"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr ""
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Esteu editant fitxers d'un altre usuari. Aneu amb compte."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Esteu editant el perfil d'un usuari. Aneu amb compte"
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Aquest tipus de fitxer no és vàlid."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr ""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -131,18 +164,18 @@ msgstr "Fitxer"
msgid "Description of this work"
msgstr ""
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Heu d'escollir un fitxer."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "El fitxer no és una imatge"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Visca! S'ha enviat!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Ups!"
@@ -161,31 +194,31 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/404.html:32
msgid "Image of 404 goblin stressing out"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
+msgstr "Imatge de la pantalla 404, el goblin no sap què fer..."
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "Logo de mediagoblin"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Envia fitxers"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "verifiqueu el correu electrònic"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Entra"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -196,66 +229,34 @@ msgid "Explore"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Ei, fanàtic multimèdia! MediaGoblin és..."
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "El lloc fitxer pels teus fitxers!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr ""
-"Un lloc en el qual les persones poden col·laborar i mostrar les seves "
-"creacions originals o obres derivades."
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-"Amb l'objectiu de fer del món un lloc millor a través de la "
-"descentralització i (eventualment, aviat disponible!) La federació!"
-
-#: mediagoblin/templates/mediagoblin/root.html:33
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Construït per l'ampliació. (Múltiples tipus de fitxers en breu amb el "
-"programari, incloent el suport de vídeo!)"
-#: mediagoblin/templates/mediagoblin/root.html:34
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Desenvolupat per persones com vostè. ( <a "
-"href=\"http://mediagoblin.org/pages/join.html\"> Podeu ajudar a millorar "
-"aquest programari!</a> )"
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr ""
@@ -263,8 +264,17 @@ msgstr ""
msgid "Enter your new password"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Envia"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
@@ -294,22 +304,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "Inici de sessió ha fallat!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Encara no teniu un compte?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Creeu-ne un aquí!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Creeu un compte!"
@@ -355,27 +361,54 @@ msgstr "Desa els canvis"
msgid "Editing %(username)s's profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Etiquetat amb:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Envieu els vostres fitxers"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Envia"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "<a href=\"%(user_url)s\">%(username)s</a>'s media"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Lamentablement no s'ha trobat l'usuari que cercàveu."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -397,7 +430,7 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28
msgid "Media in-processing"
-msgstr ""
+msgstr "S'està processant el fitxer"
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
msgid "No media in-processing"
@@ -405,37 +438,49 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
msgid "These uploads failed to process:"
+msgstr "No s'han pogut penjar els següents fitxers:"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Lamentablement no s'ha trobat l'usuari que cercàveu."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
-msgstr ""
+msgstr "Cal que verifiqueu l'adreça electrònica"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
-msgstr ""
+msgstr "Gairebé esteu! Tan sols falta que activeu el vostre compte"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr "Us hauria d'arribar un correu amb les instruccions per a fer-ho."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
-msgstr ""
+msgstr "Per si no hi fos:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Torna'm a enviar el correu de verificació"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr ""
+"Algú ja ha registrat un compte amb aquest nom d'usuari, però encara l'ha "
+"d'activar."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -444,46 +489,41 @@ msgstr ""
"Si siu aqeust usuari però heu perdut el correu de verificació, podeu <a "
"href=\"%(login_url)s\">entrar</a> i tornar-lo a enviar."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Edita el perfil"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
-msgstr ""
+msgstr "Aquest usuari encara no ha escrit res al seu perfil."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "View all of %(username)s's media"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
-msgstr ""
+msgstr "Tots els fitxers"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr ""
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
msgid "feed icon"
-msgstr ""
+msgstr "Icona RSS"
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
msgid "Atom feed"
@@ -497,6 +537,18 @@ msgstr ""
msgid "Older"
msgstr ""
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Comentari"
@@ -505,15 +557,23 @@ msgstr "Comentari"
msgid "I am sure I want to delete this"
msgstr ""
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
diff --git a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo
index 056e3eca..f7562eaa 100644
--- a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po
index 5c4ef0d0..7d7e0ee9 100644
--- a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po
@@ -6,6 +6,7 @@
# <benjamin@lebsanft.org>, 2011.
# <cwebber@dustycloud.org>, 2011.
# Elrond <elrond+mediagoblin.org@samba-tng.org>, 2011.
+# <jakob.kramer@gmx.de>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# <kyoo@kyoo.ch>, 2011.
# <mediagoblin.org@samba-tng.org>, 2011.
@@ -15,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 15:18+0000\n"
-"Last-Translator: piratenpanda <benjamin@lebsanft.org>\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:26+0000\n"
+"Last-Translator: elrond <elrond+mediagoblin.org@samba-tng.org>\n"
"Language-Team: German (http://www.transifex.net/projects/p/mediagoblin/team/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,6 +27,10 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Die Datei stimmt nicht mit dem gewählten Medientyp überein."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Benutzername"
@@ -48,43 +53,52 @@ msgstr "Hier nochmal eintragen, um Tippfehler zu verhindern."
#: mediagoblin/auth/forms.py:42
msgid "Email address"
-msgstr "Email-Adresse"
+msgstr "E-Mail-Adresse"
#: mediagoblin/auth/views.py:55
msgid "Sorry, registration is disabled on this instance."
-msgstr "Registrierung ist auf dieser Instanz leider deaktiviert."
+msgstr "Das Registrieren ist auf dieser Instanz leider deaktiviert."
#: mediagoblin/auth/views.py:73
msgid "Sorry, a user with that name already exists."
msgstr "Leider gibt es bereits einen Benutzer mit diesem Namen."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Tut und Leid, aber diese Email-Adresse wird bereits verwendet."
+msgid "Sorry, a user with that email address already exists."
+msgstr "Leider gibt es bereits einen Benutzer mit dieser E-Mail-Adresse."
#: mediagoblin/auth/views.py:179
msgid ""
"Your email address has been verified. You may now login, edit your profile, "
"and submit images!"
msgstr ""
-"Deine Email-Adresse wurde bestätigt. Du kannst dich nun anmelden, Dein "
+"Deine E-Mail-Adresse wurde bestätigt. Du kannst dich nun anmelden, Dein "
"Profil bearbeiten und Bilder hochladen!"
#: mediagoblin/auth/views.py:185
msgid "The verification key or user id is incorrect"
-msgstr "Der Bestätigungssschlüssel oder die Nutzernummer ist falsch."
+msgstr "Der Bestätigungsschlüssel oder die Nutzernummer ist falsch."
+
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr "Deine E-Mail-Adresse wurde bereits bestätigt."
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
-msgstr "Bestätigungs-Email wurde erneut versandt."
+msgstr "Bestätigungs-E-Mail wurde erneut versandt."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
msgstr ""
-"Konnte Email zur Wiederherstellung des Passworts nicht senden, weil dein "
-"Benutzername inaktiv oder deine Email-Adresse noch nicht verifiziert ist."
+"E-Mail zur Wiederherstellung des Passworts konnte nicht gesendet werden, "
+"weil dein Benutzername inaktiv oder deine E-Mail-Adresse noch nicht "
+"verifiziert ist."
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
msgid "Title"
@@ -94,44 +108,64 @@ msgstr "Titel"
msgid "Tags"
msgstr "Markierungen"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "Kurztitel"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "Bitte gib einen Kurztitel ein"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
"Der Titelteil der Medienadresse. Normalerweise muss hier nichts geändert "
"werden."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Biographie"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Webseite"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr "Altes Passwort"
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr "Neues Passwort"
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "Diesen Kurztitel hast du bereits vergeben."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Du bearbeitest die Medien eines Anderen. Bitte sei vorsichtig."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Du bearbeitest das Profil eines Anderen. Bitte sei vorsichtig."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Die Datei stimmt nicht mit dem gewählten Medientyp überein."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr "Falsches Passwort"
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr "Das Profil wurde aktualisiert"
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr ""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -141,18 +175,18 @@ msgstr "Datei"
msgid "Description of this work"
msgstr "Beschreibung des Werkes"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Du musst eine Datei angeben."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Diese Datei scheint kein Bild zu sein!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Yeeeaaah! Geschafft!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Hoppla!"
@@ -173,29 +207,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Bild eines angespannten Goblins"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "MediaGoblin-Logo"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Medien hochladen"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "Bitte bestätige deine Email-Adresse!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr "Bitte bestätige deine E-Mail-Adresse!"
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr "Abmelden"
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Anmelden"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -208,71 +242,34 @@ msgid "Explore"
msgstr "Entdecke"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Hallo Medien-Liebhaber! MediaGoblin ist …"
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "Der perfekte Platz für deine Medien!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-"Ein Platz für Zusammenarbeit und um Originale und abgeleitete Werke zu "
-"präsentieren!"
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
-msgstr ""
-"Frei, wie in Freiheit. (Wir sind schließlich ein <a "
-"href=\"http://gnu.org\">GNU</a>-Projekt.)"
-
-#: mediagoblin/templates/mediagoblin/root.html:32
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Weltverbesserer durch Dezentralisierung und (hoffentlich bald!) unabhängige "
-"Kommunikation!"
-#: mediagoblin/templates/mediagoblin/root.html:33
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Gebaut für Erweiterungen. (Bald mit Unterstützung für verschiedene "
-"Medientypen inklusive Videos!)"
-#: mediagoblin/templates/mediagoblin/root.html:34
-msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
msgstr ""
-"Betrieben von Leuten wie dir. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Du kannst uns dabei helfen, "
-"die Software zu verbessern!</a>)"
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Neugierig dich uns anzuschließen?"
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Gratis ein Konto einrichten</a>\n"
-" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">MediaGoblin auf deinem eigenen Server einrichten</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "Neuste Medien"
@@ -280,9 +277,18 @@ msgstr "Neuste Medien"
msgid "Enter your new password"
msgstr "Neues Passwort eingeben"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Benutzername oder Email-Adresse eingeben"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Bestätigen"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -292,8 +298,8 @@ msgstr "Dein Passwort wurde geändert. Versuche dich jetzt einzuloggen."
msgid ""
"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
-"Prüfe deinen Posteingang. Wir haben dir eine Email mit einem Link geschickt,"
-" mit dem du dein Passwort ändern kannst."
+"Überprüfe deinen Posteingang. Wir haben dir eine E-Mail mit einem Link "
+"geschickt, mit dem du dein Passwort ändern kannst."
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
#, python-format
@@ -314,28 +320,24 @@ msgstr ""
"\n"
"%(verification_url)s\n"
"\n"
-"Wenn du denkst, dass das ein Fehler ist, ignoriere einfach diese Email und bleib ein glücklicher Goblin!"
+"Wenn du denkst, dass das ein Fehler ist, ignoriere einfach diese E-Mail und bleib ein glücklicher Goblin!"
#: mediagoblin/templates/mediagoblin/auth/login.html:30
msgid "Logging in failed!"
msgstr "Anmeldevorgang fehlgeschlagen!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Hast du noch kein Konto?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Registriere dich hier!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Passwort vergessen?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "Wechsle es!"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Neues Konto registrieren!"
@@ -356,7 +358,7 @@ msgid ""
msgstr ""
"Hallo %(username)s,\n"
"\n"
-"um dein Konto bei GNU MediaGoblin zu aktivieren, musst du folgende Adresse in einem Webbrowser öffnen:\n"
+"um dein Konto bei GNU MediaGoblin zu aktivieren, musst du folgende Adresse in deinem Webbrowser öffnen:\n"
"\n"
"%(verification_url)s"
@@ -380,27 +382,54 @@ msgstr "Änderungen speichern"
msgid "Editing %(username)s's profile"
msgstr "%(username)ss Profil bearbeiten"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Medien markiert mit:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ": %(tag_name)s"
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Medien hochladen"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Bestätigen"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr "%(username)ss Medien"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "<a href=\"%(user_url)s\">%(username)s</a>s Medien"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Dieser Benutzer wurde leider nicht gefunden."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr "Löschen"
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -434,31 +463,41 @@ msgstr "Keine Medien in Bearbeitung"
msgid "These uploads failed to process:"
msgstr "Die folgenden Uploads sind fehlgeschlagen:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "%(username)ss Profil"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Dieser Benutzer konnte leider nicht gefunden werden."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
-msgstr "Email-Bestätigung benötigt"
+msgstr "E-Mail-Bestätigung benötigt"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Fast fertig! Dein Konto muss noch freigeschaltet werden."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
-"Gleich solltest du eine Email bekommen, die dir sagt, was du noch machen "
-"musst."
+"Gleich solltest du eine E-Mail erhalten, die dir erklärt, was du noch machen"
+" musst."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "Wenn sie nicht ankommt:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Bestätigung erneut senden"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -466,7 +505,7 @@ msgstr ""
"Jemand hat bereits ein Konto mit diesem Benutzernamen registriert, aber es "
"muss noch aktiviert werden."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -476,40 +515,35 @@ msgstr ""
" kannst du dich <a href=\"%(login_url)s\">anmelden</a> und sie erneut "
"senden."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "%(username)ss Profil"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Hier kannst du Anderen etwas über dich erzählen."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Profil bearbeiten"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Dieser Benutzer hat (noch) keine Daten in seinem Profil."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Alle Medien von %(username)s anschauen"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr "Hier erscheinen deine Medien. Sobald du etwas hochgeladen hast."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Medien hinzufügen"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Scheinbar gibt es hier noch nichts …"
@@ -529,6 +563,18 @@ msgstr "Neuere"
msgid "Older"
msgstr "Ältere"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr "Markiert mit"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr "und"
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Kommentar"
@@ -537,15 +583,23 @@ msgstr "Kommentar"
msgid "I am sure I want to delete this"
msgstr "Ja, wirklich löschen"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
-msgstr "Leere Kommentare sind nicht erlaubt."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
-msgstr "Kommentar hinzugefügt!"
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
+msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "Du versuchst Medien eines anderen Nutzers zu löschen. Sei vorsichtig."
diff --git a/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po
index 5e1401f6..17e6873c 100644
--- a/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,10 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr ""
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr ""
@@ -50,7 +54,7 @@ msgid "Sorry, a user with that name already exists."
msgstr ""
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
+msgid "Sorry, a user with that email address already exists."
msgstr ""
#: mediagoblin/auth/views.py:179
@@ -63,11 +67,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr ""
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr ""
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or "
"your account's email address has not been verified."
@@ -81,40 +93,60 @@ msgstr ""
msgid "Tags"
msgstr ""
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr ""
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr ""
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid "The title part of this media's URL. You usually don't need to change this."
msgstr ""
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr ""
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr ""
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr ""
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr ""
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr ""
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
msgstr ""
#: mediagoblin/submit/forms.py:25
@@ -125,16 +157,16 @@ msgstr ""
msgid "Description of this work"
msgstr ""
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr ""
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
+#: mediagoblin/submit/views.py:127
+msgid "Woohoo! Submitted!"
msgstr ""
-#: mediagoblin/submit/views.py:121
-msgid "Woohoo! Submitted!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
msgstr ""
#: mediagoblin/templates/mediagoblin/404.html:21
@@ -155,29 +187,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -188,60 +220,37 @@ msgid "Explore"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
+#: mediagoblin/templates/mediagoblin/root.html:28
+msgid ""
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, "
+"an extraordinarily great piece of media hosting software."
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:30
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
+"To add your own media, place comments, save your favourites and more, you"
+" can log in with your MediaGoblin account."
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project,"
-" after all.)"
+msgid "Don't have one yet? It's easy!"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the "
-"software, including video support!)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:34
-msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve "
-"this software!</a>)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a "
-"free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an "
+"account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" "
+" <a class=\"button_action\" "
"href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on "
"your own server</a>"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr ""
@@ -249,8 +258,17 @@ msgstr ""
msgid "Enter your new password"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
@@ -279,22 +297,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr ""
@@ -334,26 +348,53 @@ msgstr ""
msgid "Editing %(username)s's profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
@@ -385,74 +426,79 @@ msgstr ""
msgid "These uploads failed to process:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid "An email should arrive in a few moments with instructions on how to do so."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to"
" be activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can "
"<a href=\"%(login_url)s\">log in</a> and resend it."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr ""
@@ -472,6 +518,18 @@ msgstr ""
msgid "Older"
msgstr ""
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr ""
@@ -480,15 +538,23 @@ msgstr ""
msgid "I am sure I want to delete this"
msgstr ""
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
diff --git a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo
index c537c65e..8f37922f 100644
--- a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po
index f6bb1cce..e5c6356e 100644
--- a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
-"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 19:15+0000\n"
+"Last-Translator: aleksejrs <deletesoftware@yandex.ru>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,6 +21,10 @@ msgstr ""
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "La provizita dosiero ne konformas al la informtipo."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Uzantnomo"
@@ -54,8 +58,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "BedaÅ­rinde, uzanto kun tiu nomo jam ekzistas."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Tiu retpoÅtadreso jam estas uzata."
+msgid "Sorry, a user with that email address already exists."
+msgstr "Ni bedaÅ­ras, sed konto kun tiu retpoÅtadreso jam ekzistas."
#: mediagoblin/auth/views.py:179
msgid ""
@@ -69,11 +73,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "La kontrol-kodo aÅ­ la uzantonomo ne estas korekta"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr "Vi devas esti ensalutita, por ke ni sciu, al kiu sendi la retleteron!"
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr "Vi jam konfirmis vian retpoÅtadreson!"
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "Resendi vian kontrol-mesaÄon."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -89,44 +101,64 @@ msgstr "Titolo"
msgid "Tags"
msgstr "Etikedoj"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr "Dividu la etikedojn per komoj."
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "La distingiga adresparto"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "La distingiga adresparto ne povas esti malplena"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
"La parto de la dosieradreso, bazita sur la dosiertitolo. Ordinare ne necesas"
" Äin ÅanÄi."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Bio"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Retejo"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr "La malnova pasvorto"
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr "La nova pasvorto"
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "Ĉi tiu uzanto jam havas dosieron kun tiu distingiga adresparto."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Vi priredaktas dosieron de alia uzanto. Agu singardeme."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Vi redaktas profilon de alia uzanto. Agu singardeme."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "La provizita dosiero ne konformas al la informtipo."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr "MalÄusta pasvorto"
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr "La profilÅanÄo faritas!"
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr "Ŝajnas, ke en «{filename}» mankas dosiernoma finaĵo"
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -136,18 +168,18 @@ msgstr "Dosiero"
msgid "Description of this work"
msgstr "Priskribo de ĉi tiu verko"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Vi devas provizi dosieron."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "La dosiero Åajnas ne esti bildo!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Hura! AlÅutitas!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr "NetaÅ­ga dosiertipo."
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Oj!"
@@ -168,29 +200,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Bildo de 404-koboldo penÅvitanta."
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "Emblemo de MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "AlÅuti aÅ­d-vid-dosieron"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "konfirmu vian retpoÅtadreson! "
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr "Konfirmu viecon de la retpoÅtadreso!"
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr "elsaluti"
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Ensaluti"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -200,72 +232,45 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:24
msgid "Explore"
-msgstr ""
+msgstr "Ĉirkaŭrigardi"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Saluton, artemulo! MediaGoblin estas…"
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "La perfekta loko por viaj aÅ­d-vid-dosieroj!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr ""
-"Loko, kie homoj povas kunlabori, kaj elmeti originalajn kreaĵojn kaj "
-"derivaĵojn!"
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
-msgstr ""
-"Libera verko. (Ni ja estas projekto de <a href=\"http://gnu.org\">GNU</a>.)"
-
-#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-"Celanta plibonigi la mondon per sencentreco kaj (iam, baldaÅ­!) federateco!"
+msgid "Hi there, welcome to this MediaGoblin site!"
+msgstr "Saluton, kaj bonvenon al ĉi tiu MediaGoblina retpaÄaro!"
-#: mediagoblin/templates/mediagoblin/root.html:33
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Kreita por etendado. (BaldaÅ­ en la programo aperos subteno de pluraj "
-"informspecoj, inkluzive de filmoj!)"
+"Ĉi tiu retpaÄaro funkcias per <a "
+"href=\"http://mediagoblin.org\">MediaGoblin</a>, eksterordinare bonega "
+"programaro por gastigado de aÅ­dâ€vidâ€dosieroj."
-#: mediagoblin/templates/mediagoblin/root.html:34
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Vivanta per homoj kiel vi. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Vi povas helpi al ni "
-"plibonigi la programon!</a>)"
+"Por aldoni viajn proprajn dosierojn, fari liston de plej plaĉantaj por vi, "
+"ks, vi povas ensaluti je via MediaGoblina konto."
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Ĉu vi deziregas aliÄi nin?"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
+msgstr "Ĉu vi ankoraÅ­ ne havas tian? Ne malÄoju!"
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Kreu senpagan"
-" konton</a>⎠aŭ⎠<a class=\"header_submit\" "
-"href=\"http://wiki.mediagoblin.org/HackingHowto\">Kreu senpagan konton</a>"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Kreu konton en ĉi tiu retejo</a>\n"
+" aÅ­\n"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Ekfunkciigu MediaGoblin’on en via propra servilo</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "Plej nove aldonitaj dosieroj"
@@ -273,9 +278,18 @@ msgstr "Plej nove aldonitaj dosieroj"
msgid "Enter your new password"
msgstr "Enigu vian novan pasvorton"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Enigu vian salutnomon aÅ­ retpoÅtadreson"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "AlÅuti"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr "Ekhavo de nova pasvorto"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr "Sendi instrukcion"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -313,22 +327,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "Ensaluto malsukcesis!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Ĉu ankoraŭ sen konto?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Kreu Äin ĉi tie!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Ĉu vi forgesis vian pasvorton?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "ÅœanÄu Äin!"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Kreu konton!"
@@ -373,27 +383,54 @@ msgstr "Konservi ÅanÄojn"
msgid "Editing %(username)s's profile"
msgstr "Redaktado de l’profilo de %(username)s'"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Dosieroj markitaj per:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr "Dosieroj kun etikedo: %(tag_name)s"
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr "Originalo"
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "AlÅutu vian aÅ­d-vid-dosieron"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "AlÅuti"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr "Dosieroj de %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "Dosieroj de <a href=\"%(user_url)s\">%(username)s</a>"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Uzanto ne trovita."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr "AfiÅita de <a href=\"%(user_url)s\">%(username)s</a> je %(date)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr "AfiÅi komenton"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr "je"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr "AfiÅi la komenton!"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr "ÅœanÄi"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr "Forigi"
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -427,30 +464,40 @@ msgstr "Neniu dosieroj preparatas"
msgid "These uploads failed to process:"
msgstr "Preparado de ĉi tiuj alÅutaĵoj malsukcesis:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Profilo de %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Uzanto ne trovita."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "Necesas konfirmo de retpoÅtadreso"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "PreskaÅ­ finite! Restas nur validigi vian konton."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
"Post kelkaj momentoj devas veni retletero kun instrukcio pri kiel tion fari."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "Se tio ne okazas:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Resendi kontrolmesaÄon"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -458,7 +505,7 @@ msgstr ""
"Iu registris konton kun tiu ĉi uzantonomo, sed Äi devas ankoraÅ­ esti "
"aktivigita."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -467,41 +514,36 @@ msgstr ""
"Se vi estas tiu sed vi perdis vian kontrolmesaÄon, vi povas <a "
"href=\"%(login_url)s\">ensaluti</a> kaj resendi Äin."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "Profilo de %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Jen estas spaceto por rakonti pri vi al aliaj."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Redakti profilon"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Ĉi tiu uzanto ne jam aldonis informojn pri si."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Rigardi ĉiujn dosierojn de %(username)s'"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
"Äœ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:152
msgid "Add media"
msgstr "Aldoni dosieron"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Ĉi tie Åajne estas ankoraÅ­ neniuj dosieroj…"
@@ -521,6 +563,18 @@ msgstr "Plinovaj"
msgid "Older"
msgstr "Malplinovaj"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr "Iri al paÄo:"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr "Markita per: "
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr "kaj"
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Komento"
@@ -529,15 +583,25 @@ msgstr "Komento"
msgid "I am sure I want to delete this"
msgstr "Mi estas certa, ke mi volas forigi ĉi tion"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
-msgstr ""
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr "Oj, via komento estis malplena."
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr "Via komento estis afiÅita!"
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
+msgstr "Vi forigis la dosieron."
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
+"La dosiero ne estis forigita, ĉar vi ne konfirmis vian certecon per la "
+"markilo."
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "Vi estas forigonta dosieron de alia uzanto. Estu singardema."
diff --git a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo
index 2d2b9243..bed6aab8 100644
--- a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po
index a3c9939b..460c074c 100644
--- a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po
@@ -10,13 +10,14 @@
# <juangsub@gmail.com>, 2011.
# <juanma@kde.org.ar>, 2011.
# Mario Rodriguez <msrodriguez00@gmail.com>, 2011.
+# <mu@member.fsf.org>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
-"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:49+0000\n"
+"Last-Translator: manolinux <mu@member.fsf.org>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mediagoblin/team/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,6 +26,10 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Archivo inválido para el formato seleccionado."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Nombre de usuario"
@@ -59,8 +64,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "Lo sentimos, ya existe un usuario con ese nombre."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Lo sentimos, esa dirección de correo electrónico ya ha sido tomada."
+msgid "Sorry, a user with that email address already exists."
+msgstr "Lo sentimos, ya existe un usuario con esa dirección de email."
#: mediagoblin/auth/views.py:179
msgid ""
@@ -75,11 +80,21 @@ msgid "The verification key or user id is incorrect"
msgstr ""
"La clave de verificación o la identificación de usuario son incorrectas"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+"Debes iniciar sesión para que podamos saber a quién le enviamos el correo "
+"electrónico!"
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr "Ya haz verificado tu dirección de email!"
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "Se reenvió tu correo electrónico de verificación."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -96,44 +111,64 @@ msgstr "Título"
msgid "Tags"
msgstr "Etiquetas"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr "Separar etiquetas por comas."
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "Ficha"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "La ficha no puede estar vacía"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
"La parte del título de la URL de este contenido. Normalmente no necesitas "
"cambiar esto."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Bio"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Sitio web"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr "Vieja contraseña"
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr "Nueva contraseña"
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "Una entrada con esa ficha ya existe para este usuario."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Estás editando el contenido de otro usuario. Proceder con precaución."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Estás editando un perfil de usuario. Proceder con precaución."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Archivo inválido para el formato seleccionado."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr "Contraseña incorrecta"
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr "Perfil editado!"
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr "No se pudo encontrar la extensión del archivo en \"{filename}\""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -143,18 +178,18 @@ msgstr "Archivo"
msgid "Description of this work"
msgstr "Descripción de esta obra"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Debes proporcionar un archivo."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "¡El archivo no parece ser una imagen!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "¡Woohoo! ¡Enviado!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr "Tipo de archivo inválido."
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Ups!"
@@ -175,29 +210,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Imagen de 404 goblin estresándose"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "Logo de MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Enviar contenido"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "¡Verifica tu correo electrónico!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr "Verifica tu email!"
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr "Cerrar sesión"
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Conectarse"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -210,71 +245,42 @@ msgid "Explore"
msgstr "Explorar"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "¡Hola, amante de los contenidos! MediaGoblin es ..."
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "¡El lugar ideal para tus contenidos!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr ""
-"¡Un lugar para colaborar y exhibir tus creaciones originales y derivadas!"
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
-msgstr ""
-"Libre, como en la libertad. (Somos parte del proyecto <a "
-"href=\"http://gnu.org\">GNU</a> después de todo.)"
+msgid "Hi there, welcome to this MediaGoblin site!"
+msgstr "Hola, bienvenido a este sitio de MediaGoblin!"
-#: mediagoblin/templates/mediagoblin/root.html:32
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Queriendo hacer del mundo un mejor lugar a través de la descentralización y "
-"(eventualmente, muy pronto!) la federalización!"
+"Este sitio está montado con <a "
+"href=\"http://mediagoblin.org\">MediaGoblin</a>, un programa libre buenísimo"
+" para gestionar contenido multimedia."
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr ""
-"Pensado para ser extensible. (Prontamente soporte para multiples formatos, "
-"incluyendo video!)"
-
-#: mediagoblin/templates/mediagoblin/root.html:34
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Impulsado por gente como vos. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\"> Vos podés ayudarnos a "
-"mejorar este programa</a>)"
+"Para añadir tus propios contenidos, dejar comentarios, guardar tus favoritos"
+" y más, puedes iniciar sesión con tu cuenta de MediaGoblin."
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Te gustaría unirte a nosotros?"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
+msgstr "Aún no tienes una? Es fácil!"
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Crea una "
-"cuenta gratuita</a> o <a class=\"header_submit\" "
-"href=\"http://wiki.mediagoblin.org/HackingHowto\">Establece MediaGoblin en "
-"tu propio servidor</a>"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Crea una cuenta en este sitio</a>\n"
+" o\n"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Instala MediaGoblin en tu propio servidor</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "El contenido más reciente"
@@ -282,9 +288,18 @@ msgstr "El contenido más reciente"
msgid "Enter your new password"
msgstr "Ingrese su nueva contraseña"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Introduzca su nombre de usuario o correo electrónico"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Enviar"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr "Recuperar contraseña"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr "Enviar instrucciones"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -319,22 +334,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "¡Falló el inicio de sesión!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "¿No tienes una cuenta?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "¡Crea una aquí!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "¿Olvidaste tu contraseña?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "Cambiarlo!"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "¡Crea una cuenta!"
@@ -379,27 +390,54 @@ msgstr "Guardar cambios"
msgid "Editing %(username)s's profile"
msgstr "Editando el perfil de %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Contenido etiquetado con:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr "Contenido etiquetado con: %(tag_name)s"
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr "Original"
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Envía tu contenido"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Enviar"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr "Contenidos de %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "Contenido de <a href=\"%(user_url)s\">%(username)s</a>'s"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Lo sentimos, no se encontró ese usuario."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr "Por <a href=\"%(user_url)s\">%(username)s</a> en %(date)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr "Pon un comentario."
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr "en"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr "¡Pon un comentario!"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr "Editar"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr "Borrar"
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -433,31 +471,41 @@ msgstr "No hay contenido siendo procesado."
msgid "These uploads failed to process:"
msgstr "Estos archivos no pudieron ser procesados:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Perfil de %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Lo sentimos, no se encontró ese usuario."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "Es necesario un correo electrónico de verificación"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Casi terminas! Solo falta activar la cuenta."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
"En unos momentos te debería llegar un correo electrónico con las "
"instrucciones para hacerlo."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "En caso de que no:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Reenviar correo electrónico de verificación"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -465,7 +513,7 @@ msgstr ""
"Alguien ya registró una cuenta con ese nombre de usuario, pero todavía no "
"fue activada."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -474,41 +522,36 @@ msgstr ""
"Si tú eres esa persona, pero has perdido tu correo electrónico de "
"verificación, puedes <a href=\"%(login_url)s\">acceder</a> y reenviarlo."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "Perfil de %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Aquí hay un lugar para que le cuentes a los demás sobre tí."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Editar perfil"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Este usuario (todavia) no ha completado su perfil."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Ver todo el contenido de %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
"Aquí es donde tú contenido estará, pero parece que aún no has agregado nada."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Añadir contenido"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Parece que aún no hay ningún contenido aquí..."
@@ -528,6 +571,18 @@ msgstr "Recientes"
msgid "Older"
msgstr "Antiguas"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr "Ir a la página:"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr "Etiquetado con"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr "y"
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Comentario"
@@ -536,15 +591,23 @@ msgstr "Comentario"
msgid "I am sure I want to delete this"
msgstr "Estoy seguro de que quiero borrar esto"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
-msgstr ""
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr "Ups, tu comentario estaba vacío."
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
-msgstr ""
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr "¡Tu comentario ha sido publicado!"
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
+msgstr "Eliminaste el contenido"
+
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
+msgstr "El contenido no se eliminó porque no marcaste que estabas seguro."
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
"Estás a punto de eliminar un contenido de otro usuario. Proceder con "
diff --git a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo
index 90e83303..ed1ea35d 100644
--- a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po
index 0a6a5a40..8d1e2711 100644
--- a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po
@@ -13,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-04 10:05+0000\n"
-"Last-Translator: chesuidayeur <chesuidayeur@yahoo.fr>\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+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"
@@ -24,6 +24,10 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Le fichier envoyé ne correspond pas au type de média."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Nom d'utilisateur"
@@ -59,8 +63,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "Un utilisateur existe déjà avec ce nom, désolé."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Désolé, cette adresse courriel a déjà été prise."
+msgid "Sorry, a user with that email address already exists."
+msgstr "Désolé, il existe déjà un utilisateur ayant cette adresse e-mail."
#: mediagoblin/auth/views.py:179
msgid ""
@@ -74,11 +78,20 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "La clé de vérification ou le nom d'utilisateur est incorrect."
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+"Vous devez être authentifié afin que nous sachions à qui envoyer l'e-mail !"
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr "Votre adresse e-mail a déjà été vérifiée !"
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "E-mail de vérification renvoyé."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -94,48 +107,68 @@ msgstr "Titre"
msgid "Tags"
msgstr "Tags"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "Légende"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "La légende ne peut pas être laissée vide."
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
"Le nom de ce media dans l'URL. Vous n'avez normalement pas besoin de le "
"changer"
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Bio"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Site web"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr "Ancien mot de passe."
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr "Nouveau mot de passe"
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "Une entrée existe déjà pour cet utilisateur avec la même légende."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr ""
"Vous vous apprêtez à modifier le média d'un autre utilisateur. Veuillez "
"prendre garde."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr ""
"Vous vous apprêtez à modifier le profil d'un utilisateur. Veuillez prendre "
"garde."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Le fichier envoyé ne correspond pas au type de média."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr "Mauvais mot de passe"
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr "Profile mis à jour !"
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr "Impossible d'extraire une extension de fichier de \"{nomfichier}\""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -145,21 +178,21 @@ msgstr "Fichier"
msgid "Description of this work"
msgstr "Descriptif pour ce travail"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Il vous faut fournir un fichier."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Ce fichier ne semble pas être une image !"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Youhou, c'est envoyé !"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr "Type de fichier invalide."
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
-msgstr "Zut!"
+msgstr "Zut !"
#: mediagoblin/templates/mediagoblin/404.html:24
msgid "There doesn't seem to be a page at this address. Sorry!"
@@ -177,29 +210,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Image de 404 gobelin angoissé"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "Logo MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Soumettre un média"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "vérifiez votre adresse e-mail !"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr "Vérifiez votre adresse e-mail !"
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr "déconnexion"
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "S'identifier"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -212,71 +245,39 @@ msgid "Explore"
msgstr "Explorer"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Salut à tous, amateur de médias! MediaGoblin est ..."
+msgid "Hi there, welcome to this MediaGoblin site!"
+msgstr "Bonjour, et bienvenu sur ce site MediaGoblin !"
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "L'endroit idéal pour vos médias!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr ""
-"Un espace de création collaboratif : montrez vos œuvres, originales ou "
-"dérivées !"
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
-msgstr ""
-"Logiciel libre. (Nous sommes un projet <a href=\"http://gnu.org\">GNU</a> "
-"après tout.)"
-
-#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-"Une tentative de rendre le monde meilleur grâce à la décentralisation et (à "
-"terme, et pour bientôt !) la fédération !"
-
-#: mediagoblin/templates/mediagoblin/root.html:33
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
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:29
msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Propulsé par des gens comme vous. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Vous pouvez nous aider à "
-"améliorer ce logiciel!</a>)"
+"Ajoutez vos propres medias, commentez ceux des autres, sauvegardez vos "
+"préférés et plus encore ! Faites tout cela depuis votre compte MediaGoblin."
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Envi de vous joindre à nous ?"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
+msgstr "Vous n'en avez pas ? C'est facile !"
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Créez gratuitement en compte</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Créez un compte sur ce site</a>\n"
" ou\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Installez MediaGoblin sur votre propre serveur</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Déployez MediaGoblin sur votre propre serveur</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "Tout derniers media"
@@ -284,9 +285,18 @@ msgstr "Tout derniers media"
msgid "Enter your new password"
msgstr "Entrez un nouveau mot de passe"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Entrez votre nom d'utilisateur ou votre email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Soumettre"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr "Récupérer le mot de passe"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr "Envoyer les instructions"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -327,25 +337,21 @@ msgstr ""
msgid "Logging in failed!"
msgstr "La connexion a échoué!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
-msgstr "Pas encore de compte?"
+msgstr "Pas encore de compte ?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
-msgstr "Créez-en un ici!"
+msgstr "Créez-en un ici !"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Vous avez oublié votre mot de passe ?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "Changez-le !"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
-msgstr "Créer un compte!"
+msgstr "Créer un compte !"
#: mediagoblin/templates/mediagoblin/auth/register.html:31
msgid "Create"
@@ -387,27 +393,54 @@ msgstr "Enregistrer les modifications"
msgid "Editing %(username)s's profile"
msgstr "Modification du profil de %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Média comportant les tags suivants :"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr "Médias taggés avec : %(tag_name)s "
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr "Original"
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Soumettez ce média"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Soumettre"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr "Medias de %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "Médias de <a href=\"%(user_url)s\">%(username)s</a>"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Impossible de trouver cet utilisateur, désolé."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -441,31 +474,41 @@ msgstr "Aucun média en transformation"
msgid "These uploads failed to process:"
msgstr "Le traitement de ces ajouts a échoué :"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "profil de %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Impossible de trouver cet utilisateur, désolé."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "Vérification d'email nécessaire"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Presque fini ! Votre compte a encore besoin d'être activé."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
"Un e-mail devrait vous parvenir dans quelques instants ; il vous indiquera "
"comment procéder."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "Si la vérification n'est pas arrivée à bon port :"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Renvoyer l'e-mail de vérification"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -473,7 +516,7 @@ msgstr ""
"Quelqu'un a enregistré un compte avec ce nom, mais il doit encore être "
"activé."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -483,30 +526,25 @@ msgstr ""
"vérification, vous pouvez vous <a href=\"%(login_url)s\">identifier</a> et "
"le renvoyer."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "profil de %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Voici un endroit pour parler aux autres de vous-même."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Modifier le profil"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Cet utilisateur n'a pas (encore) rempli son profil."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Voir tous les médias de %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
@@ -514,11 +552,11 @@ msgstr ""
"C'est là où vos médias apparaîssent, mais vous ne semblez pas avoir encore "
"ajouté quoi que ce soit."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Ajouter des médias"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Il ne semble pas y avoir de média là, pour l'instant ..."
@@ -538,6 +576,18 @@ msgstr "Nouveaux"
msgid "Older"
msgstr "Anciens"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr "Taggé avec"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr "et"
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Commentaire"
@@ -546,15 +596,25 @@ msgstr "Commentaire"
msgid "I am sure I want to delete this"
msgstr "Je suis sûr de vouloir supprimer cela"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
-msgstr "Les commentaires vides ne sont pas autorisés."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
-msgstr "Votre commentaire a été posté !"
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
+msgstr "Vous avez supprimé le media."
+
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
+msgstr ""
+"Ce media n'a pas été supprimé car vous n'avez pas confirmer que vous étiez "
+"sur."
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
"Vous êtes sur le point de supprimer des médias d'un autre utilisateur. "
diff --git a/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo
index feb156ff..c0a1ecb6 100644
--- a/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po
index d9fdf8d6..512635e3 100644
--- a/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,10 @@ msgstr ""
"Language: ia\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr ""
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Nomine de usator"
@@ -52,7 +56,7 @@ msgid "Sorry, a user with that name already exists."
msgstr ""
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
+msgid "Sorry, a user with that email address already exists."
msgstr ""
#: mediagoblin/auth/views.py:179
@@ -65,11 +69,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr ""
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr ""
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -83,41 +95,61 @@ msgstr "Titulo"
msgid "Tags"
msgstr ""
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr ""
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr ""
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr ""
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Sito web"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr ""
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr ""
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr ""
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
msgstr ""
#: mediagoblin/submit/forms.py:25
@@ -128,16 +160,16 @@ msgstr ""
msgid "Description of this work"
msgstr ""
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr ""
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
+#: mediagoblin/submit/views.py:127
+msgid "Woohoo! Submitted!"
msgstr ""
-#: mediagoblin/submit/views.py:121
-msgid "Woohoo! Submitted!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
msgstr ""
#: mediagoblin/templates/mediagoblin/404.html:21
@@ -158,29 +190,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Initiar session"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -191,57 +223,34 @@ msgid "Explore"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
+#: mediagoblin/templates/mediagoblin/root.html:28
+msgid ""
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:30
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Don't have one yet? It's easy!"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:34
-msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr ""
@@ -249,8 +258,17 @@ msgstr ""
msgid "Enter your new password"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
@@ -280,22 +298,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Crear un conto!"
@@ -335,26 +349,53 @@ msgstr ""
msgid "Editing %(username)s's profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
@@ -387,75 +428,80 @@ msgstr ""
msgid "These uploads failed to process:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Profilo de %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
"href=\"%(login_url)s\">log in</a> and resend it."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "Profilo de %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr ""
@@ -475,6 +521,18 @@ msgstr ""
msgid "Older"
msgstr ""
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Commento"
@@ -483,15 +541,23 @@ msgstr "Commento"
msgid "I am sure I want to delete this"
msgstr ""
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
diff --git a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo
index cc0ccbfa..1319a605 100644
--- a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po
index 183d09ed..96d1f0a2 100644
--- a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,10 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "documento non valido come tipo multimediale."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Nome utente"
@@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "Spiacente, esiste già un utente con quel nome"
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Spiacente, quell'indirizzo email è già stato preso."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
#: mediagoblin/auth/views.py:179
msgid ""
@@ -67,11 +71,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "La chiave di verifica o l'id utente è sbagliato"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "Rispedisci email di verifica"
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -85,44 +97,64 @@ msgstr "Titolo"
msgid "Tags"
msgstr "Tags"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr ""
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr ""
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Bio"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Sito web"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr ""
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr ""
"Stai modificando documenti multimediale di un altro utente. Procedi con "
"attenzione."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Stai modificando il profilo di un utente. Procedi con attenzione."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "documento non valido come tipo multimediale."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr ""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -132,18 +164,18 @@ msgstr "Documento"
msgid "Description of this work"
msgstr "Descrizione di questo lavoro"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Devi specificare un documento."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Il documento non sembra essere un'immagine!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Evviva! "
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Oops!"
@@ -164,29 +196,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Immagine di 404 folletti che stressano"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "MediaGoblin logo"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
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:65
+msgid "Verify your email!"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Accedi"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -199,65 +231,34 @@ 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.)"
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-"Libero, come in libertà. (Siamo un progetto <a "
-"href=\"http://gnu.org\">GNU</a>, dopotutto.)"
-#: mediagoblin/templates/mediagoblin/root.html:32
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Con l'obbiettivo di rendere il mondo un posto migliore attraverso la "
-"decentrelizzazione e (finalmente, presto!) federazione!"
-#: mediagoblin/templates/mediagoblin/root.html:33
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
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>)"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Eccitato di unirti a noi?"
-
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "Documenti multimediali più recenti"
@@ -265,9 +266,18 @@ msgstr "Documenti multimediali più recenti"
msgid "Enter your new password"
msgstr "Inserisci la tua nuova password"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Inserisci il tuo nome utente o email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Conferma"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -296,22 +306,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "Accesso fallito!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Non hai ancora un account?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Creane uno qui!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Hai dimenticato la password?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Crea un account!"
@@ -356,27 +362,54 @@ msgstr "Salva i cambiamenti"
msgid "Editing %(username)s's profile"
msgstr "Stai modificando il profilo di %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Media taggata con:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Inoltra documento multimediale"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Conferma"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "Documenti multimediali di <a href=\"%(user_url)s\">%(username)s</a>"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Mi dispiace, utente non trovato"
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -408,30 +441,40 @@ msgstr "Nessun documento multimediale in elaborazione"
msgid "These uploads failed to process:"
msgstr "L'elaborazione di questi upload è fallita:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "profilo di %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Mi dispiace, utente non trovato"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "è necessario verificare email"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Quasi finito! Il tuo account deve ancora essere attivato."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
"In breve dovresti ricevere un email contenente istruzioni su come fare."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "Nel caso non fosse:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Rispedisci email di verifica"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -439,7 +482,7 @@ msgstr ""
"Qualcuno ha registrato un account con questo nome utente, ma deve ancora "
"essere attivato."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -448,30 +491,25 @@ msgstr ""
"Se sei quella persona ma hai perso l'email di verifica, puoi <a "
"href=\"%(login_url)s\">accedere</a> e rispedirlo."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "profilo di %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Ecco un posto dove raccontare agli altri di te."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Modifica profilo"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Questo utente non ha (ancora) compilato il proprio profilo."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Visualizza tutti i file multimediali di %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
@@ -479,11 +517,11 @@ 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
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Aggiungi documenti multimediali"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Non sembra ci sia ancora nessun documento multimediali qui.."
@@ -503,6 +541,18 @@ msgstr "Più nuovo"
msgid "Older"
msgstr "Più vecchio"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Commento"
@@ -511,15 +561,23 @@ msgstr "Commento"
msgid "I am sure I want to delete this"
msgstr "Sono sicuro di volerlo cancellare"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
"Stai cancellando un documento multimediale di un altro utente. Procedi con "
diff --git a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo
index 5267eddc..39f3595b 100644
--- a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po
index 59262d82..3198eed9 100644
--- a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,10 @@ msgstr ""
"Language: ja\n"
"Plural-Forms: nplurals=1; plural=0\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr ""
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "ユーザãƒãƒ¼ãƒ "
@@ -52,7 +56,7 @@ msgid "Sorry, a user with that name already exists."
msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€ãã®åå‰ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
+msgid "Sorry, a user with that email address already exists."
msgstr ""
#: mediagoblin/auth/views.py:179
@@ -65,11 +69,19 @@ msgstr "メアドãŒç¢ºèªã•れã¦ã„ã¾ã™ã€‚ã“れã§ã€ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãƒ—
msgid "The verification key or user id is incorrect"
msgstr "検証キーã¾ãŸã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼IDãŒé–“é•ã£ã¦ã„ã¾ã™"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "検証メールをå†é€ã—ã¾ã—ãŸã€‚"
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -83,41 +95,61 @@ msgstr "タイトル"
msgid "Tags"
msgstr "ã‚¿ã‚°"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "スラグ"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "スラグã¯å¿…è¦ã§ã™ã€‚"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "自己紹介"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "URL"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "ãã®ã‚¹ãƒ©ã‚°ã‚’æŒã¤ã‚¨ãƒ³ãƒˆãƒªã¯ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚"
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "ã‚ãªãŸã¯ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’編集ã—ã¦ã„ã¾ã™ã€‚ã”æ³¨æ„ãã ã•ã„。"
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "ã‚ãªãŸã¯ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ—ロファイルを編集ã—ã¦ã„ã¾ã™ã€‚ã”æ³¨æ„ãã ã•ã„。"
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
msgstr ""
#: mediagoblin/submit/forms.py:25
@@ -128,18 +160,18 @@ msgstr "ファイル"
msgid "Description of this work"
msgstr ""
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "ファイルをæä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "ファイルãŒç”»åƒã§ã¯ãªã„よã†ã§ã™ï¼"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "投稿終了ï¼"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr ""
@@ -158,29 +190,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "コンテンツを投稿"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "メアドを確èªã—ã¦ãã ã•ã„ï¼"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "ログイン"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -191,57 +223,34 @@ msgid "Explore"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
+#: mediagoblin/templates/mediagoblin/root.html:28
+msgid ""
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:30
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Don't have one yet? It's easy!"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:34
-msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr ""
@@ -249,8 +258,17 @@ msgstr ""
msgid "Enter your new password"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "é€ä¿¡"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
@@ -280,22 +298,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "ã¾ã ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’æŒã£ã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "ã“ã“ã§ä½œæˆï¼"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "アカウントを作æˆï¼"
@@ -340,27 +354,54 @@ msgstr "投稿ã™ã‚‹"
msgid "Editing %(username)s's profile"
msgstr "%(username)sã•ã‚“ã®ãƒ—ロフィールを編集中"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "タグ付ã‘ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "コンテンツを投稿"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "é€ä¿¡"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "<a href=\"%(user_url)s\">%(username)s</a>ã•ã‚“ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -392,75 +433,80 @@ msgstr ""
msgid "These uploads failed to process:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "%(username)sã•ã‚“ã®ãƒ—ロフィール"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr "メールã¯ã€ãã®æ–¹æ³•ã®æŒ‡ç¤ºã§ã„ãã¤ã‹ã®çž¬é–“ã«åˆ°ç€ã—ã¾ã™ã€‚"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "到ç€ã—ãªã„å ´åˆã¯ã€"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "確èªãƒ¡ãƒ¼ãƒ«ã‚’å†é€ä¿¡"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
"href=\"%(login_url)s\">log in</a> and resend it."
msgstr "ã‚ãªãŸã®ç¢ºèªãƒ¡ãƒ¼ãƒ«ã‚’紛失ã—ãŸå ´åˆã€<a href=\"%(login_url)s\">ログイン</a>ã—ã¦å†é€ã§ãã¾ã™ã€‚"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "%(username)sã•ã‚“ã®ãƒ—ロフィール"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "プロフィールを編集"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "%(username)sã•ã‚“ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ã™ã¹ã¦è¦‹ã‚‹"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr ""
@@ -480,6 +526,18 @@ msgstr ""
msgid "Older"
msgstr ""
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr ""
@@ -488,15 +546,23 @@ msgstr ""
msgid "I am sure I want to delete this"
msgstr ""
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
diff --git a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo
index e6d1976b..842bfb9b 100644
--- a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po
index 618daf6f..c1778676 100644
--- a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,10 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr ""
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Gebruikersnaam"
@@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "Sorry, er bestaat al een gebruiker met die naam."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Sorry, dat e-mailadres is al ingenomen."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
#: mediagoblin/auth/views.py:179
msgid ""
@@ -67,11 +71,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "De verificatie sleutel of gebruikers-ID is onjuist"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "Verificatie e-mail opnieuw opgestuurd."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -85,44 +97,64 @@ msgstr "Titel"
msgid "Tags"
msgstr "Etiket"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr ""
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr ""
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Bio"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Website"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr ""
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr ""
"U bent de media van een andere gebruiker aan het aanpassen. Ga voorzichtig "
"te werk."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr ""
"U bent een gebruikersprofiel aan het aanpassen. Ga voorzichtig te werk."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
msgstr ""
#: mediagoblin/submit/forms.py:25
@@ -133,18 +165,18 @@ msgstr "Bestand"
msgid "Description of this work"
msgstr ""
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "U moet een bestand aangeven."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Het lijkt erop dat dit bestand geen afbeelding is!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Mooizo! Toegevoegd!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr ""
@@ -163,29 +195,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Voeg media toe"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "Controleer uw e-mail!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Inloggen"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -196,57 +228,34 @@ msgid "Explore"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
+#: mediagoblin/templates/mediagoblin/root.html:28
+msgid ""
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:30
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Don't have one yet? It's easy!"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:34
-msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr ""
@@ -254,8 +263,17 @@ msgstr ""
msgid "Enter your new password"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Voeg toe"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
@@ -285,22 +303,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Heeft u nog geen account?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Maak er hier een!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Maak een account aan!"
@@ -342,27 +356,54 @@ msgstr "Wijzigingen opslaan"
msgid "Editing %(username)s's profile"
msgstr "Het profiel aanpassen van %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Media met het etiket:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Voeg media toe"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Voeg toe"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "Media van <a href=\"%(user_url)s\"> %(username)s </a>"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Sorry, die gebruiker kon niet worden gevonden."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -394,37 +435,47 @@ msgstr ""
msgid "These uploads failed to process:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Profiel van %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Sorry, die gebruiker kon niet worden gevonden."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
"Een e-mail zou in een paar ogenblikken aan moeten komen met instructies "
"hiertoe."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "Zoniet:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Stuur de verificatie e-mail opnieuw op."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -433,40 +484,35 @@ msgstr ""
"Als u die persoon bent, maar de verificatie e-mail verloren hebt, kunt u <a "
"href=\"%(login_url)s\">inloggen</a> en hem nogmaals verzenden."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "Profiel van %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Profiel aanpassen."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Bekijk alle media van %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr ""
@@ -486,6 +532,18 @@ msgstr ""
msgid "Older"
msgstr ""
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Commentaar"
@@ -494,15 +552,23 @@ msgstr "Commentaar"
msgid "I am sure I want to delete this"
msgstr ""
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
diff --git a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo
index ba427c29..c07f42be 100644
--- a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po
index c74e1dd0..0b0c2a27 100644
--- a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,10 @@ msgstr ""
"Language: nn_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Ugyldig fil for mediatypen."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Brukarnamn"
@@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "Ein konto med dette brukarnamnet finst allereide."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Den epostadressa er allereide teken."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
#: mediagoblin/auth/views.py:179
msgid ""
@@ -67,11 +71,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "Stadfestingsnykelen eller brukar-ID-en din er feil."
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "Send ein ny stadfestingsepost."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -86,42 +98,62 @@ msgstr "Tittel"
msgid "Tags"
msgstr "Merkelappar"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "Nettnamn"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "Nettnamnet kan ikkje vera tomt"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr "Nettnamnet (adressetittel) for mediefila di. Trengst ikkje endrast."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Presentasjon"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Heimeside"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "Eit innlegg med denne adressetittelen finst allereie."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Trå varsamt, du endrar nokon andre sine mediefiler."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Trå varsamt, du endrar nokon andre sin profil."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Ugyldig fil for mediatypen."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr ""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -131,18 +163,18 @@ msgstr "Fil"
msgid "Description of this work"
msgstr "Skildring av mediefila"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Du må velja ei fil."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Fila verkar ikkje å vera ei gyldig biletefil."
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Johoo! Opplasta!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Oops."
@@ -163,29 +195,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Bilete av stressa 404-tusse."
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Last opp"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "Stadfest epostadressa di"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Logg inn"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -198,69 +230,34 @@ msgid "Explore"
msgstr "Utforsk"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Hei der mediaentusiast, MediaGoblin..."
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "Er ein perfekt plass for mediet ditt!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-"Er ein plass for folk å samarbeida og visa fram sjølvlaga og vidarebygde "
-"verk."
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
-msgstr "Fri som i fridom (me er eit <a href=\"http://gnu.org\">GNU</a>-prosjekt)."
-#: mediagoblin/templates/mediagoblin/root.html:32
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Arbeidar for å gjera verda ein betre stad gjennom desentralisering og (til "
-"slutt, kjem snart!) federering, enkelt forklart deling og sending av "
-"mediefiler og kommentarar over fleire nettstader."
-
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr "Bygd for utviding (fleire medietypar kjem snart, m.a. video)."
-#: mediagoblin/templates/mediagoblin/root.html:34
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Driven av folk som deg. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Du kan hjelpa med å forbetra"
-" MediaGoblin</a>)"
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Lyst til å bli med oss?"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Opprett ein "
-"gratis konto</a> eller <a class=\"header_submit\" "
-"href=\"http://wiki.mediagoblin.org/HackingHowto\">installer MediaGoblin på "
-"eigen tenar</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "Nyaste mediefiler"
@@ -268,9 +265,18 @@ msgstr "Nyaste mediefiler"
msgid "Enter your new password"
msgstr "Fyll inn passord"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Fyll inn brukarnamn eller epost"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Send"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -308,22 +314,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "Innlogging feila"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Har du ingen konto?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Lag ein!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Gløymd passordet?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "Endra"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Lag ein konto."
@@ -368,27 +370,54 @@ msgstr "Lagra"
msgid "Editing %(username)s's profile"
msgstr "Endrar profilen til %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Merkelappar:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Last opp"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Send"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "<a href=\"%(user_url)s\">%(username)s</a> sine mediefiler"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Fann ingen slik brukar"
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -420,35 +449,45 @@ msgstr "Ingen media under handsaming"
msgid "These uploads failed to process:"
msgstr "Klarte ikkje handsama desse opplasta filene:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "%(username)s sin profil"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Fann ingen slik brukar"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "Epostverifisering trengst."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Nesten ferdig. Du treng berre aktivera kontoen."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr "Ein epost med instruksjonar kjem straks."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "I tilfelle det ikkje skjer:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Send ein ny epost"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr "Dette brukarnamnet finst allereie, men det er ikkje aktivert."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -457,40 +496,35 @@ msgstr ""
"Viss dette er deg, kan du <a href=\"%(login_url)s\">logga inn</a> for å få "
"tilsendt ny epost med stadfestingslenkje."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "%(username)s sin profil"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Her kan du fortelja om deg sjølv."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Endra profil"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Brukaren har ikkje fylt ut profilen sin (enno)."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Sjå alle %(username)s sine mediefiler"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
-msgstr "Her kjem mediefilene dine. Ser ikkje ut til at du har lagt til noko."
+msgstr "Her kjem mediefilene dine."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Legg til mediefiler"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Ser ikkje ut til at det finst nokon mediefiler her nett no."
@@ -510,6 +544,18 @@ msgstr "Nyare"
msgid "Older"
msgstr "Eldre"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Innspel"
@@ -518,15 +564,23 @@ msgstr "Innspel"
msgid "I am sure I want to delete this"
msgstr "Eg er sikker eg vil sletta dette"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
"Du er i ferd med å sletta ein annan brukar sine mediefiler. Trå varsamt."
diff --git a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo
index 31cb860c..95d6d0ae 100644
--- a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po
index 047e598b..daa65e0f 100644
--- a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/mediagoblin/team/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -20,6 +20,10 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Arquivo inválido para esse tipo de mídia"
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Nome de Usuário"
@@ -54,8 +58,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "Desculpe, um usuário com este nome já existe."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Desculpe, esse endereço de email já está em uso."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
#: mediagoblin/auth/views.py:179
msgid ""
@@ -69,11 +73,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "A chave de verificação ou nome usuário estão incorretos."
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "O email de verificação foi reenviado."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -89,43 +101,63 @@ msgstr "Título"
msgid "Tags"
msgstr "Etiquetas"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "Arquivo"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "O arquivo não pode estar vazio"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
"A parte título da URL dessa mídia. Geralmente não é necessário alterar isso."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Biografia"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Website"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "Uma entrada com esse arquivo já existe para esse usuário"
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Você está editando a mídia de outro usuário. Tenha cuidado."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Você está editando um perfil de usuário. Tenha cuidado."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Arquivo inválido para esse tipo de mídia"
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr ""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -135,18 +167,18 @@ msgstr "Arquivo"
msgid "Description of this work"
msgstr "Descrição desse trabalho"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Você deve fornecer um arquivo."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "O arquivo não parece ser uma imagem!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Eba! Enviado!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Oops"
@@ -167,29 +199,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Imagem do goblin 404 aparecendo"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "Logo MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Enviar mídia"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "Verifique seu email!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Entrar"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -202,71 +234,34 @@ msgid "Explore"
msgstr "Explorar"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Olá amante de mídias. MediaGoblin é..."
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "O lugar perfeito para sua mídia!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr ""
-"Um lugar para as pessoas colaborarem e mostrarem suas criações originais e "
-"derivadas!"
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-"Livre como a liberdade. (Afinal, somos um projeto <a "
-"href=\"http://gnu.org\">GNU</a>)"
-#: mediagoblin/templates/mediagoblin/root.html:32
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Com o objetivo de fazer um mundo melhor através da descentralização e "
-"(eventualmente, em breve) federação!"
-#: mediagoblin/templates/mediagoblin/root.html:33
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Construído para extensibilidade. (Múltiplos tipos de mídia em breve, "
-"incluindo suporte a vídeo) "
-#: mediagoblin/templates/mediagoblin/root.html:34
-msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
msgstr ""
-"Desenvolvido por pessoas como você. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Você pode ajudar a melhorar "
-"esse software</a>)"
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Animado para juntar-se a nós?"
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\"> Crie uma conta grátis </a>\n"
-" ou <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Configure seu próprio servidor MediaGoblin</a>\n"
-" "
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "Mídia mais recente"
@@ -274,9 +269,18 @@ msgstr "Mídia mais recente"
msgid "Enter your new password"
msgstr "Digite sua nova senha"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Digite seu nome de usuário ou email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Enviar"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -315,22 +319,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "Autenticação falhou"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Ainda não tem conta?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Crie uma aqui!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Esqueceu sua senha?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "Altere-a"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Criar uma conta!"
@@ -375,27 +375,54 @@ msgstr "Salvar mudanças"
msgid "Editing %(username)s's profile"
msgstr "Editando perfil de %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Mídia marcada como:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Envie sua mídia"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Enviar"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "Mídia de <a href=\"%(user_url)s\"> %(username)s </a> "
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Desculpe, esse usuário não foi encontrado."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -428,29 +455,39 @@ msgstr "Nenhuma mídia em processo"
msgid "These uploads failed to process:"
msgstr "Esses envios não foram processados:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Perfil de %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Desculpe, esse usuário não foi encontrado."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "Verificação de email necessária"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Quase pronto! Sua conta ainda precisa ser ativada"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr "Um email deve chegar em instantes com instruções de como fazê-lo."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "Caso contrário:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Reenviar email de verificação"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -458,7 +495,7 @@ msgstr ""
"Alguém registrou uma conta com esse nome de usuário, mas ainda precisa ser "
"ativada."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -467,30 +504,25 @@ msgstr ""
"Se você é essa pessoa, mas você perdeu seu e-mail de verificação, você pode "
"<a href=\"%(login_url)s\">efetuar login</a> e reenviá-la."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "Perfil de %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Aqui é o lugar onde você fala de si para os outros."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Editar perfil"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Esse usuário não preencheu seu perfil (ainda)."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Ver todas as mídias de %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
@@ -498,11 +530,11 @@ msgstr ""
"Aqui é onde sua mídia vai aparecer, mas parece que você não adicionou nada "
"ainda."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Adicionar mídia"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Aparentemente não há nenhuma mídia aqui ainda..."
@@ -522,6 +554,18 @@ msgstr "Mais novo"
msgid "Older"
msgstr "Mais velho"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Comentário"
@@ -530,15 +574,23 @@ msgstr "Comentário"
msgid "I am sure I want to delete this"
msgstr "Eu tenho certeza de que quero pagar isso"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "Você vai apagar uma mídia de outro usuário. Tenha cuidado."
diff --git a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo
index 2ab9cf8b..e0a70ea9 100644
--- a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po
index 01fe5c48..b747fc3a 100644
--- a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po
@@ -4,12 +4,13 @@
#
# Translators:
# <gapop@hotmail.com>, 2011.
+# George Pop <gapop@hotmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 20:49+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 18:41+0000\n"
"Last-Translator: gap <gapop@hotmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +20,10 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Formatul fișierului nu corespunde cu tipul de media selectat."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Nume de utilizator"
@@ -52,32 +57,40 @@ msgid "Sorry, a user with that name already exists."
msgstr "Ne pare rău, există deja un utilizator cu același nume."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Ne pare rău, această adresă de e-mail este deja rezervată."
+msgid "Sorry, a user with that email address already exists."
+msgstr "Există deja un utilizator înregistrat cu această adresă de e-mail."
#: mediagoblin/auth/views.py:179
msgid ""
"Your email address has been verified. You may now login, edit your profile, "
"and submit images!"
msgstr ""
-"Adresa ta de e-mail a fost confirmată. Poți să te autentifici, să îți "
+"Adresa ta de e-mail a fost verificată. Poți să te autentifici, să îți "
"completezi profilul și să trimiți imagini!"
#: mediagoblin/auth/views.py:185
msgid "The verification key or user id is incorrect"
msgstr "Cheie de verificare sau user ID incorect."
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr "Trebuie să fii autentificat ca să știm cui să trimitem mesajul!"
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr "Adresa ta de e-mail a fost deja verificată!"
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "E-mail-ul de verificare a fost retrimis."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
msgstr ""
"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ă."
+" e inactiv sau adresa ta de e-mail nu a fost verificată."
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
msgid "Title"
@@ -85,47 +98,67 @@ msgstr "Titlu"
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
msgid "Tags"
-msgstr "Etichete"
+msgstr "Tag-uri"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr "Desparte tag-urile prin virgulă."
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "Identificator"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "Identificatorul nu poate să lipsească"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
"Partea din adresa acestui fișier corespunzătoare titlului. De regulă nu "
"trebuie modificată."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Biografie"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Sit Web"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr "Vechea parolă"
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr "Noua parolă"
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr ""
"Există deja un entry cu același identificator pentru acest utilizator."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Editezi fișierul unui alt utilizator. Se recomandă prudență."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Editezi profilul unui utilizator. Se recomandă prudență."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Formatul fișierului nu corespunde cu tipul de media selectat."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr "Parolă incorectă"
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr "Profilul a fost modificat!"
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr "Nu pot extrage extensia din „{filename}â€"
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -135,25 +168,25 @@ msgstr "Fișier"
msgid "Description of this work"
msgstr "Descrierea acestui fișier"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Trebuie să selectezi un fișier."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Fișierul nu pare a fi o imagine!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
-msgstr "Gata, trimis!"
+msgstr "Ura! Trimis!"
+
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr "Tip de fișier incompatibil."
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
-msgstr "Oops!"
+msgstr "Hopa!"
#: mediagoblin/templates/mediagoblin/404.html:24
msgid "There doesn't seem to be a page at this address. Sorry!"
-msgstr "Ne pare rău, nu există nicio pagină la această adresă."
+msgstr "Nu există nicio pagină la această adresă. Ne pare rău!"
#: mediagoblin/templates/mediagoblin/404.html:26
msgid ""
@@ -167,29 +200,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Imagine cu elful 404 stresat."
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "logo MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Transmite un fișier media"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "verifică e-mail-ul!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr "Verifică adresa de e-mail!"
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr "ieșire"
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Autentificare"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -202,70 +235,41 @@ msgid "Explore"
msgstr "Explorează"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Bună! MediaGoblin este..."
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "Locul perfect pentru fișierele tale media!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr ""
-"Un loc unde oamenii colaborează și își expun creațiile originale și "
-"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 ""
-"Liber. (Suntem un proiect <a href=\"http://gnu.org\">GNU</a>, până la urmă.)"
+msgid "Hi there, welcome to this MediaGoblin site!"
+msgstr "Salut, bine ai venit pe acest site MediaGoblin!"
-#: mediagoblin/templates/mediagoblin/root.html:32
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Un pas spre o lume mai bună prin descentralizare și (în curând) "
-"federalizare!"
+"Acest site folosește <a href=\"http://mediagoblin.org\">MediaGoblin</a>, un "
+"software excepțional pentru găzduirea fișierelor media."
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr ""
-"Proiectat să fie extensibil. (Software-ul va avea în curând suport pentru "
-"mai multe formate de media, inclusiv pentru video!)"
-
-#: mediagoblin/templates/mediagoblin/root.html:34
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Animat de oameni ca tine. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Ne poți ajuta să îmbunătățim"
-" acest software!</a>)"
+"Ca să adăugi propriile tale fișiere, să scrii comentarii, să salvezi "
+"favoritele tale și multe altele, autentifică-te cu contul tău MediaGoblin."
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Vrei să ni te alături?"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
+msgstr "Încă nu ai unul? E simplu!"
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Creează gratuit un cont</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Creează un cont pe acest site</a>\n"
" sau\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">instalează MediaGoblin pe serverul tău</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Instalează MediaGoblin pe propriul tău server</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "Cele mai recente fișiere"
@@ -273,9 +277,18 @@ msgstr "Cele mai recente fișiere"
msgid "Enter your new password"
msgstr "Introdu noua parolă"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Introdu numele de utilizator sau adresa de e-mail"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Trimite"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr "Recuperează parola"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr "Trimite instrucțiuni"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -313,22 +326,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "Autentificare eșuată!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Nu ai un cont?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Creează-l aici!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Ai uitat parola?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "Schimb-o!"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Creează un cont!"
@@ -373,27 +382,54 @@ msgstr "Salvează modificările"
msgid "Editing %(username)s's profile"
msgstr "Editare profil %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Etichete:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr "Fișier etichetat cu tag-urile: %(tag_name)s"
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr "Original"
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Trimite fișierele tale media"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Trimite"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr "Fișierele lui %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "Fișierele media ale lui <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 "Ne pare rău, nu am găsit utilizatorul căutat."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr "De <a href=\"%(user_url)s\">%(username)s</a> la %(date)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr "Scrie un comentariu"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr "la"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr "Trimite comentariul"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr "Editare"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr "Șterge"
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -425,29 +461,39 @@ msgstr "Niciun fișier în curs de procesare"
msgid "These uploads failed to process:"
msgstr "Aceste fișiere nu au putut fi procesate:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Profil %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Ne pare rău, nu am găsit utilizatorul căutat."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
-msgstr "Este necesară confirmarea adresei de e-mail"
+msgstr "Este necesară verificarea adresei de e-mail"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Aproape gata! Mai trebuie doar să activezi contul."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr "Vei primi în scurt timp un e-mail cu instrucțiuni."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "Dacă nu-l primești:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Retrimite mesajul de verificare"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -455,7 +501,7 @@ msgstr ""
"Cineva a înregistrat un cont cu acest nume de utilizator, dar contul nu a "
"fost încă activat."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -464,30 +510,25 @@ msgstr ""
"Dacă tu ești persoana respectivă și nu mai ai e-mail-ul de verificare, poți "
"să te <a href=\"%(login_url)s\">autentifici</a> pentru a-l retrimite."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "Profil %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Aici poți spune altora ceva despre tine."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Editare profil"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Acest utilizator nu și-a completat (încă) profilul."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Vezi toate fișierele media ale lui %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
@@ -495,11 +536,11 @@ msgstr ""
"Aici vor apărea fișierele tale media, dar se pare că încă nu ai trimis "
"nimic."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Trimite fișier"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Nu pare să existe niciun fișier media deocamdată..."
@@ -519,6 +560,18 @@ msgstr "Mai noi"
msgid "Older"
msgstr "Mai vechi"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr "Salt la pagina:"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr "Tag-uri"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr "și"
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Scrie un comentariu"
@@ -527,15 +580,23 @@ msgstr "Scrie un comentariu"
msgid "I am sure I want to delete this"
msgstr "Sunt sigur că doresc să șterg"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
-msgstr "Comentariul trebuie să aibă un conținut."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr "Hopa, ai uitat să scrii comentariul."
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr "Comentariul tău a fost trimis!"
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
+msgstr "Ai șters acest fișier"
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
-msgstr "Comentariul a fost transmis."
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
+msgstr "Fișierul nu a fost șters deoarece nu ai confirmat că ești sigur."
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
"Urmează să ștergi fișierele media ale unui alt utilizator. Se recomandă "
diff --git a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo
index 4b5481e0..0e34144d 100644
--- a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po
index f4bfbd67..c615cde2 100644
--- a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-04 11:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 17:53+0000\n"
"Last-Translator: aleksejrs <deletesoftware@yandex.ru>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,10 @@ msgstr ""
"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"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Ðеправильный формат файла."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Логин"
@@ -52,8 +56,10 @@ msgid "Sorry, a user with that name already exists."
msgstr "Извините, пользователь Ñ Ñтим именем уже зарегиÑтрирован."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Извините, Ñтот Ð°Ð´Ñ€ÐµÑ Ñлектронной почты уже занÑÑ‚."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
+"Сожалеем, но на Ñтот Ð°Ð´Ñ€ÐµÑ Ñлектронной почты уже зарегиÑтрирована Ð´Ñ€ÑƒÐ³Ð°Ñ "
+"ÑƒÑ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ."
#: mediagoblin/auth/views.py:179
msgid ""
@@ -67,11 +73,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "Ðеверный ключ проверки или идентификатор пользователÑ"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr "Вам надо предÑтавитьÑÑ, чтобы мы знали, кому отправлÑть Ñообщение!"
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr "Ð’Ñ‹ уже потвердили Ñвой Ð°Ð´Ñ€ÐµÑ Ñлектронной почты!"
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "ПереÑлать Ñообщение Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸ÐµÐ¼ аккаунта."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -88,45 +102,65 @@ msgstr "Ðазвание"
msgid "Tags"
msgstr "Метки"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr "РазделÑйте метки запÑтыми."
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "ÐžÑ‚Ð»Ð¸Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñть адреÑа"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "ÐžÑ‚Ð»Ð¸Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñть адреÑа необходима"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
"ЧаÑть адреÑа Ñтого файла, Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð½Ð°Ñ Ð¾Ñ‚ его названиÑ. Её обычно не нужно "
"изменÑть."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "БиографиÑ"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Сайт"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr "Старый пароль"
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr "Ðовый пароль"
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr ""
"У Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÐ¶Ðµ еÑть файл Ñ Ñ‚Ð°ÐºÐ¾Ð¹ отличительной чаÑтью адреÑа."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Ð’Ñ‹ редактируете файлы другого пользователÑ. Будьте оÑторожны."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Ð’Ñ‹ редактируете профиль пользователÑ. Будьте оÑторожны."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Ðеправильный формат файла."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr "Ðеправильный пароль"
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr "Профиль изменён!"
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr "Ð’ «{filename}» не обнаружено раÑширение имени файла"
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -136,18 +170,18 @@ msgstr "Файл"
msgid "Description of this work"
msgstr "ОпиÑание Ñтого произведениÑ"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Вы должны загрузить файл."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Файл, похоже, не ÑвлÑетÑÑ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ¾Ð¹!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Ура! Файл загружен!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr "ÐеподходÑщий тип файла."
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Ой!"
@@ -160,35 +194,35 @@ msgstr "КажетÑÑ, такой Ñтраницы не ÑущеÑтвует. Ð
msgid ""
"If you're sure the address is correct, maybe the page you're looking for has"
" been moved or deleted."
-msgstr "Возможно, Ñтраница которую вы ищете была удалена или переехала."
+msgstr "Возможно, Ñтраница, которую вы ищете, была удалена или переехала."
#: mediagoblin/templates/mediagoblin/404.html:32
msgid "Image of 404 goblin stressing out"
msgstr "Изображение 404 нервничающего гоблина"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "Символ MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Загрузить файл"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "подтвердите ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr "Подтвердите ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты!"
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr "завершение ÑеанÑа"
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Войти"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -198,69 +232,45 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:24
msgid "Explore"
-msgstr ""
+msgstr "Смотреть"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Привет, любитель мультимедиа! MediaGoblin…"
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "Отличное меÑто Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… файлов!"
+msgid "Hi there, welcome to this MediaGoblin site!"
+msgstr "Привет! Добро пожаловать на наш MediaGoblin’овый Ñайт!"
-#: mediagoblin/templates/mediagoblin/root.html:30
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"МеÑто Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы ÑовмеÑтно работать или проÑто показать Ñвои "
-"оригинальные и/или заимÑтвованные ÑозданиÑ!"
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
-msgstr "Свободное ПО. (Мы же проект <a href=\"http://gnu.org\">GNU</a>.)"
+"Этот Ñайт работает на <a href=\"http://mediagoblin.org\">MediaGoblin</a>, "
+"необыкновенно замечательном ПО Ð´Ð»Ñ Ñ…Ð¾Ñтинга мультимедийных файлов."
-#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-"Попытка Ñделать мир лучше Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ децентрализации и (надеемÑÑ, что Ñкоро!)"
-" интеграции!"
-
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr ""
-"РаÑÑчитан на раÑширÑемоÑть. (Ð’ программе Ñкоро должна поÑвитьÑÑ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° "
-"других видов мультимедиа, таких как видео!)"
-
-#: mediagoblin/templates/mediagoblin/root.html:34
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"ПоддерживаетÑÑ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ же, как и ты. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Ты можешь помочь Ñделать Ñто"
-" ПО лучше!</a>)"
+"Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобÑтвенных файлов, комментированиÑ, Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑпиÑка любиых "
+"файлов и Ñ‚. п. вы можете предÑтавитьÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ вашей MediaGoblin’овой "
+"учётной запиÑи."
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr ""
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
+msgstr "У Ð²Ð°Ñ ÐµÑ‘ ещё нет? Ðе проблема!"
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Создайте учётную запиÑÑŒ на Ñтом Ñайте</a>\n"
+" или\n"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">УÑтановите MediaGoblin на ÑобÑтвенный Ñервер</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "Самые новые файлы"
@@ -268,18 +278,29 @@ msgstr "Самые новые файлы"
msgid "Enter your new password"
msgstr "Введите Ñвой новый пароль"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Введите Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ Ð°Ð´Ñ€ÐµÑ Ñлектронной почты"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Подтвердить"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr "Отправить инÑтрукцию"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
-msgstr ""
+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
@@ -294,27 +315,32 @@ msgid ""
"If you think this is an error, just ignore this email and continue being\n"
"a happy goblin!"
msgstr ""
+"Привет, %(username)s,\n"
+"\n"
+"чтобы Ñменить Ñвой пароль от GNU MediaGoblin, откройте\n"
+"Ñледующий URL вашим вебâ€Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð¾Ð¼:\n"
+"\n"
+"%(verification_url)s\n"
+"\n"
+"ЕÑли вы думаете, что Ñто какаÑâ€Ñ‚о ошибка, то игнорируйте\n"
+"Ñто Ñообщение и продолжайте быть ÑчаÑтливым гоблином!"
#: mediagoblin/templates/mediagoblin/auth/login.html:30
msgid "Logging in failed!"
msgstr "ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÑƒÑпешна!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Ещё нету аккаунта?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Создайте здеÑÑŒ!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Забыли Ñвой пароль?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "Смените его!"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Создать аккаунт!"
@@ -359,27 +385,54 @@ msgstr "Сохранить изменениÑ"
msgid "Editing %(username)s's profile"
msgstr "Редактирование Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Файлы Ñ Ð¼ÐµÑ‚ÐºÐ¾Ð¹:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr "Файлы Ñ Ð¼ÐµÑ‚ÐºÐ¾Ð¹: %(tag_name)s"
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr "Оригинал"
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Загрузить файл(ы)"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Подтвердить"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr "Файлы %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "Файлы Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ <a href=\"%(user_url)s\">%(username)s</a>"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Извините, но такой пользователь не найден."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr "Загружено <a href=\"%(user_url)s\">%(username)s</a> %(date)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr "ОÑтавить комментарий"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr "в"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr "РазмеÑтить комментарий!"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr "Изменить"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr "Удалить"
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -412,38 +465,48 @@ msgstr "Ðету файлов Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸"
msgid "These uploads failed to process:"
msgstr "Обработка Ñтих файлов вызвала ошибку:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Профиль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Извините, но такой пользователь не найден."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "Ðужно подтверждение почтового адреÑа"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Почти закончили! Теперь надо активировать ваш аккаунт."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
"Через пару мгновений на Ð°Ð´Ñ€ÐµÑ Ð²Ð°ÑˆÐµÐ¹ Ñлектронной почты должно прийти "
"Ñообщение Ñ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐ¸Ð¼Ð¸ инÑтрукциÑми."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "РеÑли нет, то:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr ""
"Повторно отправить Ñообщение Ð´Ð»Ñ Ð¿Ð¾Ð´Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑа Ñлектронной почты"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr "Ктоâ€Ñ‚о Ñоздал аккаунт Ñ Ñтим именем, но его еще надо активировать."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -452,40 +515,35 @@ msgstr ""
"ЕÑли Ñто были вы, и еÑли вы потерÑли Ñообщение Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð°, "
"то вы можете <a href=\"%(login_url)s\">войти</a> и отправить его повторно."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "Профиль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "ЗдеÑÑŒ вы можете раÑÑказать о Ñебе."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Редактировать профиль"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Это пользователь не заполнил Ñвой профайл (пока)."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Смотреть вÑе файлы %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr "Ваши файлы поÑвÑÑ‚ÑÑ Ð·Ð´ÐµÑÑŒ, когда вы их добавите."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Добавить файлы"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Пока что тут файлов нет…"
@@ -505,6 +563,18 @@ msgstr "Более новые"
msgid "Older"
msgstr "Более Ñтарые"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr "Перейти к Ñтранице:"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr "Метки:"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr "и"
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Комментарий"
@@ -513,15 +583,23 @@ msgstr "Комментарий"
msgid "I am sure I want to delete this"
msgstr "Я уверен, что хочу удалить Ñто"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
-msgstr "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr "Ой, ваш комментарий был пуÑÑ‚."
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
-msgstr ""
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr "Ваш комментарий размещён!"
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
+msgstr "Вы удалили файл."
+
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
+msgstr "Файл не удалён, так как вы не подтвердили Ñвою уверенноÑть галочкой."
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "Ð’Ñ‹ на пороге ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° другого пользователÑ. Будьте оÑторожны."
diff --git a/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo
index 684c850a..4e71eaa7 100644
--- a/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po
index d3196b9c..a44f7866 100644
--- a/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,10 @@ msgstr ""
"Language: sk\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Odovzdaný nesprávny súbor pre daný typ média."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Prihlasovacie meno"
@@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "PrepáÄ, rovnaké prihlasovacie meno už niekto používa."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "PrepáÄ, daná e-mailová adresa už bola pri registrácii využitá."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
#: mediagoblin/auth/views.py:179
msgid ""
@@ -67,11 +71,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "Nesprávny overovací kÄ¾ÃºÄ alebo používateľské ID"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "Opätovne zaslať overovaciu správu."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -87,42 +99,62 @@ msgstr "Nadpis"
msgid "Tags"
msgstr "Štítky"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "Unikátna ÄasÅ¥ adresy"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "Unikátna ÄasÅ¥ adresy musí byÅ¥ vyplnená"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr "Titulná ÄasÅ¥ URL odkazu média. ZvyÄajne to meniÅ¥ nemusíš."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Bio"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Webstránka"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "Položku s rovnakou unikátnou ÄasÅ¥ou adresy už niekde máš."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Upravuješ médiá niekoho iného. Pristupuj opatrne."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Upravuješ používateľský profil. Pristupuj opatrne."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Odovzdaný nesprávny súbor pre daný typ média."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr ""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -132,18 +164,18 @@ msgstr "Súbor"
msgid "Description of this work"
msgstr "Charakteristika diela"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Poskytni súbor."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Súbor najskôr nie je obrázkom!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Juchú! Úspešne vložené!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Ajaj!"
@@ -164,29 +196,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Obrázok stresujúceho goblina pri chybovom kóde Ä. 404"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "MediaGoblin logo"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Vložiť výtvor"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "over si svoj e-mail!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Prihlásenie"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -199,71 +231,34 @@ msgid "Explore"
msgstr "Preskúmať"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Vitaj medzi nami, kreatívne stvorenie! MediaGoblin je..."
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "Parádne miesto pre tvoje výtvory!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr ""
-"Miesto pre ľudí, vhodné na spoluprácu a vystavovanie tak originálnych, ako "
-"aj odvodených kreácií!"
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-"Voľné, vo význame slobody. (Koniec-koncov, sme predsa <a "
-"href=\"http://gnu.org\">GNU</a> projekt.)"
-#: mediagoblin/templates/mediagoblin/root.html:32
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Zo snahou spraviÅ¥ svet lepším miestom vÄaka decentralizácii a (eventuálne, "
-"už Äoskoro!) federácii!"
-#: mediagoblin/templates/mediagoblin/root.html:33
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"S dôrazom na rozšíriteľnosÅ¥. (Podpora pre rozliÄné typy médií v tomto "
-"softvéri už Äoskoro, nevynímajúc videá!)"
-#: 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>)"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
msgstr ""
-"Existujeme aj vÄaka ľudom ako si ty. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Môžeš nám pomôcť softvér "
-"vylepšiť!</a>)"
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Tak Äo, chceÅ¡ sa pridaÅ¥?"
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">VytvoriÅ¥ bezplatný úÄet</a>\n"
-" alebo\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Sprevádzkovať MediaGoblin na vlastnom serveri</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "NajÄerstvejÅ¡ie výtvory"
@@ -271,9 +266,18 @@ msgstr "NajÄerstvejÅ¡ie výtvory"
msgid "Enter your new password"
msgstr "Vlož svoje nové heslo"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Vlož svoje používateľské meno alebo e-mailovú adresu"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Vložiť"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -312,22 +316,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "Prihlásenie zlyhalo!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "EÅ¡te nemáš úÄet?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Vytvoriť jeden tu!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Zabudnuté heslo?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "Zmeniť ho!"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "VytvoriÅ¥ úÄet!"
@@ -373,27 +373,54 @@ msgstr "Uložiť zmeny"
msgid "Editing %(username)s's profile"
msgstr "Úprava profilu, ktorý vlastní %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Výtvor znaÄený Å¡títkami:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Vlož svoj výtvor"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Vložiť"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "<a href=\"%(user_url)s\">Výtvory, ktoré vlastní %(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 "PrepáÄ, používateľské meno nenájdené."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -425,29 +452,39 @@ msgstr "Žiadne médiá v procese spracovania"
msgid "These uploads failed to process:"
msgstr "Nasledovné vloženia neprešli spracovaním:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Profil, ktorý vlastní %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "PrepáÄ, používateľské meno nenájdené."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "Potrebné overenie e-mailovej adresy"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Takmer hotovo! EÅ¡te ti musí byÅ¥ aktivovaný úÄet."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr "E-mailová správa s popisom ako to spraviť, by mala onedlho doraziť."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "V prípade, že sa tak nestalo:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Opätovne zaslať overovaciu správu"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -455,7 +492,7 @@ msgstr ""
"ÚÄet s týmto prihlasovacím menom je už registrovaný, avÅ¡ak eÅ¡te stále "
"neaktívny."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -464,41 +501,36 @@ msgstr ""
"Pokiaľ si to ty, ale už nemáš overovaciu správu, tak sa môžeš <a "
"href=\"%(login_url)s\">prihlásiť</a> a preposlať si ju."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "Profil, ktorý vlastní %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Povedz tu o sebe ostatným."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Upraviť profil"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "DotyÄná osoba eÅ¡te nevyplnila svoj profil (zatiaľ)."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Zhliadnuť všetky výtvory, ktoré vlastní %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
"VÅ¡etky tvoje výtvory sa objavia práve tu, ale zatiaľ nemáš niÄ pridané."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Pridať výtvor"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Najskôr tu ešte nebudú žiadne výtvory..."
@@ -518,6 +550,18 @@ msgstr "Novšie"
msgid "Older"
msgstr "Staršie"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Komentár"
@@ -526,15 +570,23 @@ msgstr "Komentár"
msgid "I am sure I want to delete this"
msgstr "JednoznaÄne to chcem odstrániÅ¥"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "Chystáš sa odstrániť výtvory niekoho iného. Pristupuj opatrne."
diff --git a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo
index 52e3d632..9ad54a83 100644
--- a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po
index cba4fdd0..ffd2c04c 100644
--- a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,10 @@ msgstr ""
"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"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Za vrsto vsebine je bila podana napaÄna datoteka."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Uporabniško ime"
@@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "Oprostite, uporabnik s tem imenom že obstaja."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Oprostite, ta e-poštni naslov je že v uporabi."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
#: mediagoblin/auth/views.py:179
msgid ""
@@ -67,11 +71,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "Potrditveni kljuÄ ali uporabniÅ¡ka identifikacija je napaÄna"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "Ponovno pošiljanje potrditvene e-pošte."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -85,42 +97,62 @@ msgstr "Naslov"
msgid "Tags"
msgstr "Oznake"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "Oznaka"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "Oznaka ne sme biti prazna"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Biografija"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Spletna stran"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "Vnos s to oznako za tega uporabnika že obstaja."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Urejate vsebino drugega uporabnika. Nadaljujte pazljivo."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Urejate uporabniški profil. Nadaljujte pazljivo."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Za vrsto vsebine je bila podana napaÄna datoteka."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr ""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -130,18 +162,18 @@ msgstr "Datoteka"
msgid "Description of this work"
msgstr ""
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Podati morate datoteko."
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Kot kaže datoteka ni slika."
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Juhej! Poslano."
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Opa!"
@@ -162,29 +194,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Slika napake 404 s paniÄnim Å¡kratom"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "Logotip MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Pošlji vsebino"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "Preverite svojo e-pošto."
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Prijava"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -195,66 +227,34 @@ msgid "Explore"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Pozdravljen, ljubitelj veÄpredstavnostnih vsebin! MediaGoblin je ..."
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "Popolno mesto za vaÅ¡e veÄpredstavnostne vsebine."
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr ""
-"Mesto, kjer ljudje lahko sodelujejo in razkazujejo originalne in predelane "
-"stvaritve."
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:32
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Ustvarjen z namenom izboljÅ¡ati svet, s pomoÄjo decentralizacije in (kmalu) "
-"federacije."
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr ""
-"Zgrajen za razÅ¡irjanje. (Kmalu bodo na voljo dodatne vrste vsebin, vkljuÄno "
-"podpora za video)"
-
-#: mediagoblin/templates/mediagoblin/root.html:34
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Sad dela ljudi, kot ste vi. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Pri izboljševanju nam lahko "
-"pomagate tudi vi.</a>)"
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr ""
@@ -262,8 +262,17 @@ msgstr ""
msgid "Enter your new password"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Pošlji"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
@@ -293,22 +302,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "Prijava ni uspela."
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Å e nimate raÄuna?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Ustvarite si ga."
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Ustvarite raÄun."
@@ -354,27 +359,54 @@ msgstr "Shrani spremembe"
msgid "Editing %(username)s's profile"
msgstr "Urejanje profila – %(username)s"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Vsebina oznaÄena z:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Pošljite svojo vsebino"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Pošlji"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "Vsebina uporabnika <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 "Oprostite, tega uporabnika ni bilo moÄ najti."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -406,29 +438,39 @@ msgstr "V obdelavi ni nobene vsebine"
msgid "These uploads failed to process:"
msgstr "Teh vsebin ni bilo moÄ obdelati:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Profil – %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Oprostite, tega uporabnika ni bilo moÄ najti."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "Potrebna je potrditev prek e-pošte"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Skoraj ste zakljuÄili. Svoj raÄun morate le Å¡e aktivirati."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr "V kratkem bi morali prejeti e-pošto z navodili, kako to storiti."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "ÄŒe je ne prejmete:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Ponovno pošlji potrditveno e-pošto"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -436,7 +478,7 @@ msgstr ""
"Nekdo je s tem uporabniÅ¡kim imenom že registriral raÄun, vendar mora biti Å¡e"
" aktiviran."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -445,40 +487,35 @@ msgstr ""
"Če ste ta oseba vi, a ste izgubili potrditveno e-pošto, se lahko <a "
"href=\"%(login_url)s\">prijavite</a> in jo ponovno pošljete."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "Profil – %(username)s"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Na tem mestu lahko drugim poveste nekaj o sebi."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Uredi profil"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Ta uporabnik še ni izpolnil svojega profila."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Prikaži vso vsebino uporabnika %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr "Tu bo prikazana vaÅ¡a vsebina, a trenutno Å¡e niste dodali niÄ."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Dodaj vsebino"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Videti je, da tu še ni nobene vsebine ..."
@@ -498,6 +535,18 @@ msgstr ""
msgid "Older"
msgstr ""
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Komentar"
@@ -506,15 +555,23 @@ msgstr "Komentar"
msgid "I am sure I want to delete this"
msgstr ""
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
diff --git a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo
index d2649938..ece8989f 100644
--- a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po
index b4b2fb7b..942f7203 100644
--- a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Serbian (http://www.transifex.net/projects/p/mediagoblin/team/sr/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,10 @@ msgstr ""
"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"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr ""
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr ""
@@ -51,7 +55,7 @@ msgid "Sorry, a user with that name already exists."
msgstr ""
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
+msgid "Sorry, a user with that email address already exists."
msgstr ""
#: mediagoblin/auth/views.py:179
@@ -64,11 +68,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr ""
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr ""
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -82,41 +94,61 @@ msgstr ""
msgid "Tags"
msgstr ""
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr ""
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr ""
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr ""
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr ""
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr ""
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr ""
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr ""
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
msgstr ""
#: mediagoblin/submit/forms.py:25
@@ -127,16 +159,16 @@ msgstr ""
msgid "Description of this work"
msgstr ""
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr ""
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
+#: mediagoblin/submit/views.py:127
+msgid "Woohoo! Submitted!"
msgstr ""
-#: mediagoblin/submit/views.py:121
-msgid "Woohoo! Submitted!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
msgstr ""
#: mediagoblin/templates/mediagoblin/404.html:21
@@ -157,29 +189,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -190,57 +222,34 @@ msgid "Explore"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
+#: mediagoblin/templates/mediagoblin/root.html:28
+msgid ""
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:30
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Don't have one yet? It's easy!"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:34
-msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr ""
@@ -248,8 +257,17 @@ msgstr ""
msgid "Enter your new password"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
@@ -279,22 +297,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr ""
@@ -334,26 +348,53 @@ msgstr ""
msgid "Editing %(username)s's profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
@@ -386,75 +427,80 @@ msgstr ""
msgid "These uploads failed to process:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
"href=\"%(login_url)s\">log in</a> and resend it."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr ""
@@ -474,6 +520,18 @@ msgstr ""
msgid "Older"
msgstr ""
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr ""
@@ -482,15 +540,23 @@ msgstr ""
msgid "I am sure I want to delete this"
msgstr ""
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
diff --git a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo
index 2ae7c510..c6cf0df9 100644
--- a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po
index 3ee44b18..e195ad70 100644
--- a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Swedish (http://www.transifex.net/projects/p/mediagoblin/team/sv/)\n"
"MIME-Version: 1.0\n"
@@ -20,6 +20,10 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "Ogiltig fil för mediatypen."
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "Användarnamn"
@@ -53,8 +57,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "En användare med det användarnamnet finns redan."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "Den e-postadressen är redan tagen."
+msgid "Sorry, a user with that email address already exists."
+msgstr ""
#: mediagoblin/auth/views.py:179
msgid ""
@@ -68,11 +72,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr "Verifieringsnyckeln eller användar-IDt är fel."
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "Skickade ett nytt verifierings-email."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -88,42 +100,62 @@ msgstr "Titel"
msgid "Tags"
msgstr "Taggar"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "Sökvägsnamn"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "Sökvägsnamnet kan inte vara tomt"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr "Sökvägstitlen för din media. Du brukar inte behöva ändra denna."
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "Presentation"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "Hemsida"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "Ett inlägg med det sökvägsnamnet existerar redan."
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "Var försiktig, du redigerar någon annans inlägg."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "Var försiktig, du redigerar en annan användares profil."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "Ogiltig fil för mediatypen."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr ""
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -133,18 +165,18 @@ msgstr "Fil"
msgid "Description of this work"
msgstr "Beskrivning av verket"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "Du måste ange en fil"
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "Filen verkar inte vara en giltig bildfil!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "Tjohoo! Upladdat!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "Ojoj!"
@@ -165,29 +197,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr "Bild av stressat 404-troll."
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "MediaGoblin-logotyp"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "Ladda upp"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "Verifiera din e-postadress!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "Logga in"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -200,75 +232,34 @@ msgid "Explore"
msgstr "Utforska"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Hej där mediaentusiast, MediaGoblin..."
-
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "Är ett perfekt ställe för din media!"
-
-#: mediagoblin/templates/mediagoblin/root.html:30
-msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr ""
-"Är ett ställe för människor att samarbeta och visa upp originella och "
-"härrörande verk."
-
-#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-"Är fritt som i frihet. (Vi är ju ett <a "
-"href=\"http://gnu.org\">GNU</a>-projekt.)"
-#: mediagoblin/templates/mediagoblin/root.html:32
+#: mediagoblin/templates/mediagoblin/root.html:28
msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-"Arbetar för att göra världen till ett bättre ställe genom decentralisering "
-"och (så småningom, kommer snart!) -- Google Translate säger "
-"\"sammanslutning\", <em>en: <a "
-"href=\"http://en.wikipedia.org/wiki/Federation_(information_technology)\">federation</a></em>"
-" "
-#: mediagoblin/templates/mediagoblin/root.html:33
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
-"Byggd för utbyggbarhet. (Flera mediatyper kommer snart till MediaGoblin, "
-"bland annat 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>)"
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid "Don't have one yet? It's easy!"
msgstr ""
-"Drivs av människor som du. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">Du kan hjälpa os forbättra "
-"MediaGoblin!</a>)"
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr "Nyfiken att gå med oss?"
-#: mediagoblin/templates/mediagoblin/root.html:39
+#: mediagoblin/templates/mediagoblin/root.html:32
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Skapa ett konto gratis</a>\n"
-"\n"
-" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Installera MediaGoblin på din egen server</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "Senast medier"
@@ -276,9 +267,18 @@ msgstr "Senast medier"
msgid "Enter your new password"
msgstr "Fyll i ditt lösenord"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "Fyll i ditt användarnamn eller lösenord"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "Skicka"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -317,22 +317,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "Inloggning misslyckades!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "Har du inget konto än?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "Skapa ett här!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "Glömt ditt lösenord?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "Ändra!"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "Skapa ett konto!"
@@ -377,27 +373,54 @@ msgstr "Spara ändringar"
msgid "Editing %(username)s's profile"
msgstr "Redigerar %(username)ss profil"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "Media taggat med:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "Ladda upp"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "Skicka"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "<a href=\"%(user_url)s\">%(username)s</a>s media"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "Ledsen, hittar ingen sådan användare."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -429,30 +452,40 @@ msgstr "Ingen media under behandling"
msgid "These uploads failed to process:"
msgstr "De här behandlingarna misslyckades:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "%(username)ss profil"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "Ledsen, hittar ingen sådan användare."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "E-postadressverifiering krävs."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "Nästan klar! Ditt konto behöver bara aktiveras."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
"Ett e-postmeddelande med instruktioner kommer att hamna hos dig inom kort."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "Om det inte skulle göra det:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "Skicka ett nytt e-postmeddelande"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
@@ -460,7 +493,7 @@ msgstr ""
"Någon har redan registrerat ett konto med det här användarnamnet men det har"
" inte aktiverats."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
@@ -470,30 +503,25 @@ msgstr ""
"detaljer om hur du verifierar ditt konto så kan du <a "
"href=\"%(login_url)s\">logga in</a> och begära ett nytt."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "%(username)ss profil"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "Här kan du berätta för andra om dig själv."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "Redigera profil"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "Den här användaren har inte fyllt i sin profilsida ännu."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "Se all media från %(username)s"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
@@ -501,11 +529,11 @@ msgstr ""
"Här kommer din media att dyka upp, du verkar inte ha lagt till någonting "
"ännu."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "Lägg till media"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "Det verkar inte finnas någon media här ännu."
@@ -525,6 +553,18 @@ msgstr "Nyare"
msgid "Older"
msgstr "Äldre"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "Kommentar"
@@ -533,15 +573,23 @@ msgstr "Kommentar"
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:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "Du tänker radera en annan användares media. Var försiktig."
diff --git a/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo
index b0d8d3fc..cd9fab9f 100644
--- a/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po
index 289bddb5..f7bbd6ac 100644
--- a/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-03 14:08+0000\n"
-"Last-Translator: veeven <veeven@gmail.com>\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+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"
@@ -19,6 +19,10 @@ msgstr ""
"Language: te\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr ""
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "వాడà±à°•à°°à°¿ పేరà±"
@@ -52,7 +56,7 @@ msgid "Sorry, a user with that name already exists."
msgstr ""
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
+msgid "Sorry, a user with that email address already exists."
msgstr ""
#: mediagoblin/auth/views.py:179
@@ -65,11 +69,19 @@ msgstr ""
msgid "The verification key or user id is incorrect"
msgstr ""
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr ""
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr ""
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -83,41 +95,61 @@ msgstr "శీరà±à°·à°¿à°•"
msgid "Tags"
msgstr ""
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr ""
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr ""
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr ""
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr ""
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr ""
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr ""
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr ""
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr ""
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr ""
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr ""
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
msgstr ""
#: mediagoblin/submit/forms.py:25
@@ -128,16 +160,16 @@ msgstr ""
msgid "Description of this work"
msgstr ""
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr ""
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
+#: mediagoblin/submit/views.py:127
+msgid "Woohoo! Submitted!"
msgstr ""
-#: mediagoblin/submit/views.py:121
-msgid "Woohoo! Submitted!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
msgstr ""
#: mediagoblin/templates/mediagoblin/404.html:21
@@ -158,29 +190,29 @@ msgstr ""
msgid "Image of 404 goblin stressing out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr ""
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -191,57 +223,34 @@ msgid "Explore"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
+msgid "Hi there, welcome to this MediaGoblin site!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
+#: mediagoblin/templates/mediagoblin/root.html:28
+msgid ""
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:30
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
+msgid "Don't have one yet? It's easy!"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:34
-msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:38
-msgid "Excited to join us?"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr ""
@@ -249,8 +258,17 @@ msgstr ""
msgid "Enter your new password"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "దాఖలౠచెయà±à°¯à°¿"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
@@ -280,22 +298,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "à°ªà±à°°à°µà±‡à°¶à°‚ విఫలమయà±à°¯à°¿à°‚ది!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "మీకౠఇంకా ఖాతా లేదా?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr ""
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "మీ సంకేతపదానà±à°¨à°¿ మరà±à°šà°¿à°ªà±‹à°¯à°¾à°°à°¾?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr ""
@@ -335,26 +349,53 @@ msgstr "మారà±à°ªà±à°²à°¨à± à°­à°¦à±à°°à°ªà°°à°šà±"
msgid "Editing %(username)s's profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
msgstr ""
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "దాఖలౠచెయà±à°¯à°¿"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
@@ -387,75 +428,80 @@ msgstr ""
msgid "These uploads failed to process:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
"href=\"%(login_url)s\">log in</a> and resend it."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr ""
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr ""
@@ -475,6 +521,18 @@ msgstr ""
msgid "Older"
msgstr ""
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr ""
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "à°µà±à°¯à°¾à°–à±à°¯"
@@ -483,15 +541,23 @@ msgstr "à°µà±à°¯à°¾à°–à±à°¯"
msgid "I am sure I want to delete this"
msgstr ""
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
+msgstr ""
+
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr ""
diff --git a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo
index e3751aeb..6dda94b7 100644
--- a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po
index c664adbe..70622590 100644
--- a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-11-01 23:14-0500\n"
-"PO-Revision-Date: 2011-11-02 04:13+0000\n"
+"POT-Creation-Date: 2011-12-04 10:24-0600\n"
+"PO-Revision-Date: 2011-12-04 16:23+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -20,6 +20,10 @@ msgstr ""
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0\n"
+#: mediagoblin/processing.py:143
+msgid "Invalid file given for media type."
+msgstr "指定錯誤的媒體類別ï¼"
+
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
msgid "Username"
msgstr "使用者å稱"
@@ -53,8 +57,8 @@ msgid "Sorry, a user with that name already exists."
msgstr "抱歉, 這個使用者å稱已經存在."
#: mediagoblin/auth/views.py:77
-msgid "Sorry, that email address has already been taken."
-msgstr "抱歉,這個電å­éƒµä»¶å·²ç¶“被其他人使用了。"
+msgid "Sorry, a user with that email address already exists."
+msgstr "抱歉,此電å­éƒµä»¶å·²è¢«è¨»å†Šäº†ã€‚"
#: mediagoblin/auth/views.py:179
msgid ""
@@ -66,11 +70,19 @@ msgstr "你的電å­éƒµä»¶ä½å€å·²è¢«èªè­‰. ä½ ç¾åœ¨å°±å¯ä»¥ç™»å…¥, 編輯ä½
msgid "The verification key or user id is incorrect"
msgstr "èªè­‰ç¢¼æˆ–是使用者帳號錯誤"
-#: mediagoblin/auth/views.py:207
+#: mediagoblin/auth/views.py:203
+msgid "You must be logged in so we know who to send the email to!"
+msgstr "你必須登入,我們æ‰çŸ¥é“ä¿¡è¦é€çµ¦èª°ï¼"
+
+#: mediagoblin/auth/views.py:211
+msgid "You've already verified your email address!"
+msgstr "你的電å­éƒµä»¶å·²ç¶“確èªäº†ï¼"
+
+#: mediagoblin/auth/views.py:224
msgid "Resent your verification email."
msgstr "é‡é€èªè­‰ä¿¡."
-#: mediagoblin/auth/views.py:248
+#: mediagoblin/auth/views.py:265
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
@@ -84,42 +96,62 @@ msgstr "標題"
msgid "Tags"
msgstr "標籤"
-#: mediagoblin/edit/forms.py:31
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
+msgid "Seperate tags by commas."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:33
msgid "Slug"
msgstr "自訂字串"
-#: mediagoblin/edit/forms.py:32
+#: mediagoblin/edit/forms.py:34
msgid "The slug can't be empty"
msgstr "自訂字串ä¸èƒ½ç©ºç™½"
-#: mediagoblin/edit/forms.py:33
+#: mediagoblin/edit/forms.py:35
msgid ""
"The title part of this media's URL. You usually don't need to change this."
msgstr "此媒體網å€çš„å稱。你通常ä¸éœ€è¦è®Šå‹•這個的。"
-#: mediagoblin/edit/forms.py:40
+#: mediagoblin/edit/forms.py:42
msgid "Bio"
msgstr "自我介紹"
-#: mediagoblin/edit/forms.py:43
+#: mediagoblin/edit/forms.py:45
msgid "Website"
msgstr "網站"
-#: mediagoblin/edit/views.py:64
+#: mediagoblin/edit/forms.py:49
+msgid "Old password"
+msgstr "舊的密碼"
+
+#: mediagoblin/edit/forms.py:52
+msgid "New Password"
+msgstr "新的密碼"
+
+#: mediagoblin/edit/views.py:65
msgid "An entry with that slug already exists for this user."
msgstr "這個自訂字串已經被其他人用了"
-#: mediagoblin/edit/views.py:85
+#: mediagoblin/edit/views.py:86
msgid "You are editing another user's media. Proceed with caution."
msgstr "你正在編輯他人的媒體檔案. 請謹慎處ç†."
-#: mediagoblin/edit/views.py:155
+#: mediagoblin/edit/views.py:156
msgid "You are editing a user's profile. Proceed with caution."
msgstr "你正在編輯一ä½ç”¨æˆ¶çš„æª”案. 請謹慎處ç†."
-#: mediagoblin/process_media/errors.py:44
-msgid "Invalid file given for media type."
-msgstr "指定錯誤的媒體類別ï¼"
+#: mediagoblin/edit/views.py:171
+msgid "Wrong password"
+msgstr "密碼錯誤"
+
+#: mediagoblin/edit/views.py:192
+msgid "Profile edited!"
+msgstr "個人資料已被編輯了ï¼"
+
+#: mediagoblin/media_types/__init__.py:65
+msgid "Could not find any file extension in \"{filename}\""
+msgstr "找ä¸åˆ°ä»»ä½• \"{filename}\" 的附檔å。"
#: mediagoblin/submit/forms.py:25
msgid "File"
@@ -129,18 +161,18 @@ msgstr "檔案"
msgid "Description of this work"
msgstr "這個作å“çš„æè¿°"
-#: mediagoblin/submit/views.py:46
+#: mediagoblin/submit/views.py:49
msgid "You must provide a file."
msgstr "ä½ å¿…é ˆæä¾›ä¸€å€‹æª”案"
-#: mediagoblin/submit/views.py:49
-msgid "The file doesn't seem to be an image!"
-msgstr "æª”æ¡ˆä¼¼ä¹Žä¸æ˜¯ä¸€å€‹åœ–片喔!"
-
-#: mediagoblin/submit/views.py:121
+#: mediagoblin/submit/views.py:127
msgid "Woohoo! Submitted!"
msgstr "呼呼! é€å‡ºåŽ»åš•!"
+#: mediagoblin/submit/views.py:133
+msgid "Invalid file type."
+msgstr "䏿­£ç¢ºçš„æª”案格å¼"
+
#: mediagoblin/templates/mediagoblin/404.html:21
msgid "Oops!"
msgstr "糟糕ï¼"
@@ -159,29 +191,29 @@ msgstr "如果你確定這個ä½å€æ˜¯æ­£ç¢ºçš„,或許你在找的網é å·²ç¶“
msgid "Image of 404 goblin stressing out"
msgstr "Image of 404 goblin stressing out"
-#: mediagoblin/templates/mediagoblin/base.html:22
-msgid "GNU MediaGoblin"
-msgstr "GNU MediaGoblin"
-
-#: mediagoblin/templates/mediagoblin/base.html:47
+#: mediagoblin/templates/mediagoblin/base.html:49
msgid "MediaGoblin logo"
msgstr "MediaGoblin 標誌"
-#: mediagoblin/templates/mediagoblin/base.html:52
+#: mediagoblin/templates/mediagoblin/base.html:54
msgid "Submit media"
msgstr "éžäº¤åª’é«”"
-#: mediagoblin/templates/mediagoblin/base.html:63
-msgid "verify your email!"
-msgstr "ç¢ºèªæ‚¨çš„é›»å­éƒµä»¶!"
+#: mediagoblin/templates/mediagoblin/base.html:65
+msgid "Verify your email!"
+msgstr "確èªä½ çš„é›»å­éƒµä»¶"
+
+#: mediagoblin/templates/mediagoblin/base.html:72
+msgid "log out"
+msgstr "登出"
-#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/base.html:75
#: mediagoblin/templates/mediagoblin/auth/login.html:27
-#: mediagoblin/templates/mediagoblin/auth/login.html:35
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
msgid "Log in"
msgstr "登入"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:91
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
@@ -194,62 +226,37 @@ msgid "Explore"
msgstr "探索"
#: mediagoblin/templates/mediagoblin/root.html:27
-msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "å—¨ï¼å¤šåª’體檔案愛好者ï¼MediaGoblin是..."
+msgid "Hi there, welcome to this MediaGoblin site!"
+msgstr "å˜¿ï¼æ­¡è¿Žä¾†åˆ° 媒體怪ç¸(MediaGoblin) 網站"
-#: mediagoblin/templates/mediagoblin/root.html:29
-msgid "The perfect place for your media!"
-msgstr "你的媒體檔案的最佳所在ï¼"
+#: mediagoblin/templates/mediagoblin/root.html:28
+msgid ""
+"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
+"extraordinarily great piece of media hosting software."
+msgstr ""
-#: mediagoblin/templates/mediagoblin/root.html:30
+#: mediagoblin/templates/mediagoblin/root.html:29
msgid ""
-"A place for people to collaborate and show off original and derived "
-"creations!"
-msgstr "這是一個å¯ä»¥è®“人們共åŒå±•示他們的創作ã€è¡ç”Ÿä½œå“的地方ï¼"
+"To add your own media, place comments, save your favourites and more, you "
+"can log in with your MediaGoblin account."
+msgstr "ä½ å¯ä»¥ç”¨ åª’é«”æ€ªç¸ å¸³è™Ÿç™»å…¥ï¼ŒåŠ å…¥ä½ è‡ªå·±çš„åª’é«”æª”æ¡ˆï¼ŒåŠ å…¥è©•èªžï¼ŒæŠŠä½ çš„æœ€æ„›å„²å­˜èµ·ä¾†ã€‚"
#: mediagoblin/templates/mediagoblin/root.html:31
-msgid ""
-"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
-"after all.)"
-msgstr "å…費但是我們更é‡è¦–自由 (畢竟我們是個 <a href=\"http://gnu.org\">GNU</a> 專案)"
+msgid "Don't have one yet? It's easy!"
+msgstr "還沒有嗎?其實éžå¸¸ç°¡å–®ï¼"
#: mediagoblin/templates/mediagoblin/root.html:32
-msgid ""
-"Aiming to make the world a better place through decentralization and "
-"(eventually, coming soon!) federation!"
-msgstr "目的是è¦é€éŽåˆ†æ•£å¼ä¸”自由的方å¼è®“這個世界更美好ï¼(總有一天,它很快會到來的ï¼)"
-
-#: mediagoblin/templates/mediagoblin/root.html:33
-msgid ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
-msgstr "天生的擴充性。(軟體將支æ´å¤šç¨®å¤šåª’體格å¼, 也支æ´å½±éŸ³æª”案ï¼)"
-
-#: mediagoblin/templates/mediagoblin/root.html:34
-msgid ""
-"Powered by people like you. (<a "
-"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
-" software!</a>)"
-msgstr ""
-"ç”±åƒä½ ä¸€æ¨£çš„人們製作 (<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"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
-"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">建立一個å…費帳號</a>\n"
+"<a class=\"button_action_highlight\" href=\"%(register_url)s\">在這網站建立帳號</a>\n"
" 或是\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">在你的伺æœå™¨ä¸Šè¨­ç«‹ MediaGoblin</a>"
+" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">建立一個自己的媒體怪ç¸(MedaiGoblin)</a>"
-#: mediagoblin/templates/mediagoblin/root.html:53
+#: mediagoblin/templates/mediagoblin/root.html:44
msgid "Most recent media"
msgstr "最新的媒體"
@@ -257,9 +264,18 @@ msgstr "最新的媒體"
msgid "Enter your new password"
msgstr "輸入你的新密碼"
-#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
-msgid "Enter your username or email"
-msgstr "輸入你的帳號或是電å­éƒµä»¶"
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
+#: mediagoblin/templates/mediagoblin/submit/start.html:30
+msgid "Submit"
+msgstr "é€å‡º"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Recover password"
+msgstr "找回密碼"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
+msgid "Send instructions"
+msgstr "é€å‡ºæŒ‡ç¤º"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
msgid "Your password has been changed. Try to log in now."
@@ -295,22 +311,18 @@ msgstr ""
msgid "Logging in failed!"
msgstr "登入失敗ï¼"
-#: mediagoblin/templates/mediagoblin/auth/login.html:43
+#: mediagoblin/templates/mediagoblin/auth/login.html:35
msgid "Don't have an account yet?"
msgstr "還沒有帳號嗎?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:46
+#: mediagoblin/templates/mediagoblin/auth/login.html:36
msgid "Create one here!"
msgstr "在這裡建立一個å§!"
-#: mediagoblin/templates/mediagoblin/auth/login.html:49
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
msgid "Forgot your password?"
msgstr "忘了密碼嗎?"
-#: mediagoblin/templates/mediagoblin/auth/login.html:52
-msgid "Change it!"
-msgstr "變更ï¼"
-
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
msgstr "建立一個帳號!"
@@ -355,27 +367,54 @@ msgstr "儲存變更"
msgid "Editing %(username)s's profile"
msgstr "編輯 %(username)s'的檔案中"
-#: mediagoblin/templates/mediagoblin/listings/tag.html:31
-msgid "Media tagged with:"
-msgstr "媒體檔案被標籤為:"
+#: mediagoblin/templates/mediagoblin/listings/tag.html:30
+#: mediagoblin/templates/mediagoblin/listings/tag.html:35
+#, python-format
+msgid "Media tagged with: %(tag_name)s"
+msgstr "此媒體被標識為:%(tag_name)s"
+
+#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
+msgid "Original"
+msgstr "原始的"
#: mediagoblin/templates/mediagoblin/submit/start.html:26
msgid "Submit yer media"
msgstr "éžäº¤ä½ çš„媒體檔案"
-#: mediagoblin/templates/mediagoblin/submit/start.html:30
-msgid "Submit"
-msgstr "é€å‡º"
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
+#, python-format
+msgid "%(username)s's media"
+msgstr "%(username)s的媒體"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
msgstr "<a href=\"%(user_url)s\">%(username)s</a>的媒體檔案"
-#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
-msgid "Sorry, no such user found."
-msgstr "抱歉,找ä¸åˆ°é€™å€‹ä½¿ç”¨è€…."
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
+#, python-format
+msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+msgid "Post a comment"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
+msgid "at"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
+msgid "Post comment!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
+msgid "Edit"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
+msgid "Delete"
+msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -407,75 +446,80 @@ msgstr "沒有正在處ç†ä¸­çš„媒體"
msgid "These uploads failed to process:"
msgstr "無法處ç†é€™äº›æ›´æ–°"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
+#, python-format
+msgid "%(username)s's profile"
+msgstr "%(username)s的個人檔案"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
+msgid "Sorry, no such user found."
+msgstr "抱歉,找ä¸åˆ°é€™å€‹ä½¿ç”¨è€…."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
msgid "Email verification needed"
msgstr "需è¦èªè­‰é›»å­éƒµä»¶"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
msgid "Almost done! Your account still needs to be activated."
msgstr "幾乎完æˆäº†ï¼ä½†ä½ çš„帳號ä»ç„¶éœ€è¦è¢«å•Ÿç”¨ã€‚"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
msgid ""
"An email should arrive in a few moments with instructions on how to do so."
msgstr "馬上會有一å°é›»å­éƒµä»¶å‘Šè¨´ä½ å¦‚何åš."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid "In case it doesn't:"
msgstr "å‡è¨­å®ƒç„¡æ³•:"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
msgstr "é‡é€èªè­‰ä¿¡"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
"Someone has registered an account with this username, but it still has to be"
" activated."
msgstr "有人用了這個帳號登錄了,但是這個帳號ä»éœ€è¦è¢«å•Ÿç”¨ã€‚"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
#, python-format
msgid ""
"If you are that person but you've lost your verification email, you can <a "
"href=\"%(login_url)s\">log in</a> and resend it."
msgstr "如果你就是那個人, 但是éºå¤±äº†èªè­‰ä¿¡, ä½ å¯ä»¥<a href=\"%(login_url)s\">登入</a> 然後é‡é€ä¸€æ¬¡."
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
-#, python-format
-msgid "%(username)s's profile"
-msgstr "%(username)s的個人檔案"
-
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
msgid "Here's a spot to tell others about yourself."
msgstr "這是一個地方,能讓你å‘他人介紹自己。"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
msgid "Edit profile"
msgstr "編輯個人檔案"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
msgid "This user hasn't filled in their profile (yet)."
msgstr "這個使用者還沒(來得åŠ)填寫個人檔案。"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
#, python-format
msgid "View all of %(username)s's media"
msgstr "查看%(username)s的全部媒體檔案"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
msgid ""
"This is where your media will appear, but you don't seem to have added "
"anything yet."
msgstr "這個地方是你的媒體檔案會出ç¾çš„地方,但是你似乎還沒有加入任何æ±è¥¿ã€‚"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
msgid "Add media"
msgstr "新增媒體檔案"
-#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
msgid "There doesn't seem to be any media here yet..."
msgstr "似乎還沒有任何的媒體檔案..."
@@ -495,6 +539,18 @@ msgstr "新一點"
msgid "Older"
msgstr "舊一點"
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
+msgid "Go to page:"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:20
+msgid "Tagged with"
+msgstr "被標籤為"
+
+#: mediagoblin/templates/mediagoblin/utils/tags.html:25
+msgid "and"
+msgstr "且"
+
#: mediagoblin/user_pages/forms.py:24
msgid "Comment"
msgstr "è©•è«–"
@@ -503,15 +559,23 @@ msgstr "è©•è«–"
msgid "I am sure I want to delete this"
msgstr "我確定我想è¦åˆªé™¤"
-#: mediagoblin/user_pages/views.py:142
-msgid "Empty comments are not allowed."
+#: mediagoblin/user_pages/views.py:155
+msgid "Oops, your comment was empty."
msgstr ""
-#: mediagoblin/user_pages/views.py:148
-msgid "Comment posted!"
+#: mediagoblin/user_pages/views.py:161
+msgid "Your comment has been posted!"
msgstr ""
-#: mediagoblin/user_pages/views.py:181
+#: mediagoblin/user_pages/views.py:183
+msgid "You deleted the media."
+msgstr "你已刪除此媒體檔案。"
+
+#: mediagoblin/user_pages/views.py:190
+msgid "The media was not deleted because you didn't check that you were sure."
+msgstr "此媒體檔案尚未被刪除因為你還沒有確èªä½ çœŸçš„è¦åˆªé™¤ã€‚"
+
+#: mediagoblin/user_pages/views.py:198
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "你在刪除其他人的媒體檔案。請å°å¿ƒè™•ç†å–”。"
diff --git a/mediagoblin/init/celery/__init__.py b/mediagoblin/init/celery/__init__.py
index f7ef9f39..1eb21d7a 100644
--- a/mediagoblin/init/celery/__init__.py
+++ b/mediagoblin/init/celery/__init__.py
@@ -18,7 +18,7 @@ import os
import sys
-MANDATORY_CELERY_IMPORTS = ['mediagoblin.process_media']
+MANDATORY_CELERY_IMPORTS = ['mediagoblin.processing']
DEFAULT_SETTINGS_MODULE = 'mediagoblin.init.celery.dummy_settings_module'
diff --git a/mediagoblin/listings/views.py b/mediagoblin/listings/views.py
index 12e539e7..5a09de43 100644
--- a/mediagoblin/listings/views.py
+++ b/mediagoblin/listings/views.py
@@ -86,7 +86,7 @@ def tag_atom_feed(request):
feed.add(entry.get('title'),
entry.get('description_html'),
content_type='html',
- author=entry.uploader()['username'],
+ author=entry.get_uploader()['username'],
updated=entry.get('created'),
url=entry.url_for_self(request.urlgen))
diff --git a/mediagoblin/meddleware/__init__.py b/mediagoblin/meddleware/__init__.py
new file mode 100644
index 00000000..7ba70d87
--- /dev/null
+++ b/mediagoblin/meddleware/__init__.py
@@ -0,0 +1,32 @@
+# 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/>.
+
+ENABLED_MEDDLEWARE = (
+ 'mediagoblin.meddleware.noop:NoOpMeddleware',
+ 'mediagoblin.meddleware.csrf:CsrfMeddleware',
+ )
+
+
+class BaseMeddleware(object):
+
+ def __init__(self, mg_app):
+ self.app = mg_app
+
+ def process_request(self, request, controller):
+ pass
+
+ def process_response(self, request, response):
+ pass
diff --git a/mediagoblin/middleware/csrf.py b/mediagoblin/meddleware/csrf.py
index 8275c18e..a4e4e5c6 100644
--- a/mediagoblin/middleware/csrf.py
+++ b/mediagoblin/meddleware/csrf.py
@@ -21,6 +21,7 @@ from webob.exc import HTTPForbidden
from wtforms import Form, HiddenField, validators
from mediagoblin import mg_globals
+from mediagoblin.meddleware import BaseMeddleware
# Use the system (hardware-based) random number generator if it exists.
# -- this optimization is lifted from Django
@@ -30,6 +31,13 @@ else:
getrandbits = random.getrandbits
+def csrf_exempt(func):
+ """Decorate a Controller to exempt it from CSRF protection."""
+
+ func.csrf_enabled = False
+ return func
+
+
class CsrfForm(Form):
"""Simple form to handle rendering a CSRF token and confirming it
is included in the POST."""
@@ -42,13 +50,16 @@ def render_csrf_form_token(request):
"""Render the CSRF token in a format suitable for inclusion in a
form."""
+ if 'CSRF_TOKEN' not in request.environ:
+ return None
+
form = CsrfForm(csrf_token=request.environ['CSRF_TOKEN'])
return form.csrf_token
-class CsrfMiddleware(object):
- """CSRF Protection Middleware
+class CsrfMeddleware(BaseMeddleware):
+ """CSRF Protection Meddleware
Adds a CSRF Cookie to responses and verifies that it is present
and matches the form token for non-safe requests.
@@ -57,10 +68,7 @@ class CsrfMiddleware(object):
CSRF_KEYLEN = 64
SAFE_HTTP_METHODS = ("GET", "HEAD", "OPTIONS", "TRACE")
- def __init__(self, mg_app):
- self.app = mg_app
-
- def process_request(self, request):
+ def process_request(self, request, controller):
"""For non-safe requests, confirm that the tokens are present
and match.
"""
@@ -77,9 +85,11 @@ class CsrfMiddleware(object):
# if this is a non-"safe" request (ie, one that could have
# side effects), confirm that the CSRF tokens are present and
# valid
- if request.method not in self.SAFE_HTTP_METHODS \
- and ('gmg.verify_csrf' in request.environ or
- 'paste.testing' not in request.environ):
+ if (getattr(controller, 'csrf_enabled', True) and
+ request.method not in self.SAFE_HTTP_METHODS and
+ ('gmg.verify_csrf' in request.environ or
+ 'paste.testing' not in request.environ)
+ ):
return self.verify_tokens(request)
diff --git a/mediagoblin/middleware/noop.py b/mediagoblin/meddleware/noop.py
index 820b5d9e..f5376494 100644
--- a/mediagoblin/middleware/noop.py
+++ b/mediagoblin/meddleware/noop.py
@@ -15,12 +15,12 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-class NoOpMiddleware(object):
+from mediagoblin.meddleware import BaseMeddleware
- def __init__(self, mg_app):
- self.app = mg_app
- def process_request(self, request):
+class NoOpMeddleware(BaseMeddleware):
+
+ def process_request(self, request, controller):
pass
def process_response(self, request, response):
diff --git a/mediagoblin/media_types/__init__.py b/mediagoblin/media_types/__init__.py
new file mode 100644
index 00000000..25f3d255
--- /dev/null
+++ b/mediagoblin/media_types/__init__.py
@@ -0,0 +1,69 @@
+# 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 sys
+
+from mediagoblin import mg_globals
+from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
+
+
+class FileTypeNotSupported(Exception):
+ pass
+
+class InvalidFileType(Exception):
+ pass
+
+
+def get_media_types():
+ """
+ Generator that returns the available media types
+ """
+ for media_type in mg_globals.app_config['media_types']:
+ yield media_type
+
+
+def get_media_managers():
+ '''
+ Generator that returns all available media managers
+ '''
+ for media_type in get_media_types():
+ __import__(media_type)
+
+ yield media_type, sys.modules[media_type].MEDIA_MANAGER
+
+
+def get_media_manager(_media_type = None):
+ for media_type, manager in get_media_managers():
+ if media_type in _media_type:
+ return manager
+
+ # Nope? Then raise an error
+ raise FileTypeNotSupported(
+ "MediaManager not in enabled types. Check media_types in config?")
+
+
+def get_media_type_and_manager(filename):
+ for media_type, manager in get_media_managers():
+ if filename.find('.') > 0:
+ ext = os.path.splitext(filename)[1].lower()
+ else:
+ raise InvalidFileType(
+ _('Could not find any file extension in "{filename}"').format(
+ filename=filename))
+
+ if ext[1:] in manager['accepted_extensions']:
+ return media_type, manager
diff --git a/mediagoblin/media_types/image/__init__.py b/mediagoblin/media_types/image/__init__.py
new file mode 100644
index 00000000..3b63d8eb
--- /dev/null
+++ b/mediagoblin/media_types/image/__init__.py
@@ -0,0 +1,26 @@
+# 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.media_types.image.processing import process_image
+
+
+MEDIA_MANAGER = {
+ "human_readable": "Image",
+ "processor": process_image, # alternately a string,
+ # 'mediagoblin.media_types.image.processing'?
+ "display_template": "mediagoblin/media_displays/image.html",
+ "default_thumb": "images/media_thumbs/image.jpg",
+ "accepted_extensions": ["jpg", "jpeg", "png", "gif", "tiff"]}
diff --git a/mediagoblin/media_types/image/processing.py b/mediagoblin/media_types/image/processing.py
new file mode 100644
index 00000000..5b8259fc
--- /dev/null
+++ b/mediagoblin/media_types/image/processing.py
@@ -0,0 +1,114 @@
+# 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 Image
+import os
+
+from celery.task import Task
+from celery import registry
+
+from mediagoblin.db.util import ObjectId
+from mediagoblin import mg_globals as mgg
+
+from mediagoblin.processing import BaseProcessingFail, \
+ mark_entry_failed, BadMediaFail, create_pub_filepath, THUMB_SIZE, \
+ MEDIUM_SIZE
+
+################################
+# Media processing initial steps
+################################
+
+
+def process_image(entry):
+ """
+ Code to process an image
+ """
+ workbench = mgg.workbench_manager.create_workbench()
+ # Conversions subdirectory to avoid collisions
+ conversions_subdir = os.path.join(
+ workbench.dir, 'conversions')
+ os.mkdir(conversions_subdir)
+
+ queued_filepath = entry['queued_media_file']
+ queued_filename = workbench.localized_file(
+ mgg.queue_store, queued_filepath,
+ 'source')
+
+ filename_bits = os.path.splitext(queued_filename)
+ basename = os.path.split(filename_bits[0])[1]
+ extension = filename_bits[1].lower()
+
+ try:
+ thumb = Image.open(queued_filename)
+ except IOError:
+ raise BadMediaFail()
+
+ thumb.thumbnail(THUMB_SIZE, Image.ANTIALIAS)
+
+ # Copy the thumb to the conversion subdir, then remotely.
+ thumb_filename = 'thumbnail' + extension
+ thumb_filepath = create_pub_filepath(entry, thumb_filename)
+ tmp_thumb_filename = os.path.join(
+ conversions_subdir, thumb_filename)
+ with file(tmp_thumb_filename, 'w') as thumb_file:
+ thumb.save(thumb_file)
+ mgg.public_store.copy_local_to_storage(
+ tmp_thumb_filename, thumb_filepath)
+
+ # If the size of the original file exceeds the specified size of a `medium`
+ # file, a `medium.jpg` files is created and later associated with the media
+ # entry.
+ medium = Image.open(queued_filename)
+ medium_processed = False
+
+ if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1]:
+ medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS)
+
+ medium_filename = 'medium' + extension
+ medium_filepath = create_pub_filepath(entry, medium_filename)
+ tmp_medium_filename = os.path.join(
+ conversions_subdir, medium_filename)
+
+ with file(tmp_medium_filename, 'w') as medium_file:
+ medium.save(medium_file)
+
+ mgg.public_store.copy_local_to_storage(
+ tmp_medium_filename, medium_filepath)
+
+ medium_processed = True
+
+ # we have to re-read because unlike PIL, not everything reads
+ # things in string representation :)
+ queued_file = file(queued_filename, 'rb')
+
+ with queued_file:
+ #create_pub_filepath(entry, queued_filepath[-1])
+ original_filepath = create_pub_filepath(entry, basename + extension)
+
+ with mgg.public_store.get_file(original_filepath, 'wb') \
+ as original_file:
+ original_file.write(queued_file.read())
+
+ mgg.queue_store.delete_file(queued_filepath)
+ entry['queued_media_file'] = []
+ media_files_dict = entry.setdefault('media_files', {})
+ media_files_dict['thumb'] = thumb_filepath
+ media_files_dict['original'] = original_filepath
+ if medium_processed:
+ media_files_dict['medium'] = medium_filepath
+
+ # clean up workbench
+ workbench.destroy_self()
diff --git a/mediagoblin/media_types/video/__init__.py b/mediagoblin/media_types/video/__init__.py
new file mode 100644
index 00000000..a970ab01
--- /dev/null
+++ b/mediagoblin/media_types/video/__init__.py
@@ -0,0 +1,27 @@
+# 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.media_types.video.processing import process_video
+
+
+MEDIA_MANAGER = {
+ "human_readable": "Video",
+ "processor": process_video, # alternately a string,
+ # 'mediagoblin.media_types.image.processing'?
+ "display_template": "mediagoblin/media_displays/video.html",
+ "default_thumb": "images/media_thumbs/video.jpg",
+ "accepted_extensions": [
+ "mp4", "mov", "webm", "avi", "3gp", "3gpp", "mkv", "ogv", "ogg"]}
diff --git a/mediagoblin/media_types/video/devices/web-advanced.json b/mediagoblin/media_types/video/devices/web-advanced.json
new file mode 100644
index 00000000..ce1d22ff
--- /dev/null
+++ b/mediagoblin/media_types/video/devices/web-advanced.json
@@ -0,0 +1,505 @@
+{
+ "make": "Generic",
+ "model": "Web Browser (Advanced)",
+ "description": "Media for World Wide Web",
+ "version": "0.1",
+ "author": {
+ "name": "Dionisio E Alonso",
+ "email": "dealonso@gmail.com"
+ },
+ "icon": "file://web.svg",
+ "default": "WebM 480p",
+ "presets": [
+ {
+ "name": "H.264 720p",
+ "extension": "mp4",
+ "container": "qtmux",
+ "vcodec": {
+ "name": "x264enc",
+ "container": "qtmux",
+ "width": [
+ 960, 1280
+ ],
+ "height": [
+ 720, 720
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+ ]
+ },
+ "acodec": {
+ "name": "faac",
+ "container": "qtmux",
+ "width": [
+ 8, 24
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "bitrate=131072 profile=LC"
+ ]
+ }
+ },
+ {
+ "name": "WebM 720p",
+ "extension": "webm",
+ "container": "webmmux",
+ "icon": "file://web-webm.svg",
+ "vcodec": {
+ "name": "vp8enc",
+ "container": "webmmux",
+ "width": [
+ 960, 1280
+ ],
+ "height": [
+ 720, 720
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "quality=5.75 threads=%(threads)s speed=2"
+ ]
+ },
+ "acodec": {
+ "name": "vorbisenc",
+ "container": "webmmux",
+ "width": [
+ 8, 32
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "quality=0.3"
+ ]
+ }
+ },
+ {
+ "name": "Flash Video 720p",
+ "extension": "flv",
+ "icon": "file://web-flv.png",
+ "container": "flvmux",
+ "vcodec": {
+ "name": "x264enc",
+ "container": "flvmux",
+ "width": [
+ 960, 1280
+ ],
+ "height": [
+ 720, 720
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+ ]
+ },
+ "acodec": {
+ "name": "faac",
+ "container": "flvmux",
+ "width": [
+ 8, 24
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "bitrate=131072 profile=LC"
+ ]
+ }
+ },
+
+ {
+ "name": "H.264 576p",
+ "extension": "mp4",
+ "container": "qtmux",
+ "vcodec": {
+ "name": "x264enc",
+ "container": "qtmux",
+ "width": [
+ 768, 1024
+ ],
+ "height": [
+ 576, 576
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+ ]
+ },
+ "acodec": {
+ "name": "faac",
+ "container": "qtmux",
+ "width": [
+ 8, 24
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "bitrate=131072 profile=LC"
+ ]
+ }
+ },
+ {
+ "name": "WebM 576p",
+ "extension": "webm",
+ "container": "webmmux",
+ "icon": "file://web-webm.svg",
+ "vcodec": {
+ "name": "vp8enc",
+ "container": "webmmux",
+ "width": [
+ 768, 1024
+ ],
+ "height": [
+ 576, 576
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "quality=5.75 threads=%(threads)s speed=2"
+ ]
+ },
+ "acodec": {
+ "name": "vorbisenc",
+ "container": "webmmux",
+ "width": [
+ 8, 32
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "quality=0.3"
+ ]
+ }
+ },
+ {
+ "name": "Flash Video 576p",
+ "extension": "flv",
+ "icon": "file://web-flv.png",
+ "container": "flvmux",
+ "vcodec": {
+ "name": "x264enc",
+ "container": "flvmux",
+ "width": [
+ 768, 1024
+ ],
+ "height": [
+ 576, 576
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+ ]
+ },
+ "acodec": {
+ "name": "faac",
+ "container": "flvmux",
+ "width": [
+ 8, 24
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "bitrate=131072 profile=LC"
+ ]
+ }
+ },
+
+ {
+ "name": "H.264 480p",
+ "extension": "mp4",
+ "container": "qtmux",
+ "vcodec": {
+ "name": "x264enc",
+ "container": "qtmux",
+ "width": [
+ 640, 854
+ ],
+ "height": [
+ 480, 480
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+ ]
+ },
+ "acodec": {
+ "name": "faac",
+ "container": "qtmux",
+ "width": [
+ 8, 24
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "bitrate=131072 profile=LC"
+ ]
+ }
+ },
+ {
+ "name": "WebM 480p",
+ "extension": "webm",
+ "container": "webmmux",
+ "icon": "file://web-webm.svg",
+ "vcodec": {
+ "name": "vp8enc",
+ "container": "webmmux",
+ "width": [
+ 640, 854
+ ],
+ "height": [
+ 480, 480
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "quality=5.75 threads=%(threads)s speed=2"
+ ]
+ },
+ "acodec": {
+ "name": "vorbisenc",
+ "container": "webmmux",
+ "width": [
+ 8, 32
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "quality=0.3"
+ ]
+ }
+ },
+ {
+ "name": "Flash Video 480p",
+ "extension": "flv",
+ "icon": "file://web-flv.png",
+ "container": "flvmux",
+ "vcodec": {
+ "name": "x264enc",
+ "container": "flvmux",
+ "width": [
+ 640, 854
+ ],
+ "height": [
+ 480, 480
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+ ]
+ },
+ "acodec": {
+ "name": "faac",
+ "container": "flvmux",
+ "width": [
+ 8, 24
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "bitrate=131072 profile=LC"
+ ]
+ }
+ },
+
+ {
+ "name": "H.264 360p",
+ "extension": "mp4",
+ "container": "qtmux",
+ "vcodec": {
+ "name": "x264enc",
+ "container": "qtmux",
+ "width": [
+ 480, 640
+ ],
+ "height": [
+ 360, 360
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+ ]
+ },
+ "acodec": {
+ "name": "faac",
+ "container": "qtmux",
+ "width": [
+ 8, 24
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "bitrate=131072 profile=LC"
+ ]
+ }
+ },
+ {
+ "name": "WebM 360p",
+ "extension": "webm",
+ "container": "webmmux",
+ "icon": "file://web-webm.svg",
+ "vcodec": {
+ "name": "vp8enc",
+ "container": "webmmux",
+ "width": [
+ 480, 640
+ ],
+ "height": [
+ 360, 360
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "quality=5.75 threads=%(threads)s speed=2"
+ ]
+ },
+ "acodec": {
+ "name": "vorbisenc",
+ "container": "webmmux",
+ "width": [
+ 8, 32
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "quality=0.3"
+ ]
+ }
+ },
+ {
+ "name": "Flash Video 360p",
+ "extension": "flv",
+ "icon": "file://web-flv.png",
+ "container": "flvmux",
+ "vcodec": {
+ "name": "x264enc",
+ "container": "flvmux",
+ "width": [
+ 480, 640
+ ],
+ "height": [
+ 360, 360
+ ],
+ "rate": [
+ 1, 30
+ ],
+ "passes": [
+ "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+ ]
+ },
+ "acodec": {
+ "name": "faac",
+ "container": "flvmux",
+ "width": [
+ 8, 24
+ ],
+ "depth": [
+ 8, 24
+ ],
+ "rate": [
+ 8000, 96000
+ ],
+ "channels": [
+ 1, 2
+ ],
+ "passes": [
+ "bitrate=131072 profile=LC"
+ ]
+ }
+ }
+ ]
+}
diff --git a/mediagoblin/media_types/video/devices/web-flv.png b/mediagoblin/media_types/video/devices/web-flv.png
new file mode 100644
index 00000000..b75699f4
--- /dev/null
+++ b/mediagoblin/media_types/video/devices/web-flv.png
Binary files differ
diff --git a/mediagoblin/media_types/video/devices/web-webm.svg b/mediagoblin/media_types/video/devices/web-webm.svg
new file mode 100644
index 00000000..4e5b3e97
--- /dev/null
+++ b/mediagoblin/media_types/video/devices/web-webm.svg
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2816"
+ version="1.1"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="web-webm.svg">
+ <defs
+ id="defs2818">
+ <linearGradient
+ id="linearGradient3656">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3658" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3660" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3632">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.54901963;"
+ offset="0"
+ id="stop3634" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3636" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3622">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3624" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop3626" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3600">
+ <stop
+ style="stop-color:#8ae234;stop-opacity:1;"
+ offset="0"
+ id="stop3602" />
+ <stop
+ style="stop-color:#4e9a06;stop-opacity:1;"
+ offset="1"
+ id="stop3604" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2824" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3600"
+ id="linearGradient3606"
+ x1="20.256382"
+ y1="2.546674"
+ x2="20.256382"
+ y2="46.881901"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3622"
+ id="linearGradient3628"
+ x1="21.2349"
+ y1="7.948472"
+ x2="21.2349"
+ y2="40.191879"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3632"
+ id="linearGradient3638"
+ x1="6.4826794"
+ y1="4.543263"
+ x2="25.363527"
+ y2="35.227882"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-0.35355339)" />
+ <inkscape:perspective
+ id="perspective3693"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3600-5"
+ id="linearGradient3606-9"
+ x1="20.256382"
+ y1="2.546674"
+ x2="20.256382"
+ y2="46.881901"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3600-5">
+ <stop
+ style="stop-color:#8ae234;stop-opacity:1;"
+ offset="0"
+ id="stop3602-7" />
+ <stop
+ style="stop-color:#4e9a06;stop-opacity:1;"
+ offset="1"
+ id="stop3604-2" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3731">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.82730657"
+ id="feGaussianBlur3733" />
+ </filter>
+ <inkscape:perspective
+ id="perspective3749"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective3782"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8"
+ inkscape:cx="20.51741"
+ inkscape:cy="22.534228"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1099"
+ inkscape:window-height="834"
+ inkscape:window-x="801"
+ inkscape:window-y="106"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3608" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2821">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="star"
+ style="fill:#000000;fill-opacity:0.2869955;stroke:none;filter:url(#filter3731)"
+ id="path3598-4"
+ sodipodi:sides="3"
+ sodipodi:cx="13.857143"
+ sodipodi:cy="24.714287"
+ sodipodi:r1="25.596954"
+ sodipodi:r2="12.798477"
+ sodipodi:arg1="0"
+ sodipodi:arg2="1.0471976"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 39.454098,24.714287 20.256381,35.798093 1.0586662,46.8819 l 0,-22.167614 0,-22.1676119 19.1977168,11.0838069 19.197715,11.083806 z"
+ transform="matrix(1.0537808,0,0,1.0537808,3.6163385,-1.9600717)" />
+ <path
+ sodipodi:type="star"
+ style="fill:url(#linearGradient3606);fill-opacity:1;stroke:#366a04;stroke-width:1.05497880999999993;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-linejoin:round"
+ id="path3598"
+ sodipodi:sides="3"
+ sodipodi:cx="13.857143"
+ sodipodi:cy="24.714287"
+ sodipodi:r1="25.596954"
+ sodipodi:r2="12.798477"
+ sodipodi:arg1="0"
+ sodipodi:arg2="1.0471976"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 39.454098,24.714287 20.256381,35.798093 1.0586662,46.8819 l 0,-22.167614 0,-22.1676119 19.1977168,11.0838069 19.197715,11.083806 z"
+ transform="matrix(0.94788634,0,0,0.94788634,5.0257749,0.56128794)" />
+ <path
+ style="fill:url(#linearGradient3628);stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 6.5304575,9.646791 8.7347075,20.091724 4.674611,-18.160553 4.525987,2.612472 3.885316,12.559503 4.403755,-7.765833 1.744319,1.009296 -2.127799,9.211229 -6.155446,3.554753 -4.028978,-9.439016 -2.255629,13.086534 -5.852703,3.373025 -7.5584205,-9.989634 0.01028,-20.1435 z"
+ id="path3620"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:none;stroke:url(#linearGradient3638);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 6.9826793,42.785087 0,-38.0953773 32.9068657,18.9987873"
+ id="path3630"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+ d="M 6.6184028,8.6135689 15.026019,28.134068 19.45616,10.995613"
+ id="path3739"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+ d="m 25.081121,14.552251 3.345117,11.020499 3.93014,-6.825955"
+ id="path3739-5"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+ d="m 6.6291261,30.85266 7.0710679,9.280777"
+ id="path3772"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+ d="m 34.736621,20.290253 -2.032932,8.794642"
+ id="path3772-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+ d="m 20.594485,35.934991 1.811961,-10.650796 3.270369,7.778174"
+ id="path3796"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/mediagoblin/media_types/video/devices/web.svg b/mediagoblin/media_types/video/devices/web.svg
new file mode 100644
index 00000000..c0c68244
--- /dev/null
+++ b/mediagoblin/media_types/video/devices/web.svg
@@ -0,0 +1,982 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg3440"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"
+ sodipodi:docname="internet-web-browser.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective156" />
+ <linearGradient
+ id="linearGradient4750">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4752" />
+ <stop
+ style="stop-color:#fefefe;stop-opacity:1.0000000;"
+ offset="0.37931034"
+ id="stop4758" />
+ <stop
+ style="stop-color:#1d1d1d;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop4754" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4350">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4352" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4354" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4126">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4128" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.16494845;"
+ offset="1.0000000"
+ id="stop4130" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4114">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4116" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4118" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3962">
+ <stop
+ style="stop-color:#d3e9ff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop3964" />
+ <stop
+ style="stop-color:#d3e9ff;stop-opacity:1.0000000;"
+ offset="0.15517241"
+ id="stop4134" />
+ <stop
+ style="stop-color:#4074ae;stop-opacity:1.0000000;"
+ offset="0.75000000"
+ id="stop4346" />
+ <stop
+ style="stop-color:#36486c;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop3966" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3962"
+ id="radialGradient3968"
+ gradientTransform="scale(0.999989,1.000011)"
+ cx="18.247644"
+ cy="15.716079"
+ fx="18.247644"
+ fy="15.716079"
+ r="29.993349"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114"
+ id="radialGradient4120"
+ gradientTransform="scale(1.643990,0.608276)"
+ cx="15.115514"
+ cy="63.965388"
+ fx="15.115514"
+ fy="63.965388"
+ r="12.289036"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4126"
+ id="radialGradient4132"
+ gradientTransform="scale(0.999989,1.000011)"
+ cx="15.601279"
+ cy="12.142302"
+ fx="15.601279"
+ fy="12.142302"
+ r="43.526714"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4350"
+ id="radialGradient4356"
+ gradientTransform="scale(1.179536,0.847791)"
+ cx="11.826907"
+ cy="10.476453"
+ fx="11.826907"
+ fy="10.476453"
+ r="32.664848"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient4756"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1460"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1462"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1466"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1468"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1470"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1474"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1476"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1478"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1482"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1484"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1486"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1490"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1492"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1494"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1498"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1500"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1502"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1506"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1508"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1510"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1514"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1516"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1518"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1522"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1524"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1526"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1528"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1530"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1532"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1534"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1536"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1538"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1540"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1542"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1544"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1546"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1550"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1552"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1554"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1558"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.17254902"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="25.799661"
+ inkscape:cy="24.622653"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1440"
+ inkscape:window-height="823"
+ inkscape:window-x="0"
+ inkscape:window-y="30"
+ inkscape:showpageshadow="false" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Globe</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Tuomas Kuosmanen</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ <dc:source>http://jimmac.musichall.cz</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>globe</rdf:li>
+ <rdf:li>international</rdf:li>
+ <rdf:li>web</rdf:li>
+ <rdf:li>www</rdf:li>
+ <rdf:li>internet</rdf:li>
+ <rdf:li>network</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient4120);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000"
+ id="path4112"
+ sodipodi:cx="24.849752"
+ sodipodi:cy="38.908627"
+ sodipodi:rx="20.203051"
+ sodipodi:ry="7.4751287"
+ d="M 45.052803 38.908627 A 20.203051 7.4751287 0 1 1 4.6467018,38.908627 A 20.203051 7.4751287 0 1 1 45.052803 38.908627 z"
+ transform="matrix(1.000000,0.000000,0.000000,1.243244,0.000000,-10.27241)" />
+ <path
+ style="fill:url(#radialGradient3968);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#39396c;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 43.959853,23.485499 C 43.959853,34.195217 35.277750,42.877222 24.569505,42.877222 C 13.860279,42.877222 5.1786663,34.195119 5.1786663,23.485499 C 5.1786663,12.776272 13.860279,4.0951517 24.569505,4.0951517 C 35.277750,4.0951517 43.959853,12.776272 43.959853,23.485499 L 43.959853,23.485499 z "
+ id="path3214" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.42159382;fill:url(#radialGradient4356);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000"
+ id="path4348"
+ sodipodi:cx="17.778685"
+ sodipodi:cy="15.271057"
+ sodipodi:rx="12.929953"
+ sodipodi:ry="9.2934036"
+ d="M 30.708637 15.271057 A 12.929953 9.2934036 0 1 1 4.8487320,15.271057 A 12.929953 9.2934036 0 1 1 30.708637 15.271057 z"
+ transform="matrix(0.835938,0.000000,0.000000,1.000000,9.886868,0.000000)" />
+ <g
+ id="g4136"
+ style="fill:#000000;fill-opacity:0.71345031;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
+ transform="matrix(0.982371,0.000000,0.000000,0.982371,0.121079,0.232914)">
+ <g
+ id="g4138">
+ <g
+ id="g4142">
+ <path
+ d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z "
+ id="path4144" />
+ </g>
+ </g>
+ <g
+ id="g4146">
+ <g
+ id="g4150">
+ <path
+ d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000"
+ id="path4152" />
+ </g>
+ </g>
+ <g
+ id="g4154">
+ <g
+ id="g4158">
+ <path
+ d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000"
+ id="path4160" />
+ </g>
+ </g>
+ <g
+ id="g4162">
+ <g
+ id="g4166">
+ <path
+ d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900"
+ id="path4168" />
+ </g>
+ </g>
+ <g
+ id="g4170">
+ <g
+ id="g4174">
+ <path
+ d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000"
+ id="path4176" />
+ </g>
+ </g>
+ <g
+ id="g4178">
+ <g
+ id="g4182">
+ <path
+ d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000"
+ id="path4184" />
+ </g>
+ </g>
+ <g
+ id="g4186">
+ <g
+ id="g4190">
+ <path
+ d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000"
+ id="path4192" />
+ </g>
+ </g>
+ <g
+ id="g4194">
+ <g
+ id="g4198">
+ <path
+ d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000"
+ id="path4200" />
+ </g>
+ </g>
+ <g
+ id="g4202">
+ <g
+ style="opacity:0.75000000"
+ id="g4204">
+ <path
+ id="path4206"
+ d="" />
+ </g>
+ <g
+ id="g4208">
+ <path
+ id="path4210"
+ d="" />
+ </g>
+ </g>
+ <g
+ id="g4212">
+ <g
+ style="opacity:0.75000000"
+ id="g4214">
+ <path
+ id="path4216"
+ d="" />
+ </g>
+ <g
+ id="g4218">
+ <path
+ id="path4220"
+ d="" />
+ </g>
+ </g>
+ <g
+ id="g4222">
+ <g
+ id="g4226">
+ <path
+ d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000"
+ id="path4228" />
+ </g>
+ </g>
+ <g
+ id="g4230">
+ <g
+ id="g4234">
+ <path
+ d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500"
+ id="path4236" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g3216"
+ style="color:#000000;fill:url(#radialGradient1460);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0179454;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ transform="matrix(0.982371,0.000000,0.000000,0.982371,-8.095179e-2,3.088300e-2)">
+ <g
+ id="g3218"
+ style="color:#000000;fill:url(#radialGradient1462);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3222"
+ style="color:#000000;fill:url(#radialGradient1466);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z "
+ id="path3224"
+ style="color:#000000;fill:url(#radialGradient1468);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3226"
+ style="color:#000000;fill:url(#radialGradient1470);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3230"
+ style="color:#000000;fill:url(#radialGradient1474);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000"
+ id="path3232"
+ style="color:#000000;fill:url(#radialGradient1476);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3234"
+ style="color:#000000;fill:url(#radialGradient1478);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3238"
+ style="color:#000000;fill:url(#radialGradient1482);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000"
+ id="path3240"
+ style="color:#000000;fill:url(#radialGradient1484);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3242"
+ style="color:#000000;fill:url(#radialGradient1486);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3246"
+ style="color:#000000;fill:url(#radialGradient1490);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900"
+ id="path3248"
+ style="color:#000000;fill:url(#radialGradient1492);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3250"
+ style="color:#000000;fill:url(#radialGradient1494);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3254"
+ style="color:#000000;fill:url(#radialGradient1498);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000"
+ id="path3256"
+ style="color:#000000;fill:url(#radialGradient1500);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3258"
+ style="color:#000000;fill:url(#radialGradient1502);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3262"
+ style="color:#000000;fill:url(#radialGradient1506);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000"
+ id="path3264"
+ style="color:#000000;fill:url(#radialGradient1508);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3266"
+ style="color:#000000;fill:url(#radialGradient1510);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3270"
+ style="color:#000000;fill:url(#radialGradient1514);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000"
+ id="path3272"
+ style="color:#000000;fill:url(#radialGradient1516);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3274"
+ style="color:#000000;fill:url(#radialGradient1518);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3278"
+ style="color:#000000;fill:url(#radialGradient1522);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000"
+ id="path3280"
+ style="color:#000000;fill:url(#radialGradient1524);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3282"
+ style="color:#000000;fill:url(#radialGradient1526);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient1528);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3284">
+ <path
+ d=""
+ style="color:#000000;fill:url(#radialGradient1530);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3286" />
+ </g>
+ <g
+ id="g3288"
+ style="color:#000000;fill:url(#radialGradient1532);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d=""
+ id="path3290"
+ style="color:#000000;fill:url(#radialGradient1534);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3292"
+ style="color:#000000;fill:url(#radialGradient1536);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient1538);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3294">
+ <path
+ d=""
+ style="color:#000000;fill:url(#radialGradient1540);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3296" />
+ </g>
+ <g
+ id="g3298"
+ style="color:#000000;fill:url(#radialGradient1542);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d=""
+ id="path3300"
+ style="color:#000000;fill:url(#radialGradient1544);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3302"
+ style="color:#000000;fill:url(#radialGradient1546);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3306"
+ style="color:#000000;fill:url(#radialGradient1550);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000"
+ id="path3308"
+ style="color:#000000;fill:url(#radialGradient1552);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3310"
+ style="color:#000000;fill:url(#radialGradient1554);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3314"
+ style="color:#000000;fill:url(#radialGradient1558);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500"
+ id="path3316"
+ style="color:#000000;fill:url(#radialGradient4756);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ </g>
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient4132);stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 42.975093,23.485534 C 42.975093,33.651354 34.733915,41.892440 24.569493,41.892440 C 14.404139,41.892440 6.1634261,33.651261 6.1634261,23.485534 C 6.1634261,13.320180 14.404139,5.0799340 24.569493,5.0799340 C 34.733915,5.0799340 42.975093,13.320180 42.975093,23.485534 L 42.975093,23.485534 z "
+ id="path4122" />
+ </g>
+</svg>
diff --git a/mediagoblin/media_types/video/processing.py b/mediagoblin/media_types/video/processing.py
new file mode 100644
index 00000000..6125e49c
--- /dev/null
+++ b/mediagoblin/media_types/video/processing.py
@@ -0,0 +1,118 @@
+# 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 tempfile
+import logging
+import os
+
+from mediagoblin import mg_globals as mgg
+from mediagoblin.processing import mark_entry_failed, \
+ THUMB_SIZE, MEDIUM_SIZE, create_pub_filepath
+from . import transcoders
+
+logging.basicConfig()
+
+_log = logging.getLogger(__name__)
+_log.setLevel(logging.DEBUG)
+
+
+def process_video(entry):
+ """
+ Code to process a video
+
+ Much of this code is derived from the arista-transcoder script in
+ the arista PyPI package and changed to match the needs of
+ MediaGoblin
+
+ This function sets up the arista video encoder in some kind of new thread
+ and attaches callbacks to that child process, hopefully, the
+ entry-complete callback will be called when the video is done.
+ """
+ workbench = mgg.workbench_manager.create_workbench()
+
+ queued_filepath = entry['queued_media_file']
+ queued_filename = workbench.localized_file(
+ mgg.queue_store, queued_filepath,
+ 'source')
+
+ medium_filepath = create_pub_filepath(
+ entry,
+ '{original}-640p.webm'.format(
+ original=os.path.splitext(
+ queued_filepath[-1])[0] # Select the
+ ))
+
+ thumbnail_filepath = create_pub_filepath(
+ entry, 'thumbnail.jpg')
+
+
+ # Create a temporary file for the video destination
+ tmp_dst = tempfile.NamedTemporaryFile()
+
+ with tmp_dst:
+ # Transcode queued file to a VP8/vorbis file that fits in a 640x640 square
+ transcoder = transcoders.VideoTranscoder(queued_filename, tmp_dst.name)
+
+ # Push transcoded video to public storage
+ _log.debug('Saving medium...')
+ mgg.public_store.get_file(medium_filepath, 'wb').write(
+ tmp_dst.read())
+ _log.debug('Saved medium')
+
+ entry['media_files']['webm_640'] = medium_filepath
+
+ # Save the width and height of the transcoded video
+ entry['media_data']['video'] = {
+ u'width': transcoder.dst_data.videowidth,
+ u'height': transcoder.dst_data.videoheight}
+
+ # Create a temporary file for the video thumbnail
+ tmp_thumb = tempfile.NamedTemporaryFile()
+
+ with tmp_thumb:
+ # Create a thumbnail.jpg that fits in a 180x180 square
+ transcoders.VideoThumbnailer(queued_filename, tmp_thumb.name)
+
+ # Push the thumbnail to public storage
+ _log.debug('Saving thumbnail...')
+ mgg.public_store.get_file(thumbnail_filepath, 'wb').write(
+ tmp_thumb.read())
+ _log.debug('Saved thumbnail')
+
+ entry['media_files']['thumb'] = thumbnail_filepath
+
+
+ # Push original file to public storage
+ queued_file = file(queued_filename, 'rb')
+
+ with queued_file:
+ original_filepath = create_pub_filepath(
+ entry,
+ queued_filepath[-1])
+
+ with mgg.public_store.get_file(original_filepath, 'wb') as \
+ original_file:
+ _log.debug('Saving original...')
+ original_file.write(queued_file.read())
+ _log.debug('Saved original')
+
+ entry['media_files']['original'] = original_filepath
+
+ mgg.queue_store.delete_file(queued_filepath)
+
+
+ # Save the MediaEntry
+ entry.save()
diff --git a/mediagoblin/media_types/video/transcoders.py b/mediagoblin/media_types/video/transcoders.py
new file mode 100644
index 00000000..d7ed14ca
--- /dev/null
+++ b/mediagoblin/media_types/video/transcoders.py
@@ -0,0 +1,658 @@
+# 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 __future__ import division
+
+import os
+os.putenv('GST_DEBUG_DUMP_DOT_DIR', '/tmp')
+
+import sys
+import logging
+import pdb
+import urllib
+
+_log = logging.getLogger(__name__)
+logging.basicConfig()
+_log.setLevel(logging.DEBUG)
+
+CPU_COUNT = 2
+try:
+ import multiprocessing
+ try:
+ CPU_COUNT = multiprocessing.cpu_count()
+ except NotImplementedError:
+ _log.warning('multiprocessing.cpu_count not implemented')
+ pass
+except ImportError:
+ _log.warning('Could not import multiprocessing, defaulting to 2 CPU cores')
+ pass
+
+try:
+ import gtk
+except:
+ raise Exception('Could not find pygtk')
+
+try:
+ import gobject
+ gobject.threads_init()
+except:
+ raise Exception('gobject could not be found')
+
+try:
+ import pygst
+ pygst.require('0.10')
+ import gst
+ from gst.extend import discoverer
+except:
+ raise Exception('gst/pygst 0.10 could not be found')
+
+
+class VideoThumbnailer:
+ # Declaration of thumbnailer states
+ STATE_NULL = 0
+ STATE_HALTING = 1
+ STATE_PROCESSING = 2
+
+ # The current thumbnailer state
+ state = STATE_NULL
+
+ # This will contain the thumbnailing pipeline
+ thumbnail_pipeline = None
+
+ buffer_probes = {}
+
+ errors = []
+
+ def __init__(self, source_path, dest_path):
+ '''
+ Set up playbin pipeline in order to get video properties.
+
+ Initializes and runs the gobject.MainLoop()
+ '''
+ self.source_path = source_path
+ self.dest_path = dest_path
+
+ self.loop = gobject.MainLoop()
+
+ # Set up the playbin. It will be used to discover certain
+ # properties of the input file
+ self.playbin = gst.element_factory_make('playbin')
+
+ self.videosink = gst.element_factory_make('fakesink', 'videosink')
+ self.playbin.set_property('video-sink', self.videosink)
+
+ self.audiosink = gst.element_factory_make('fakesink', 'audiosink')
+ self.playbin.set_property('audio-sink', self.audiosink)
+
+ self.bus = self.playbin.get_bus()
+ self.bus.add_signal_watch()
+ self.watch_id = self.bus.connect('message', self._on_bus_message)
+
+ self.playbin.set_property('uri', 'file:{0}'.format(
+ urllib.pathname2url(self.source_path)))
+
+ self.playbin.set_state(gst.STATE_PAUSED)
+
+ self.run()
+
+ def run(self):
+ self.loop.run()
+
+ def _on_bus_message(self, bus, message):
+ _log.debug(' BUS MESSAGE: {0}'.format(message))
+
+ if message.type == gst.MESSAGE_ERROR:
+ gobject.idle_add(self._on_bus_error)
+
+ elif message.type == gst.MESSAGE_STATE_CHANGED:
+ # The pipeline state has changed
+ # Parse state changing data
+ _prev, state, _pending = message.parse_state_changed()
+
+ _log.debug('State changed: {0}'.format(state))
+
+ if state == gst.STATE_PAUSED:
+ if message.src == self.playbin:
+ gobject.idle_add(self._on_bus_paused)
+
+ def _on_bus_paused(self):
+ '''
+ Set up thumbnailing pipeline
+ '''
+ current_video = self.playbin.get_property('current-video')
+
+ if current_video == 0:
+ _log.debug('Found current video from playbin')
+ else:
+ _log.error('Could not get any current video from playbin!')
+
+ self.duration = self._get_duration(self.playbin)
+ _log.info('Video length: {0}'.format(self.duration / gst.SECOND))
+
+ _log.info('Setting up thumbnailing pipeline')
+ self.thumbnail_pipeline = gst.parse_launch(
+ 'filesrc location="{0}" ! decodebin ! '
+ 'ffmpegcolorspace ! videoscale ! '
+ 'video/x-raw-rgb,depth=24,bpp=24,pixel-aspect-ratio=1/1,width=180 ! '
+ 'fakesink signal-handoffs=True'.format(self.source_path))
+
+ self.thumbnail_bus = self.thumbnail_pipeline.get_bus()
+ self.thumbnail_bus.add_signal_watch()
+ self.thumbnail_watch_id = self.thumbnail_bus.connect(
+ 'message', self._on_thumbnail_bus_message)
+
+ self.thumbnail_pipeline.set_state(gst.STATE_PAUSED)
+
+ #gobject.timeout_add(3000, self._on_timeout)
+
+ return False
+
+ def _on_thumbnail_bus_message(self, bus, message):
+ _log.debug('Thumbnail bus called, message: {0}'.format(message))
+
+ if message.type == gst.MESSAGE_ERROR:
+ _log.error(message)
+ gobject.idle_add(self._on_bus_error)
+
+ if message.type == gst.MESSAGE_STATE_CHANGED:
+ _prev, state, _pending = message.parse_state_changed()
+
+ if (state == gst.STATE_PAUSED and
+ not self.state == self.STATE_PROCESSING and
+ message.src == self.thumbnail_pipeline):
+ _log.info('Pipeline paused, processing')
+ self.state = self.STATE_PROCESSING
+
+ for sink in self.thumbnail_pipeline.sinks():
+ name = sink.get_name()
+ factoryname = sink.get_factory().get_name()
+
+ if factoryname == 'fakesink':
+ sinkpad = sink.get_pad('sink')
+
+ self.buffer_probes[name] = sinkpad.add_buffer_probe(
+ self.buffer_probe_handler, name)
+
+ _log.info('Added buffer probe')
+
+ break
+
+ # Apply the wadsworth constant, fallback to 1 second
+ seek_amount = max(self.duration / 100 * 30, 1 * gst.SECOND)
+
+ _log.debug('seek amount: {0}'.format(seek_amount))
+
+ seek_result = self.thumbnail_pipeline.seek(
+ 1.0,
+ gst.FORMAT_TIME,
+ gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_ACCURATE,
+ gst.SEEK_TYPE_SET,
+ seek_amount,
+ gst.SEEK_TYPE_NONE,
+ 0)
+
+ if not seek_result:
+ self.errors.append('COULD_NOT_SEEK')
+ _log.error('Couldn\'t seek! result: {0}'.format(
+ seek_result))
+ _log.info(message)
+ self.shutdown()
+ else:
+ pass
+ #self.thumbnail_pipeline.set_state(gst.STATE_PAUSED)
+ #pdb.set_trace()
+
+ def buffer_probe_handler_real(self, pad, buff, name):
+ '''
+ Capture buffers as gdk_pixbufs when told to.
+ '''
+ try:
+ caps = buff.caps
+ if caps is None:
+ _log.error('No caps passed to buffer probe handler!')
+ self.shutdown()
+ return False
+
+ _log.debug('caps: {0}'.format(caps))
+
+ filters = caps[0]
+ width = filters["width"]
+ height = filters["height"]
+
+ pixbuf = gtk.gdk.pixbuf_new_from_data(
+ buff.data, gtk.gdk.COLORSPACE_RGB, False, 8,
+ width, height, width * 3)
+
+ # NOTE: 200x136 is sort of arbitrary. it's larger than what
+ # the ui uses at the time of this writing.
+ # new_width, new_height = scaled_size((width, height), (200, 136))
+
+ #pixbuf = pixbuf.scale_simple(
+ #new_width, new_height, gtk.gdk.INTERP_BILINEAR)
+
+ pixbuf.save(self.dest_path, 'jpeg')
+ _log.info('Saved thumbnail')
+ del pixbuf
+ self.shutdown()
+ except gst.QueryError:
+ pass
+ return False
+
+ def buffer_probe_handler(self, pad, buff, name):
+ '''
+ Proxy function for buffer_probe_handler_real
+ '''
+ gobject.idle_add(
+ lambda: self.buffer_probe_handler_real(pad, buff, name))
+
+ return True
+
+ def _get_duration(self, pipeline, retries=0):
+ '''
+ Get the duration of a pipeline.
+
+ Retries 5 times.
+ '''
+ if retries == 5:
+ return 0
+
+ try:
+ return pipeline.query_duration(gst.FORMAT_TIME)[0]
+ except gst.QueryError:
+ return self._get_duration(pipeline, retries + 1)
+
+ def _on_timeout(self):
+ _log.error('TIMEOUT! DROP EVERYTHING!')
+ self.shutdown()
+
+ def _on_bus_error(self, *args):
+ _log.error('AHAHAHA! Error! args: {0}'.format(args))
+
+ def shutdown(self):
+ '''
+ Tell gobject to call __halt when the mainloop is idle.
+ '''
+ _log.info('Shutting down')
+ self.__halt()
+
+ def __halt(self):
+ '''
+ Halt all pipelines and shut down the main loop
+ '''
+ _log.info('Halting...')
+ self.state = self.STATE_HALTING
+
+ self.__disconnect()
+
+ gobject.idle_add(self.__halt_final)
+
+ def __disconnect(self):
+ _log.debug('Disconnecting...')
+ if not self.playbin is None:
+ self.playbin.set_state(gst.STATE_NULL)
+ for sink in self.playbin.sinks():
+ name = sink.get_name()
+ factoryname = sink.get_factory().get_name()
+
+ _log.debug('Disconnecting {0}'.format(name))
+
+ if factoryname == "fakesink":
+ pad = sink.get_pad("sink")
+ pad.remove_buffer_probe(self.buffer_probes[name])
+ del self.buffer_probes[name]
+
+ self.playbin = None
+
+ if self.bus is not None:
+ self.bus.disconnect(self.watch_id)
+ self.bus = None
+
+
+ def __halt_final(self):
+ _log.info('Done')
+ if self.errors:
+ _log.error(','.join(self.errors))
+
+ self.loop.quit()
+
+
+class VideoTranscoder:
+ '''
+ Video transcoder
+
+ Transcodes the SRC video file to a VP8 WebM video file at DST
+
+ - Does the same thing as VideoThumbnailer, but produces a WebM vp8
+ and vorbis video file.
+ - The VideoTranscoder exceeds the VideoThumbnailer in the way
+ that it was refined afterwards and therefore is done more
+ correctly.
+ '''
+ def __init__(self, src, dst, **kwargs):
+ _log.info('Initializing VideoTranscoder...')
+
+ self.loop = gobject.MainLoop()
+ self.source_path = src
+ self.destination_path = dst
+
+ # Options
+ self.destination_dimensions = kwargs.get('dimensions') or (640, 640)
+ self._progress_callback = kwargs.get('progress_callback') or None
+
+ if not type(self.destination_dimensions) == tuple:
+ raise Exception('dimensions must be tuple: (width, height)')
+
+ self._setup()
+ self._run()
+
+ def _setup(self):
+ self._setup_discover()
+ self._setup_pipeline()
+
+ def _run(self):
+ _log.info('Discovering...')
+ self.discoverer.discover()
+ _log.info('Done')
+
+ _log.debug('Initializing MainLoop()')
+ self.loop.run()
+
+ def _setup_discover(self):
+ _log.debug('Setting up discoverer')
+ self.discoverer = discoverer.Discoverer(self.source_path)
+
+ # Connect self.__discovered to the 'discovered' event
+ self.discoverer.connect('discovered', self.__discovered)
+
+ def __discovered(self, data, is_media):
+ '''
+ Callback for media discoverer.
+ '''
+ if not is_media:
+ self.__stop()
+ raise Exception('Could not discover {0}'.format(self.source_path))
+
+ _log.debug('__discovered, data: {0}'.format(data.__dict__))
+
+ self.data = data
+
+ # Launch things that should be done after discovery
+ self._link_elements()
+ self.__setup_videoscale_capsfilter()
+
+ # Tell the transcoding pipeline to start running
+ self.pipeline.set_state(gst.STATE_PLAYING)
+ _log.info('Transcoding...')
+
+ def _setup_pipeline(self):
+ _log.debug('Setting up transcoding pipeline')
+ # Create the pipeline bin.
+ self.pipeline = gst.Pipeline('VideoTranscoderPipeline')
+
+ # Create all GStreamer elements, starting with
+ # filesrc & decoder
+ self.filesrc = gst.element_factory_make('filesrc', 'filesrc')
+ self.filesrc.set_property('location', self.source_path)
+ self.pipeline.add(self.filesrc)
+
+ self.decoder = gst.element_factory_make('decodebin2', 'decoder')
+ self.decoder.connect('new-decoded-pad', self._on_dynamic_pad)
+ self.pipeline.add(self.decoder)
+
+ # Video elements
+ self.videoqueue = gst.element_factory_make('queue', 'videoqueue')
+ self.pipeline.add(self.videoqueue)
+
+ self.videorate = gst.element_factory_make('videorate', 'videorate')
+ self.pipeline.add(self.videorate)
+
+ self.ffmpegcolorspace = gst.element_factory_make(
+ 'ffmpegcolorspace', 'ffmpegcolorspace')
+ self.pipeline.add(self.ffmpegcolorspace)
+
+ self.videoscale = gst.element_factory_make('ffvideoscale', 'videoscale')
+ #self.videoscale.set_property('method', 2) # I'm not sure this works
+ #self.videoscale.set_property('add-borders', 0)
+ self.pipeline.add(self.videoscale)
+
+ self.capsfilter = gst.element_factory_make('capsfilter', 'capsfilter')
+ self.pipeline.add(self.capsfilter)
+
+ self.vp8enc = gst.element_factory_make('vp8enc', 'vp8enc')
+ self.vp8enc.set_property('quality', 6)
+ self.vp8enc.set_property('threads', 2)
+ self.pipeline.add(self.vp8enc)
+
+ # Audio elements
+ self.audioqueue = gst.element_factory_make('queue', 'audioqueue')
+ self.pipeline.add(self.audioqueue)
+
+ self.audiorate = gst.element_factory_make('audiorate', 'audiorate')
+ self.audiorate.set_property('tolerance', 80000000)
+ self.pipeline.add(self.audiorate)
+
+ self.audioconvert = gst.element_factory_make('audioconvert', 'audioconvert')
+ self.pipeline.add(self.audioconvert)
+
+ self.audiocapsfilter = gst.element_factory_make('capsfilter', 'audiocapsfilter')
+ audiocaps = ['audio/x-raw-float']
+ self.audiocapsfilter.set_property(
+ 'caps',
+ gst.caps_from_string(
+ ','.join(audiocaps)))
+ self.pipeline.add(self.audiocapsfilter)
+
+ self.vorbisenc = gst.element_factory_make('vorbisenc', 'vorbisenc')
+ self.vorbisenc.set_property('quality', 1)
+ self.pipeline.add(self.vorbisenc)
+
+ # WebMmux & filesink
+ self.webmmux = gst.element_factory_make('webmmux', 'webmmux')
+ self.pipeline.add(self.webmmux)
+
+ self.filesink = gst.element_factory_make('filesink', 'filesink')
+ self.filesink.set_property('location', self.destination_path)
+ self.pipeline.add(self.filesink)
+
+ # Progressreport
+ self.progressreport = gst.element_factory_make(
+ 'progressreport', 'progressreport')
+ # Update every second
+ self.progressreport.set_property('update-freq', 1)
+ self.progressreport.set_property('silent', True)
+ self.pipeline.add(self.progressreport)
+
+ def _link_elements(self):
+ '''
+ Link all the elements
+
+ This code depends on data from the discoverer and is called
+ from __discovered
+ '''
+ _log.debug('linking elements')
+ # Link the filesrc element to the decoder. The decoder then emits
+ # 'new-decoded-pad' which links decoded src pads to either a video
+ # or audio sink
+ self.filesrc.link(self.decoder)
+
+ # Link all the video elements in a row to webmmux
+ gst.element_link_many(
+ self.videoqueue,
+ self.videorate,
+ self.ffmpegcolorspace,
+ self.videoscale,
+ self.capsfilter,
+ self.vp8enc,
+ self.webmmux)
+
+ if self.data.is_audio:
+ # Link all the audio elements in a row to webmux
+ gst.element_link_many(
+ self.audioqueue,
+ self.audiorate,
+ self.audioconvert,
+ self.audiocapsfilter,
+ self.vorbisenc,
+ self.webmmux)
+
+ gst.element_link_many(
+ self.webmmux,
+ self.progressreport,
+ self.filesink)
+
+ # Setup the message bus and connect _on_message to the pipeline
+ self._setup_bus()
+
+
+ def _on_dynamic_pad(self, dbin, pad, islast):
+ '''
+ Callback called when ``decodebin2`` has a pad that we can connect to
+ '''
+ # Intersect the capabilities of the video sink and the pad src
+ # Then check if they have no common capabilities.
+ if self.ffmpegcolorspace.get_pad_template('sink')\
+ .get_caps().intersect(pad.get_caps()).is_empty():
+ # It is NOT a video src pad.
+ pad.link(self.audioqueue.get_pad('sink'))
+ else:
+ # It IS a video src pad.
+ pad.link(self.videoqueue.get_pad('sink'))
+
+ def _setup_bus(self):
+ self.bus = self.pipeline.get_bus()
+ self.bus.add_signal_watch()
+ self.bus.connect('message', self._on_message)
+
+ def __setup_videoscale_capsfilter(self):
+ '''
+ Sets up the output format (width, height) for the video
+ '''
+ caps = ['video/x-raw-yuv', 'pixel-aspect-ratio=1/1', 'framerate=30/1']
+
+ if self.data.videoheight > self.data.videowidth:
+ # Whoa! We have ourselves a portrait video!
+ caps.append('height={0}'.format(
+ self.destination_dimensions[1]))
+ else:
+ # It's a landscape, phew, how normal.
+ caps.append('width={0}'.format(
+ self.destination_dimensions[0]))
+
+ self.capsfilter.set_property(
+ 'caps',
+ gst.caps_from_string(
+ ','.join(caps)))
+
+ def _on_message(self, bus, message):
+ _log.debug((bus, message, message.type))
+
+ t = message.type
+
+ if t == gst.MESSAGE_EOS:
+ self._discover_dst_and_stop()
+ _log.info('Done')
+
+ elif t == gst.MESSAGE_ELEMENT:
+ if message.structure.get_name() == 'progress':
+ data = dict(message.structure)
+
+ if self._progress_callback:
+ self._progress_callback(data)
+
+ _log.info('{percent}% done...'.format(
+ percent=data.get('percent')))
+ _log.debug(data)
+
+ elif t == gst.MESSAGE_ERROR:
+ _log.error((bus, message))
+ self.__stop()
+
+ def _discover_dst_and_stop(self):
+ self.dst_discoverer = discoverer.Discoverer(self.destination_path)
+
+ self.dst_discoverer.connect('discovered', self.__dst_discovered)
+
+ self.dst_discoverer.discover()
+
+
+ def __dst_discovered(self, data, is_media):
+ self.dst_data = data
+
+ self.__stop()
+
+ def __stop(self):
+ _log.debug(self.loop)
+
+ # Stop executing the pipeline
+ self.pipeline.set_state(gst.STATE_NULL)
+
+ # This kills the loop, mercifully
+ gobject.idle_add(self.__stop_mainloop)
+
+ def __stop_mainloop(self):
+ '''
+ Wrapper for gobject.MainLoop.quit()
+
+ This wrapper makes us able to see if self.loop.quit has been called
+ '''
+ _log.info('Terminating MainLoop')
+
+ self.loop.quit()
+
+
+if __name__ == '__main__':
+ os.nice(19)
+ from optparse import OptionParser
+
+ parser = OptionParser(
+ usage='%prog [-v] -a [ video | thumbnail ] SRC DEST')
+
+ parser.add_option('-a', '--action',
+ dest='action',
+ help='One of "video" or "thumbnail"')
+
+ parser.add_option('-v',
+ dest='verbose',
+ action='store_true',
+ help='Output debug information')
+
+ parser.add_option('-q',
+ dest='quiet',
+ action='store_true',
+ help='Dear program, please be quiet unless *error*')
+
+ (options, args) = parser.parse_args()
+
+ if options.verbose:
+ _log.setLevel(logging.DEBUG)
+ else:
+ _log.setLevel(logging.INFO)
+
+ if options.quiet:
+ _log.setLevel(logging.ERROR)
+
+ _log.debug(args)
+
+ if not len(args) == 2:
+ parser.print_help()
+ sys.exit()
+
+ if options.action == 'thumbnail':
+ VideoThumbnailer(*args)
+ elif options.action == 'video':
+ def cb(data):
+ print('I\'m a callback!')
+ transcoder = VideoTranscoder(*args, progress_callback=cb)
diff --git a/mediagoblin/process_media/errors.py b/mediagoblin/process_media/errors.py
deleted file mode 100644
index 4224a3e1..00000000
--- a/mediagoblin/process_media/errors.py
+++ /dev/null
@@ -1,45 +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/>.
-
-from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
-
-
-class BaseProcessingFail(Exception):
- """
- Base exception that all other processing failure messages should
- subclass from.
-
- You shouldn't call this itself; instead you should subclass it
- and provid the exception_path and general_message applicable to
- this error.
- """
- general_message = u''
-
- @property
- def exception_path(self):
- return u"%s:%s" % (
- self.__class__.__module__, self.__class__.__name__)
-
- def __init__(self, **metadata):
- self.metadata = metadata or {}
-
-
-class BadMediaFail(BaseProcessingFail):
- """
- Error that should be raised when an inappropriate file was given
- for the media type specified.
- """
- general_message = _(u'Invalid file given for media type.')
diff --git a/mediagoblin/process_media/__init__.py b/mediagoblin/processing.py
index 34d83e54..89c4ac89 100644
--- a/mediagoblin/process_media/__init__.py
+++ b/mediagoblin/processing.py
@@ -14,15 +14,14 @@
# 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 Image
from celery.task import Task
-from celery import registry
from mediagoblin.db.util import ObjectId
from mediagoblin import mg_globals as mgg
-from mediagoblin.process_media.errors import BaseProcessingFail, BadMediaFail
+
+from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
+
+from mediagoblin.media_types import get_media_manager
THUMB_SIZE = 180, 180
@@ -42,6 +41,8 @@ def create_pub_filepath(entry, filename):
class ProcessMedia(Task):
"""
+ DEPRECATED -- This now resides in the individual media plugins
+
Pass this entry off for processing.
"""
def run(self, media_id):
@@ -54,10 +55,14 @@ class ProcessMedia(Task):
# Try to process, and handle expected errors.
try:
- process_image(entry)
+ #__import__(entry['media_type'])
+ manager = get_media_manager(entry['media_type'])
+ manager['processor'](entry)
except BaseProcessingFail, exc:
mark_entry_failed(entry._id, exc)
return
+ except ImportError, exc:
+ mark_entry_failed(entry[u'_id'], exc)
entry['state'] = u'processed'
entry.save()
@@ -75,9 +80,6 @@ class ProcessMedia(Task):
mark_entry_failed(entry_id, exc)
-process_media = registry.tasks[ProcessMedia.name]
-
-
def mark_entry_failed(entry_id, exc):
"""
Mark a media entry as having failed in its conversion.
@@ -113,66 +115,29 @@ def mark_entry_failed(entry_id, exc):
u'fail_metadata': {}}})
-def process_image(entry):
- """
- Code to process an image
+class BaseProcessingFail(Exception):
"""
- workbench = mgg.workbench_manager.create_workbench()
-
- queued_filepath = entry['queued_media_file']
- queued_filename = workbench.localized_file(
- mgg.queue_store, queued_filepath,
- 'source')
-
- extension = os.path.splitext(queued_filename)[1]
-
- try:
- thumb = Image.open(queued_filename)
- except IOError:
- raise BadMediaFail()
+ Base exception that all other processing failure messages should
+ subclass from.
- thumb.thumbnail(THUMB_SIZE, Image.ANTIALIAS)
-
- thumb_filepath = create_pub_filepath(entry, 'thumbnail' + extension)
- thumb_file = mgg.public_store.get_file(thumb_filepath, 'w')
-
- with thumb_file:
- thumb.save(thumb_file)
-
- # If the size of the original file exceeds the specified size of a `medium`
- # file, a `medium.jpg` files is created and later associated with the media
- # entry.
- medium = Image.open(queued_filename)
- medium_processed = False
-
- if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1]:
- medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS)
-
- medium_filepath = create_pub_filepath(entry, 'medium' + extension)
- medium_file = mgg.public_store.get_file(medium_filepath, 'w')
-
- with medium_file:
- medium.save(medium_file)
- medium_processed = True
-
- # we have to re-read because unlike PIL, not everything reads
- # things in string representation :)
- queued_file = file(queued_filename, 'rb')
+ You shouldn't call this itself; instead you should subclass it
+ and provid the exception_path and general_message applicable to
+ this error.
+ """
+ general_message = u''
- with queued_file:
- original_filepath = create_pub_filepath(entry, queued_filepath[-1])
+ @property
+ def exception_path(self):
+ return u"%s:%s" % (
+ self.__class__.__module__, self.__class__.__name__)
- with mgg.public_store.get_file(original_filepath, 'wb') \
- as original_file:
- original_file.write(queued_file.read())
+ def __init__(self, **metadata):
+ self.metadata = metadata or {}
- mgg.queue_store.delete_file(queued_filepath)
- entry['queued_media_file'] = []
- media_files_dict = entry.setdefault('media_files', {})
- media_files_dict['thumb'] = thumb_filepath
- media_files_dict['original'] = original_filepath
- if medium_processed:
- media_files_dict['medium'] = medium_filepath
- # clean up workbench
- workbench.destroy_self()
+class BadMediaFail(BaseProcessingFail):
+ """
+ Error that should be raised when an inappropriate file was given
+ for the media type specified.
+ """
+ general_message = _(u'Invalid file given for media type.')
diff --git a/mediagoblin/static/css/base.css b/mediagoblin/static/css/base.css
index a7b659c3..961a51fc 100644
--- a/mediagoblin/static/css/base.css
+++ b/mediagoblin/static/css/base.css
@@ -98,30 +98,6 @@ a.mediagoblin_logo{
font-weight: bold;
}
-.header_submit, .header_submit_highlight{
- color: #272727;
- 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);
- box-shadow: 0px 0px 4px #000;
- border-radius: 3px;
- margin: 8px;
- padding: 3px 8px;
- text-decoration: none;
- border: medium none;
- font-style: normal;
- font-weight: bold;
- font-size: 1em;
-}
-
-.header_submit_highlight{
-background-image: -moz-linear-gradient(center top , rgb(134, 212, 177), rgb(109, 173, 144));
-}
-
.mediagoblin_footer {
height: 30px;
border-top: 1px solid #333;
@@ -141,7 +117,29 @@ background-image: -moz-linear-gradient(center top , rgb(134, 212, 177), rgb(109,
/* common website elements */
-.button, .cancel_link {
+.button_action, .button_action_highlight{
+ color: #c3c3c3;
+ background-color: #363636;
+ border: 1px solid;
+ border-color: #464646 #2B2B2B #252525;
+ border-radius: 4px;
+ margin: 8px;
+ padding: 3px 8px;
+ text-decoration: none;
+ font-style: normal;
+ font-weight: bold;
+ font-size: 1em;
+ display: inline-block;
+}
+
+.button_action_highlight{
+ background-color: #86D4B1;
+ border-color: #A2DEC3 #6CAA8E #5C9179;
+ color: #283F35;
+}
+
+
+.button_form, .cancel_link {
height: 32px;
min-width: 99px;
background-color: #86d4b1;
@@ -183,7 +181,7 @@ text-align: center;
}
.empty_space{
- background-color: #222;
+ background-image: url("../images/empty_back.png");
font-style: italic;
text-align: center;
height: 160px;
@@ -301,17 +299,13 @@ img.media_icon{
background-color: #1d1d1d;
border: 1px solid;
border-color: #2c2c2c #232323 #1a1a1a;
- border-radius: 3px;
+ border-radius: 4px;
text-decoration: none;
- padding: 8px 0px 14px;
- font-size: 2em;
+ padding: 12px 0 16px;
+ font-size: 1.4em;
margin: 0 0 20px
}
-p.navigation_button{
- color: #272727;
-}
-
.navigation_left{
margin-right: 6px;
}
diff --git a/mediagoblin/static/images/empty_back.png b/mediagoblin/static/images/empty_back.png
new file mode 100644
index 00000000..3522ddd3
--- /dev/null
+++ b/mediagoblin/static/images/empty_back.png
Binary files differ
diff --git a/mediagoblin/static/images/icon_delete.png b/mediagoblin/static/images/icon_delete.png
deleted file mode 100644
index 9d76a5db..00000000
--- a/mediagoblin/static/images/icon_delete.png
+++ /dev/null
Binary files differ
diff --git a/mediagoblin/static/images/icon_edit.png b/mediagoblin/static/images/icon_edit.png
deleted file mode 100644
index 480c73ad..00000000
--- a/mediagoblin/static/images/icon_edit.png
+++ /dev/null
Binary files differ
diff --git a/mediagoblin/static/images/media_thumbs/video.jpg b/mediagoblin/static/images/media_thumbs/video.jpg
new file mode 100644
index 00000000..841dc796
--- /dev/null
+++ b/mediagoblin/static/images/media_thumbs/video.jpg
Binary files differ
diff --git a/mediagoblin/static/images/navigation_end.png b/mediagoblin/static/images/navigation_end.png
deleted file mode 100644
index b2f27296..00000000
--- a/mediagoblin/static/images/navigation_end.png
+++ /dev/null
Binary files differ
diff --git a/mediagoblin/static/images/navigation_left.png b/mediagoblin/static/images/navigation_left.png
deleted file mode 100644
index d1645120..00000000
--- a/mediagoblin/static/images/navigation_left.png
+++ /dev/null
Binary files differ
diff --git a/mediagoblin/static/images/navigation_right.png b/mediagoblin/static/images/navigation_right.png
deleted file mode 100644
index d4caa7b8..00000000
--- a/mediagoblin/static/images/navigation_right.png
+++ /dev/null
Binary files differ
diff --git a/mediagoblin/storage/__init__.py b/mediagoblin/storage/__init__.py
index 9e592b9e..0840614b 100644
--- a/mediagoblin/storage/__init__.py
+++ b/mediagoblin/storage/__init__.py
@@ -169,6 +169,18 @@ class StorageInterface(object):
with file(dest_path, 'wb') as dest_file:
dest_file.write(source_file.read())
+ def copy_local_to_storage(self, filename, filepath):
+ """
+ Copy this file from locally to the storage system.
+
+ This is kind of the opposite of copy_locally. It's likely you
+ could override this method with something more appropriate to
+ your storage system.
+ """
+ with self.get_file(filepath, 'wb') as dest_file:
+ with file(filename, 'rb') as source_file:
+ dest_file.write(source_file.read())
+
###########
# Utilities
diff --git a/mediagoblin/storage/cloudfiles.py b/mediagoblin/storage/cloudfiles.py
index 0d3cc3df..51b73579 100644
--- a/mediagoblin/storage/cloudfiles.py
+++ b/mediagoblin/storage/cloudfiles.py
@@ -98,8 +98,14 @@ class CloudFilesStorage(StorageInterface):
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))
+ try:
+ self.container.delete_object(
+ self._resolve_filepath(filepath))
+ except cloudfiles.container.ResponseError:
+ pass
+ finally:
+ pass
+
def file_url(self, filepath):
return '/'.join([
diff --git a/mediagoblin/storage/filestorage.py b/mediagoblin/storage/filestorage.py
index 22d6eb5a..a904865f 100644
--- a/mediagoblin/storage/filestorage.py
+++ b/mediagoblin/storage/filestorage.py
@@ -20,6 +20,7 @@ from mediagoblin.storage import (
NoWebServing)
import os
+import shutil
import urlparse
@@ -76,3 +77,16 @@ class BasicFileStorage(StorageInterface):
def get_local_path(self, filepath):
return self._resolve_filepath(filepath)
+
+ def copy_local_to_storage(self, filename, filepath):
+ """
+ Copy this file from locally to the storage system.
+ """
+ # Make directories if necessary
+ if len(filepath) > 1:
+ directory = self._resolve_filepath(filepath[:-1])
+ if not os.path.exists(directory):
+ os.makedirs(directory)
+
+ shutil.copy(
+ filename, self.get_local_path(filepath))
diff --git a/mediagoblin/submit/forms.py b/mediagoblin/submit/forms.py
index 25d6e304..ad420771 100644
--- a/mediagoblin/submit/forms.py
+++ b/mediagoblin/submit/forms.py
@@ -30,4 +30,6 @@ class SubmitStartForm(wtforms.Form):
_('Description of this work'))
tags = wtforms.TextField(
_('Tags'),
- [tag_length_validator])
+ [tag_length_validator],
+ description=_(
+ "Seperate tags by commas."))
diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py
index 139b1d1d..3def44ce 100644
--- a/mediagoblin/submit/views.py
+++ b/mediagoblin/submit/views.py
@@ -19,6 +19,8 @@ import uuid
from os.path import splitext
from cgi import FieldStorage
+from celery import registry
+
from werkzeug.utils import secure_filename
from mediagoblin.db.util import ObjectId
@@ -27,8 +29,9 @@ from mediagoblin.tools.translate import pass_to_ugettext as _
from mediagoblin.tools.response import render_to_response, redirect
from mediagoblin.decorators import require_active_login
from mediagoblin.submit import forms as submit_forms, security
-from mediagoblin.process_media import process_media, mark_entry_failed
+from mediagoblin.processing import mark_entry_failed, ProcessMedia
from mediagoblin.messages import add_message, SUCCESS
+from mediagoblin.media_types import get_media_type_and_manager, InvalidFileType
@require_active_login
@@ -44,86 +47,90 @@ def submit_start(request):
and request.POST['file'].file):
submit_form.file.errors.append(
_(u'You must provide a file.'))
- elif not security.check_filetype(request.POST['file']):
- submit_form.file.errors.append(
- _(u"The file doesn't seem to be an image!"))
else:
- filename = request.POST['file'].filename
+ try:
+ filename = request.POST['file'].filename
+ media_type, media_manager = get_media_type_and_manager(filename)
- # create entry and save in database
- entry = request.db.MediaEntry()
- entry['_id'] = ObjectId()
- entry['title'] = (
- unicode(request.POST['title'])
- or unicode(splitext(filename)[0]))
+ # create entry and save in database
+ entry = request.db.MediaEntry()
+ entry['_id'] = ObjectId()
+ entry['media_type'] = unicode(media_type)
+ entry['title'] = (
+ unicode(request.POST['title'])
+ or unicode(splitext(filename)[0]))
- entry['description'] = unicode(request.POST.get('description'))
- entry['description_html'] = cleaned_markdown_conversion(
- entry['description'])
+ entry['description'] = unicode(request.POST.get('description'))
+ entry['description_html'] = cleaned_markdown_conversion(
+ entry['description'])
- entry['media_type'] = u'image' # heh
- entry['uploader'] = request.user._id
+ entry['uploader'] = request.user['_id']
- # Process the user's folksonomy "tags"
- entry['tags'] = convert_to_tag_list_of_dicts(
- request.POST.get('tags'))
+ # Process the user's folksonomy "tags"
+ entry['tags'] = convert_to_tag_list_of_dicts(
+ request.POST.get('tags'))
- # Generate a slug from the title
- entry.generate_slug()
+ # Generate a slug from the title
+ entry.generate_slug()
- # Now store generate the queueing related filename
- queue_filepath = request.app.queue_store.get_unique_filepath(
- ['media_entries',
- unicode(entry._id),
- secure_filename(filename)])
- # queue appropriately
- queue_file = request.app.queue_store.get_file(
- queue_filepath, 'wb')
+ # Now store generate the queueing related filename
+ queue_filepath = request.app.queue_store.get_unique_filepath(
+ ['media_entries',
+ unicode(entry._id),
+ secure_filename(filename)])
- with queue_file:
- queue_file.write(request.POST['file'].file.read())
+ # queue appropriately
+ queue_file = request.app.queue_store.get_file(
+ queue_filepath, 'wb')
- # Add queued filename to the entry
- entry['queued_media_file'] = queue_filepath
+ with queue_file:
+ queue_file.write(request.POST['file'].file.read())
- # We generate this ourselves so we know what the taks id is for
- # retrieval later.
+ # Add queued filename to the entry
+ entry['queued_media_file'] = queue_filepath
- # (If we got it off the task's auto-generation, there'd be
- # a risk of a race condition when we'd save after sending
- # off the task)
- task_id = unicode(uuid.uuid4())
- entry['queued_task_id'] = task_id
+ # We generate this ourselves so we know what the taks id is for
+ # retrieval later.
- # Save now so we have this data before kicking off processing
- entry.save(validate=True)
+ # (If we got it off the task's auto-generation, there'd be
+ # a risk of a race condition when we'd save after sending
+ # off the task)
+ task_id = unicode(uuid.uuid4())
+ entry['queued_task_id'] = task_id
- # Pass off to processing
- #
- # (... don't change entry after this point to avoid race
- # conditions with changes to the document via processing code)
- try:
- process_media.apply_async(
- [unicode(entry._id)], {},
- task_id=task_id)
- except BaseException as exc:
- # The purpose of this section is because when running in "lazy"
- # or always-eager-with-exceptions-propagated celery mode that
- # the failure handling won't happen on Celery end. Since we
- # expect a lot of users to run things in this way we have to
- # capture stuff here.
- #
- # ... not completely the diaper pattern because the
- # exception is re-raised :)
- mark_entry_failed(entry._id, exc)
- # re-raise the exception
- raise
-
- add_message(request, SUCCESS, _('Woohoo! Submitted!'))
+ # Save now so we have this data before kicking off processing
+ entry.save(validate=True)
- return redirect(request, "mediagoblin.user_pages.user_home",
- user=request.user['username'])
+ # Pass off to processing
+ #
+ # (... don't change entry after this point to avoid race
+ # conditions with changes to the document via processing code)
+ process_media = registry.tasks[ProcessMedia.name]
+ try:
+ process_media.apply_async(
+ [unicode(entry._id)], {},
+ task_id=task_id)
+ except BaseException as exc:
+ # The purpose of this section is because when running in "lazy"
+ # or always-eager-with-exceptions-propagated celery mode that
+ # the failure handling won't happen on Celery end. Since we
+ # expect a lot of users to run things in this way we have to
+ # capture stuff here.
+ #
+ # ... not completely the diaper pattern because the
+ # exception is re-raised :)
+ mark_entry_failed(entry._id, exc)
+ # re-raise the exception
+ raise
+
+ add_message(request, SUCCESS, _('Woohoo! Submitted!'))
+
+ return redirect(request, "mediagoblin.user_pages.user_home",
+ user=request.user['username'])
+ except InvalidFileType, exc:
+ submit_form.file.errors.append(
+ _(u'Invalid file type.'))
return render_to_response(
request,
diff --git a/mediagoblin/templates/mediagoblin/auth/change_fp.html b/mediagoblin/templates/mediagoblin/auth/change_fp.html
index 53186cec..5677949c 100644
--- a/mediagoblin/templates/mediagoblin/auth/change_fp.html
+++ b/mediagoblin/templates/mediagoblin/auth/change_fp.html
@@ -30,7 +30,7 @@
{{ wtforms_util.render_divs(cp_form) }}
<div class="form_submit_buttons">
- <input type="submit" value="submit" class="button"/>
+ <input type="submit" value="{% trans %}Submit{% endtrans %}" class="button_form"/>
</div>
</div>
diff --git a/mediagoblin/templates/mediagoblin/auth/forgot_password.html b/mediagoblin/templates/mediagoblin/auth/forgot_password.html
index 9b821426..41940742 100644
--- a/mediagoblin/templates/mediagoblin/auth/forgot_password.html
+++ b/mediagoblin/templates/mediagoblin/auth/forgot_password.html
@@ -27,7 +27,7 @@
<h1>{% trans %}Recover password{% endtrans %}</h1>
{{ wtforms_util.render_divs(fp_form) }}
<div class="form_submit_buttons">
- <input type="submit" value="{% trans %}Send instructions{% endtrans %}" class="button"/>
+ <input type="submit" value="{% trans %}Send instructions{% endtrans %}" class="button_form"/>
</div>
</div>
</form>
diff --git a/mediagoblin/templates/mediagoblin/auth/login.html b/mediagoblin/templates/mediagoblin/auth/login.html
index 756f67c0..c3807e5f 100644
--- a/mediagoblin/templates/mediagoblin/auth/login.html
+++ b/mediagoblin/templates/mediagoblin/auth/login.html
@@ -42,10 +42,10 @@
{% trans %}Forgot your password?{% endtrans %}</a>
</p>
<div class="form_submit_buttons">
- <input type="submit" value="{% trans %}Log in{% endtrans %}" class="button"/>
+ <input type="submit" value="{% trans %}Log in{% endtrans %}" class="button_form"/>
</div>
{% if next %}
- <input type="hidden" name="next" value="{{ next }}" class="button"
+ <input type="hidden" name="next" value="{{ next }}" class="button_form"
style="display: none;"/>
{% endif %}
</div>
diff --git a/mediagoblin/templates/mediagoblin/auth/register.html b/mediagoblin/templates/mediagoblin/auth/register.html
index 25b68058..a0d0a277 100644
--- a/mediagoblin/templates/mediagoblin/auth/register.html
+++ b/mediagoblin/templates/mediagoblin/auth/register.html
@@ -29,7 +29,7 @@
{{ csrf_token }}
<div class="form_submit_buttons">
<input type="submit" value="{% trans %}Create{% endtrans %}"
- class="button" />
+ class="button_form" />
</div>
</div>
</form>
diff --git a/mediagoblin/templates/mediagoblin/base.html b/mediagoblin/templates/mediagoblin/base.html
index 64fafb73..29639026 100644
--- a/mediagoblin/templates/mediagoblin/base.html
+++ b/mediagoblin/templates/mediagoblin/base.html
@@ -28,6 +28,8 @@
href="{{ request.staticdirect('/css/extlib/960_16_col.css') }}"/>
<link rel="stylesheet" type="text/css"
href="{{ request.staticdirect('/css/base.css') }}"/>
+ <link rel="stylesheet" type="text/css"
+ href="{{ request.staticdirect('/css/video-js.css') }}"/>
<link rel="shortcut icon"
href="{{ request.staticdirect('/images/goblin.ico') }}" />
{% block mediagoblin_head %}
@@ -47,7 +49,7 @@
alt="{% trans %}MediaGoblin logo{% endtrans %}" /></a>
{% endblock %}
{% if request.user and request.user['status'] == 'active' %}
- <a class="header_submit"
+ <a class="button_action"
href="{{ request.urlgen('mediagoblin.submit.start') }}">
{% trans %}Submit media{% endtrans %}
</a>
@@ -59,8 +61,8 @@
{% if request.user.status == "needs_email_verification" %}
<a href="{{ request.urlgen('mediagoblin.user_pages.user_home',
user=request.user['username']) }}"
- class="header_submit">
- {% trans %}verify your email!{% endtrans %}</a>
+ class="button_action_highlight">
+ {% trans %}Verify your email!{% endtrans %}</a>
{% endif %}
<a href="{{ request.urlgen('mediagoblin.user_pages.user_home',
diff --git a/mediagoblin/templates/mediagoblin/edit/attachments.html b/mediagoblin/templates/mediagoblin/edit/attachments.html
index d8b55f58..6a5ab896 100644
--- a/mediagoblin/templates/mediagoblin/edit/attachments.html
+++ b/mediagoblin/templates/mediagoblin/edit/attachments.html
@@ -20,7 +20,7 @@
{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %}
{% block mediagoblin_content %}
<form action="{{ request.urlgen('mediagoblin.edit.attachments',
- user= media.uploader().username,
+ user= media.get_uploader().username,
media= media._id) }}"
method="POST" enctype="multipart/form-data">
<div class="grid_8 prefix_1 suffix_1 edit_box form_box">
@@ -48,7 +48,7 @@
{{ wtforms_util.render_divs(form) }}
<div class="form_submit_buttons">
<a href="{{ media.url_for_self(request.urlgen) }}">Cancel</a>
- <input type="submit" value="Save changes" class="button" />
+ <input type="submit" value="Save changes" class="button_form" />
{{ csrf_token }}
</div>
</div>
diff --git a/mediagoblin/templates/mediagoblin/edit/edit.html b/mediagoblin/templates/mediagoblin/edit/edit.html
index b4b3be85..aa46af3d 100644
--- a/mediagoblin/templates/mediagoblin/edit/edit.html
+++ b/mediagoblin/templates/mediagoblin/edit/edit.html
@@ -22,7 +22,7 @@
{% block mediagoblin_content %}
<form action="{{ request.urlgen('mediagoblin.edit.edit_media',
- user= media.uploader().username,
+ user= media.get_uploader().username,
media= media._id) }}"
method="POST" enctype="multipart/form-data">
<div class="grid_8 prefix_1 suffix_1 edit_box form_box">
@@ -34,7 +34,7 @@
{{ wtforms_util.render_divs(form) }}
<div class="form_submit_buttons">
<a href="{{ media.url_for_self(request.urlgen) }}">{% trans %}Cancel{% endtrans %}</a>
- <input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button" />
+ <input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button_form" />
{{ csrf_token }}
</div>
</div>
diff --git a/mediagoblin/templates/mediagoblin/edit/edit_profile.html b/mediagoblin/templates/mediagoblin/edit/edit_profile.html
index 93b2a792..bf8fe5c1 100644
--- a/mediagoblin/templates/mediagoblin/edit/edit_profile.html
+++ b/mediagoblin/templates/mediagoblin/edit/edit_profile.html
@@ -32,7 +32,7 @@
</h1>
{{ wtforms_util.render_divs(form) }}
<div class="form_submit_buttons">
- <input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button" />
+ <input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button_form" />
{{ csrf_token }}
</div>
</div>
diff --git a/mediagoblin/templates/mediagoblin/media_displays/image.html b/mediagoblin/templates/mediagoblin/media_displays/image.html
new file mode 100644
index 00000000..ad60fa94
--- /dev/null
+++ b/mediagoblin/templates/mediagoblin/media_displays/image.html
@@ -0,0 +1 @@
+{% extends 'mediagoblin/user_pages/media.html' %}
diff --git a/mediagoblin/templates/mediagoblin/media_displays/video.html b/mediagoblin/templates/mediagoblin/media_displays/video.html
new file mode 100644
index 00000000..5b8ec789
--- /dev/null
+++ b/mediagoblin/templates/mediagoblin/media_displays/video.html
@@ -0,0 +1,25 @@
+{% extends 'mediagoblin/user_pages/media.html' %}
+{% block mediagoblin_media %}
+ <div class="video-player" style="position: relative;">
+ <video class="video-js vjs-default-skin"
+ width="{{ media.media_data.video.width }}"
+ height="{{ media.media_data.video.height }}"
+ controls="controls"
+ preload="auto"
+ data-setup="">
+ <source src="{{ request.app.public_store.file_url(
+ media['media_files']['webm_640']) }}"
+ type="video/webm; codecs=&quot;vp8, vorbis&quot;" />
+ </video>
+ </div>
+ {% if 'original' in media.media_files %}
+ <p>
+ <a href="{{ request.app.public_store.file_url(
+ media['media_files']['original']) }}">
+ {%- trans -%}
+ Original
+ {%- endtrans -%}
+ </a>
+ </p>
+ {% endif %}
+{% endblock %}
diff --git a/mediagoblin/templates/mediagoblin/root.html b/mediagoblin/templates/mediagoblin/root.html
index 43d973d1..0f769f2f 100644
--- a/mediagoblin/templates/mediagoblin/root.html
+++ b/mediagoblin/templates/mediagoblin/root.html
@@ -25,14 +25,14 @@
{% else %}
<div class="grid_11 alpha">
<h1>{% trans %}Hi there, welcome to this MediaGoblin site!{% endtrans %}</h1>
- <p>{% trans %}Your finest source for all goblin-related media.{% endtrans %}</p>
+ <p>{% trans %}This site is running <a href="http://mediagoblin.org">MediaGoblin</a>, an extraordinarily great piece of media hosting software.{% endtrans %}</p>
<p>{% trans %}To add your own media, place comments, save your favourites and more, you can log in with your MediaGoblin account.{% endtrans %}</p>
{% if allow_registration %}
<p>{% trans %}Don't have one yet? It's easy!{% endtrans %}</p>
{% trans register_url=request.urlgen('mediagoblin.auth.register') -%}
- <a class="header_submit_highlight" href="{{ register_url }}">Create an account at this site</a>
+ <a class="button_action_highlight" href="{{ register_url }}">Create an account at this site</a>
or
- <a class="header_submit" href="http://wiki.mediagoblin.org/HackingHowto">Set up MediaGoblin on your own server</a>
+ <a class="button_action" href="http://wiki.mediagoblin.org/HackingHowto">Set up MediaGoblin on your own server</a>
{%- endtrans %}
{% endif %}
</div>
diff --git a/mediagoblin/templates/mediagoblin/submit/start.html b/mediagoblin/templates/mediagoblin/submit/start.html
index 29b01181..1a0dd4b7 100644
--- a/mediagoblin/templates/mediagoblin/submit/start.html
+++ b/mediagoblin/templates/mediagoblin/submit/start.html
@@ -27,7 +27,7 @@
{{ wtforms_util.render_divs(submit_form) }}
<div class="form_submit_buttons">
{{ csrf_token }}
- <input type="submit" value="{% trans %}Submit{% endtrans %}" class="button" />
+ <input type="submit" value="{% trans %}Submit{% endtrans %}" class="button_form" />
</div>
</div>
</form>
diff --git a/mediagoblin/templates/mediagoblin/test_submit.html b/mediagoblin/templates/mediagoblin/test_submit.html
index 190b9ac3..38be8efc 100644
--- a/mediagoblin/templates/mediagoblin/test_submit.html
+++ b/mediagoblin/templates/mediagoblin/test_submit.html
@@ -25,7 +25,7 @@
{{ wtforms_util.render_table(image_form) }}
<tr>
<td></td>
- <td><input type="submit" value="submit" class="button" /></td>
+ <td><input type="submit" value="submit" class="button_form" /></td>
{{ csrf_token }}
</tr>
</table>
diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html
index de5db815..c7818012 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/media.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/media.html
@@ -23,9 +23,9 @@
{% block title %}{{ media.title }} &mdash; {{ super() }}{% endblock %}
{% block mediagoblin_content %}
- {% if media %}
- <div class="grid_11 alpha">
- <div class="media_image_container">
+ <div class="grid_11 alpha">
+ <div class="media_image_container">
+ {% block mediagoblin_media %}
{% set display_media = request.app.public_store.file_url(
media.get_display_media(media.media_files)) %}
@@ -44,127 +44,118 @@
src="{{ display_media }}"
alt="Image for {{ media.title }}" />
{% endif %}
- </div>
+ {% endblock %}
+ </div>
- <h2 class="media_title">
- {{ media.title }}
- </h2>
- {% autoescape False %}
- <p>{{ media.description_html }}</p>
- {% endautoescape %}
- <p class="media_uploader">
- {% trans date=media.created.strftime("%Y-%m-%d"),
- user_url=request.urlgen(
- 'mediagoblin.user_pages.user_home',
- user=media.uploader().username),
- username=media.uploader().username -%}
- By <a href="{{ user_url }}">{{ username }}</a> on {{ date }}
- {%- endtrans %}
- </p>
- <h3></h3>
- {% if request.user and comments.count() %}
- <p><a href="#comment_form">{% trans %}Post a comment{% endtrans %}</a></p>
- {% endif %}
- {% if comments %}
- {% for comment in comments %}
- {% set comment_author = comment.author() %}
- {% if pagination.active_id == comment._id %}
- <div class="comment_wrapper comment_active" id="comment-{{ comment._id }}">
- <a name="comment" id="comment"></a>
- {% else %}
- <div class="comment_wrapper" id="comment-{{ comment._id }}">
- {% endif %}
+ <h2 class="media_title">
+ {{ media.title }}
+ </h2>
+ {% autoescape False %}
+ <p>{{ media.description_html }}</p>
+ {% endautoescape %}
+ <p class="media_uploader">
+ {% trans date=media.created.strftime("%Y-%m-%d"),
+ user_url=request.urlgen(
+ 'mediagoblin.user_pages.user_home',
+ user=media.get_uploader().username),
+ username=media.get_uploader().username -%}
+ By <a href="{{ user_url }}">{{ username }}</a> on {{ date }}
+ {%- endtrans %}
+ </p>
+ <h3></h3>
+ {% if request.user and comments.count() %}
+ <p><a href="#comment_form">{% trans %}Post a comment{% endtrans %}</a></p>
+ {% endif %}
+ {% if comments %}
+ {% for comment in comments %}
+ {% set comment_author = comment.author() %}
+ {% if pagination.active_id == comment._id %}
+ <div class="comment_wrapper comment_active" id="comment-{{ comment._id }}">
+ <a name="comment" id="comment"></a>
+ {% else %}
+ <div class="comment_wrapper" id="comment-{{ comment._id }}">
+ {% endif %}
- <div class="comment_content">{% autoescape False %}{{ comment.content_html }}
- {% endautoescape %}
- <img src="{{ request.staticdirect('/images/icon_comment.png') }}" />
- <a href="{{ request.urlgen('mediagoblin.user_pages.user_home',
- user = comment_author['username']) }}">
- {{ comment_author['username'] }}</a>
- {% trans %}at{% endtrans %}
- <a href="{{ request.urlgen('mediagoblin.user_pages.media_home.view_comment',
- comment = comment._id,
- user = media.uploader().username,
- media = media._id) }}#comment">
- {{ comment.created.strftime("%I:%M%p %Y-%m-%d") }}
- </a>
- </div>
+ <div class="comment_content">{% autoescape False %}{{ comment.content_html }}
+ {% endautoescape %}
+ <img src="{{ request.staticdirect('/images/icon_comment.png') }}" />
+ <a href="{{ request.urlgen('mediagoblin.user_pages.user_home',
+ user = comment_author['username']) }}">
+ {{ comment_author['username'] }}</a>
+ {% trans %}at{% endtrans %}
+ <a href="{{ request.urlgen('mediagoblin.user_pages.media_home.view_comment',
+ comment = comment._id,
+ user = media.get_uploader().username,
+ media = media._id) }}#comment">
+ {{ comment.created.strftime("%I:%M%p %Y-%m-%d") }}
+ </a>
</div>
- {% endfor %}
+ </div>
+ {% endfor %}
- {% if request.user %}
- <form action="{{ request.urlgen('mediagoblin.user_pages.media_post_comment',
- user= media.uploader().username,
- media=media._id) }}" method="POST">
- {{ wtforms_util.render_divs(comment_form) }}
- <div class="form_submit_buttons">
- <input type="submit" value="{% trans %}Post comment!{% endtrans %}" class="button" />
- {{ csrf_token }}
- </div>
- </form>
- {% endif %}
+ {% if request.user %}
+ <form action="{{ request.urlgen('mediagoblin.user_pages.media_post_comment',
+ user= media.get_uploader().username,
+ media=media._id) }}" method="POST">
+ {{ wtforms_util.render_divs(comment_form) }}
+ <div class="form_submit_buttons">
+ <input type="submit" value="{% trans %}Post comment!{% endtrans %}" class="button_form" />
+ {{ csrf_token }}
+ </div>
+ </form>
+ {% endif %}
- {{ render_pagination(request, pagination,
- request.urlgen('mediagoblin.user_pages.media_home',
- user = media.uploader().username,
- media = media._id)) }}
- </div>
- {% endif %}
+ {{ render_pagination(request, pagination,
+ request.urlgen('mediagoblin.user_pages.media_home',
+ user = media.get_uploader().username,
+ media = media._id)) }}
+ </div>
+ {% endif %}
- <div class="grid_5 omega">
- {% include "mediagoblin/utils/prev_next.html" %}
+ <div class="grid_5 omega">
+ {% include "mediagoblin/utils/prev_next.html" %}
- {% if media['uploader'] == request.user._id or
- request.user['is_admin'] %}
- <h3>{% trans %}Actions{% endtrans %}</h3>
- <p>
- {% set edit_url = request.urlgen('mediagoblin.edit.edit_media',
- user= media.uploader().username,
- media= media.slug) %}
- <a href="{{ edit_url }}"
- ><img src="{{ request.staticdirect('/images/icon_edit.png') }}"
- class="media_icon" /></a>
- <a href="{{ edit_url }}">{% trans %}edit{% endtrans %}</a>
- </p>
- <p>
- {% set delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete',
- user= media.uploader().username,
- media= media.slug) %}
- <a href="{{ delete_url }}"
- ><img src="{{ request.staticdirect('/images/icon_delete.png') }}"
- class="media_icon" /></a>
- <a href="{{ delete_url }}">{% trans %}delete{% endtrans %}</a>
- </p>
- {% endif %}
+ {% if media['uploader'] == request.user._id or
+ request.user['is_admin'] %}
+ <p>
+ {% set edit_url = request.urlgen('mediagoblin.edit.edit_media',
+ user= media.get_uploader().username,
+ media= media.slug) %}
+ <a href="{{ edit_url }}">{% trans %}Edit{% endtrans %}</a>
+ </p>
+ <p>
+ {% set delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete',
+ user= media.get_uploader().username,
+ media= media.slug) %}
+ <a href="{{ delete_url }}">{% trans %}Delete{% endtrans %}</a>
+ </p>
+ {% endif %}
- {% if media.attachment_files|count %}
- <h3>Attachments</h3>
- <ul>
- {% for attachment in media.attachment_files %}
- <li>
- <a href="{{ request.app.public_store.file_url(attachment.filepath) }}">
- {{ attachment.name }}
- </a>
- </li>
- {% endfor %}
- </ul>
- {% endif %}
+ {% if media.attachment_files|count %}
+ <h3>Attachments</h3>
+ <ul>
+ {% for attachment in media.attachment_files %}
+ <li>
+ <a href="{{ request.app.public_store.file_url(attachment.filepath) }}">
+ {{ attachment.name }}
+ </a>
+ </li>
+ {% endfor %}
+ </ul>
+ {% endif %}
- {% if app_config['allow_attachments']
- and (media['uploader'] == request.user._id
- or request.user['is_admin']) %}
- <p>
- <a href="{{ request.urlgen('mediagoblin.edit.attachments',
- user=media.uploader().username,
- media=media._id) }}">Add attachment</a>
- </p>
- {% endif %}
+ {% if app_config['allow_attachments']
+ and (media['uploader'] == request.user._id
+ or request.user['is_admin']) %}
+ <p>
+ <a href="{{ request.urlgen('mediagoblin.edit.attachments',
+ user=media.get_uploader().username,
+ media=media._id) }}">Add attachment</a>
+ </p>
+ {% endif %}
- {% if media.tags %}
- {% include "mediagoblin/utils/tags.html" %}
- {% endif %}
- </div>
- {% else %}
- <p>{% trans %}Sorry, no such media found.{% endtrans %}<p/>
- {% endif %}
+ {% if media.tags %}
+ {% include "mediagoblin/utils/tags.html" %}
+ {% endif %}
+ </div>
{% endblock %}
diff --git a/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html b/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
index 0f650ab6..e36891d6 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
@@ -22,7 +22,7 @@
{% block mediagoblin_content %}
<form action="{{ request.urlgen('mediagoblin.user_pages.media_confirm_delete',
- user=media.uploader().username,
+ user=media.get_uploader().username,
media=media.slug) }}"
method="POST" enctype="multipart/form-data">
<div class="grid_8 prefix_1 suffix_1 edit_box form_box">
@@ -47,7 +47,7 @@
<div class="form_submit_buttons">
{# 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" />
+ <input type="submit" value="{% trans %}Delete Permanently{% endtrans %}" class="button_form" />
{{ csrf_token }}
</div>
</div>
diff --git a/mediagoblin/templates/mediagoblin/user_pages/user.html b/mediagoblin/templates/mediagoblin/user_pages/user.html
index d6a9fe1f..5a39aaa5 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/user.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/user.html
@@ -62,7 +62,7 @@
<p>{% trans %}In case it doesn't:{% endtrans %}</p>
<a href="{{ request.urlgen('mediagoblin.auth.resend_verification') }}"
- class="button">{% trans %}Resend verification email{% endtrans %}</a>
+ class="button_action_highlight">{% trans %}Resend verification email{% endtrans %}</a>
</div>
{% else %}
{# if the user is not you, but still needs to verify their email #}
@@ -97,7 +97,7 @@
</p>
<a href="{{ request.urlgen('mediagoblin.edit.profile') }}?username={{
user.username }}"
- class="header_submit">
+ class="button_action">
{%- trans %}Edit profile{% endtrans -%}
</a>
</div>
@@ -147,7 +147,7 @@
This is where your media will appear, but you don't seem to have added anything yet.
{%- endtrans %}
</p>
- <a class="header_submit"
+ <a class="button_action"
href="{{ request.urlgen('mediagoblin.submit.start') }}">
{%- trans %}Add media{% endtrans -%}
</a>
diff --git a/mediagoblin/templates/mediagoblin/utils/pagination.html b/mediagoblin/templates/mediagoblin/utils/pagination.html
index 84336103..3c12f93c 100644
--- a/mediagoblin/templates/mediagoblin/utils/pagination.html
+++ b/mediagoblin/templates/mediagoblin/utils/pagination.html
@@ -47,7 +47,7 @@
<a href="{{ next_url }}"><img class="pagination_arrow" src="{{ request.staticdirect('/images/pagination_right.png') }}" alt="Next page" /></a>
{% endif %}
<br />
- Go to page:
+ {% trans %}Go to page:{% endtrans %}
{%- for page in pagination.iter_pages() %}
{% if page %}
{% if page != pagination.page %}
diff --git a/mediagoblin/templates/mediagoblin/utils/prev_next.html b/mediagoblin/templates/mediagoblin/utils/prev_next.html
index 75903076..3363891b 100644
--- a/mediagoblin/templates/mediagoblin/utils/prev_next.html
+++ b/mediagoblin/templates/mediagoblin/utils/prev_next.html
@@ -25,23 +25,23 @@
{# There are no previous entries for the very first media entry #}
{% if prev_entry_url %}
<a class="navigation_button navigation_left" href="{{ prev_entry_url }}">
- <img src="{{ request.staticdirect('/images/navigation_left.png') }}" alt="Previous image" />
+ &larr; newer
</a>
{% else %}
{# This is the first entry. display greyed-out 'previous' image #}
<p class="navigation_button navigation_left">
- <img src="{{ request.staticdirect('/images/navigation_end.png') }}" alt="No previous images" />
+ &larr; newer
</p>
{% endif %}
{# Likewise, this could be the very last media entry #}
{% if next_entry_url %}
<a class="navigation_button" href="{{ next_entry_url }}">
- <img src="{{ request.staticdirect('/images/navigation_right.png') }}" alt="Next image" />
+ older &rarr;
</a>
{% else %}
{# This is the last entry. display greyed-out 'next' image #}
<p class="navigation_button">
- <img src="{{ request.staticdirect('/images/navigation_end.png') }}" alt="No following images" />
+ older &rarr;
</p>
{% endif %}
</div>
diff --git a/mediagoblin/templates/mediagoblin/utils/tags.html b/mediagoblin/templates/mediagoblin/utils/tags.html
index b3211bd9..c7dfc8eb 100644
--- a/mediagoblin/templates/mediagoblin/utils/tags.html
+++ b/mediagoblin/templates/mediagoblin/utils/tags.html
@@ -17,13 +17,25 @@
#}
{% block tags_content -%}
- <h3>Tags</h3>
- <ul class="mediaentry_tags">
+ <p>{% trans %}Tagged with{% endtrans %}
{% for tag in media.tags %}
- <li class="tag">
+ {% if loop.last %}
+ {# the 'and' should only appear if there is more than one tag #}
+ {% if media.tags|length > 1 %}
+ {% trans %}and{% endtrans %}
+ {% endif %}
<a href="{{ request.urlgen(
- 'mediagoblin.listings.tags_listing',
- tag=tag['slug']) }}">{{ tag['name'] }}</a></li>
+ 'mediagoblin.listings.tags_listing',
+ tag=tag['slug']) }}">{{ tag['name'] }}</a>.
+ {% elif loop.revindex == 2 %}
+ <a href="{{ request.urlgen(
+ 'mediagoblin.listings.tags_listing',
+ tag=tag['slug']) }}">{{ tag['name'] }}</a>
+ {% else %}
+ <a href="{{ request.urlgen(
+ 'mediagoblin.listings.tags_listing',
+ tag=tag['slug']) }}">{{ tag['name'] }}</a>,
+ {% endif %}
{% endfor %}
- </ul>
+ </p>
{% endblock %}
diff --git a/mediagoblin/templates/mediagoblin/utils/wtforms.html b/mediagoblin/templates/mediagoblin/utils/wtforms.html
index 39dca7cc..cc30388f 100644
--- a/mediagoblin/templates/mediagoblin/utils/wtforms.html
+++ b/mediagoblin/templates/mediagoblin/utils/wtforms.html
@@ -18,7 +18,9 @@
{# Generically render a field #}
{% macro render_field_div(field) %}
- <p class="form_field_label"><label for="{{ field.name }}">{{ _(field.label.text) }}</label></p>
+ {% if field.label.text -%}
+ <p class="form_field_label"><label for="{{ field.name }}">{{ _(field.label.text) }}</label></p>
+ {%- endif %}
<div class="form_field_input">
{{ field }}
{%- if field.errors -%}
diff --git a/mediagoblin/tests/test_auth.py b/mediagoblin/tests/test_auth.py
index 153c6e53..2faf0f25 100644
--- a/mediagoblin/tests/test_auth.py
+++ b/mediagoblin/tests/test_auth.py
@@ -20,7 +20,7 @@ import datetime
from nose.tools import assert_equal
from mediagoblin.auth import lib as auth_lib
-from mediagoblin.tests.tools import setup_fresh_app
+from mediagoblin.tests.tools import setup_fresh_app, fixture_add_user
from mediagoblin import mg_globals
from mediagoblin.tools import template, mail
@@ -280,16 +280,16 @@ def test_register_views(test_app):
template.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'
+ new_user._id), status=404)
+ assert_equal(response.status, '404 Not Found')
## Try using an expired token to change password, shouldn't work
template.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'
+ response = test_app.get("%s?%s" % (path, get_params), status=404)
+ assert_equal(response.status, '404 Not Found')
new_user['fp_token_expire'] = real_token_expiration
new_user.save()
@@ -332,11 +332,7 @@ def test_authentication_views(test_app):
Test logging in and logging out
"""
# Make a new user
- test_user = mg_globals.database.User()
- test_user['username'] = u'chris'
- test_user['email'] = u'chris@example.com'
- test_user['pw_hash'] = auth_lib.bcrypt_gen_password_hash('toast')
- test_user.save()
+ test_user = fixture_add_user(active_user=False)
# Get login
# ---------
diff --git a/mediagoblin/tests/test_celery_setup.py b/mediagoblin/tests/test_celery_setup.py
index 348a4357..19a9b899 100644
--- a/mediagoblin/tests/test_celery_setup.py
+++ b/mediagoblin/tests/test_celery_setup.py
@@ -50,7 +50,7 @@ def test_setup_celery_from_config():
assert isinstance(fake_celery_module.CELERYD_ETA_SCHEDULER_PRECISION, float)
assert fake_celery_module.CELERY_RESULT_PERSISTENT is True
assert fake_celery_module.CELERY_IMPORTS == [
- 'foo.bar.baz', 'this.is.an.import', 'mediagoblin.process_media']
+ 'foo.bar.baz', 'this.is.an.import', 'mediagoblin.processing']
assert fake_celery_module.CELERY_MONGODB_BACKEND_SETTINGS == {
'database': 'mediagoblin'}
assert fake_celery_module.CELERY_RESULT_BACKEND == 'mongodb'
@@ -74,7 +74,7 @@ def test_setup_celery_from_config():
assert isinstance(fake_celery_module.CELERYD_ETA_SCHEDULER_PRECISION, float)
assert fake_celery_module.CELERY_RESULT_PERSISTENT is False
assert fake_celery_module.CELERY_IMPORTS == [
- 'baz.bar.foo', 'import.is.a.this', 'mediagoblin.process_media']
+ 'baz.bar.foo', 'import.is.a.this', 'mediagoblin.processing']
assert fake_celery_module.CELERY_MONGODB_BACKEND_SETTINGS == {
'database': 'captain_lollerskates',
'host': 'mongodb.example.org',
diff --git a/mediagoblin/tests/test_csrf_middleware.py b/mediagoblin/tests/test_csrf_middleware.py
index 691f10b9..c8fca23a 100644
--- a/mediagoblin/tests/test_csrf_middleware.py
+++ b/mediagoblin/tests/test_csrf_middleware.py
@@ -27,7 +27,7 @@ from mediagoblin import mg_globals
def test_csrf_cookie_set(test_app):
cookie_name = mg_globals.app_config['csrf_cookie_name']
-
+
# get login page
response = test_app.get('/auth/login/')
@@ -69,3 +69,22 @@ def test_csrf_token_must_match(test_app):
mg_globals.app_config['csrf_cookie_name'])},
extra_environ={'gmg.verify_csrf': True}).\
status_int == 200
+
+@setup_fresh_app
+def test_csrf_exempt(test_app):
+
+ # monkey with the views to decorate a known endpoint
+ import mediagoblin.auth.views
+ from mediagoblin.meddleware.csrf import csrf_exempt
+
+ mediagoblin.auth.views.login = csrf_exempt(
+ mediagoblin.auth.views.login
+ )
+
+ # construct a request with no cookie or form token
+ assert test_app.post('/auth/login/',
+ extra_environ={'gmg.verify_csrf': True},
+ expect_errors=False).status_int == 200
+
+ # restore the CSRF protection in case other tests expect it
+ mediagoblin.auth.views.login.csrf_enabled = True
diff --git a/mediagoblin/tests/test_edit.py b/mediagoblin/tests/test_edit.py
new file mode 100644
index 00000000..c29ddfe9
--- /dev/null
+++ b/mediagoblin/tests/test_edit.py
@@ -0,0 +1,99 @@
+# 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 import mg_globals
+from mediagoblin.tests.tools import setup_fresh_app, fixture_add_user
+from mediagoblin.tools import template
+from mediagoblin.auth.lib import bcrypt_check_password
+
+
+@setup_fresh_app
+def test_change_password(test_app):
+ """Test changing password correctly and incorrectly"""
+ # set up new user
+ test_user = fixture_add_user()
+
+ test_app.post(
+ '/auth/login/', {
+ 'username': u'chris',
+ 'password': 'toast'})
+
+ # test that the password can be changed
+ # template.clear_test_template_context()
+ test_app.post(
+ '/edit/profile/', {
+ 'bio': u'',
+ 'url': u'',
+ 'old_password': 'toast',
+ 'new_password': '123456',
+ 'confirm_password': '123456'})
+
+ # test_user has to be fetched again in order to have the current values
+ test_user = mg_globals.database.User.one({'username': 'chris'})
+
+ assert bcrypt_check_password('123456', test_user['pw_hash'])
+
+ # test that the password cannot be changed if the given old_password
+ # is wrong
+ # template.clear_test_template_context()
+ test_app.post(
+ '/edit/profile/', {
+ 'bio': u'',
+ 'url': u'',
+ 'old_password': 'toast',
+ 'new_password': '098765',
+ 'confirm_password': '098765'})
+
+ test_user = mg_globals.database.User.one({'username': 'chris'})
+
+ assert not bcrypt_check_password('098765', test_user['pw_hash'])
+
+
+@setup_fresh_app
+def change_bio_url(test_app):
+ """Test changing bio and URL"""
+ # set up new user
+ test_user = fixture_add_user()
+
+ # test changing the bio and the URL properly
+ test_app.post(
+ '/edit/profile/', {
+ 'bio': u'I love toast!',
+ 'url': u'http://dustycloud.org/'})
+
+ test_user = mg_globals.database.User.one({'username': 'chris'})
+
+ assert test_user['bio'] == u'I love toast!'
+ assert test_user['url'] == u'http://dustycloud.org/'
+
+ # test changing the bio and the URL inproperly
+ too_long_bio = 150 * 'T' + 150 * 'o' + 150 * 'a' + 150 * 's' + 150* 't'
+
+ test_app.post(
+ '/edit/profile/', {
+ # more than 500 characters
+ 'bio': too_long_bio,
+ 'url': 'this-is-no-url'})
+
+ test_user = mg_globals.database.User.one({'username': 'chris'})
+
+ context = template.TEMPLATE_TEST_CONTEXT['mediagoblin/edit/edit_profile.html']
+ form = context['edit_profile_form']
+
+ assert form.bio.errors == [u'Field must be between 0 and 500 characters long.']
+ assert form.url.errors == [u'Improperly formed URL']
+
+ # test changing the url inproperly
diff --git a/mediagoblin/tests/test_mgoblin_app.ini b/mediagoblin/tests/test_mgoblin_app.ini
index f979e810..2525a4f9 100644
--- a/mediagoblin/tests/test_mgoblin_app.ini
+++ b/mediagoblin/tests/test_mgoblin_app.ini
@@ -5,7 +5,6 @@ email_debug_mode = true
db_name = __mediagoblin_tests__
# tag parsing
-tags_delimiter = ","
tags_max_length = 50
# Celery shouldn't be set up by the application as it's setup via
diff --git a/mediagoblin/middleware/__init__.py b/mediagoblin/tests/test_misc.py
index 05325ee5..09623355 100644
--- a/mediagoblin/middleware/__init__.py
+++ b/mediagoblin/tests/test_misc.py
@@ -14,7 +14,13 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ENABLED_MIDDLEWARE = (
- 'mediagoblin.middleware.noop:NoOpMiddleware',
- 'mediagoblin.middleware.csrf:CsrfMiddleware',
- )
+from nose.tools import assert_equal
+
+from mediagoblin.tests.tools import setup_fresh_app
+
+
+@setup_fresh_app
+def test_404_for_non_existent(test_app):
+ assert_equal(test_app.get('/does-not-exist/',
+ expect_errors=True).status_int,
+ 404)
diff --git a/mediagoblin/tests/test_storage.py b/mediagoblin/tests/test_storage.py
index 46ecb2ec..eab4d032 100644
--- a/mediagoblin/tests/test_storage.py
+++ b/mediagoblin/tests/test_storage.py
@@ -57,6 +57,10 @@ class FakeRemoteStorage(storage.filestorage.BasicFileStorage):
# should force copying to the workbench
local_storage = False
+ def copy_local_to_storage(self, *args, **kwargs):
+ return storage.StorageInterface.copy_local_to_storage(
+ self, *args, **kwargs)
+
def test_storage_system_from_config():
this_storage = storage.storage_system_from_config(
@@ -252,3 +256,26 @@ def test_basic_storage_copy_locally():
this_storage.copy_locally(filepath, new_file_dest)
assert file(new_file_dest).read() == 'Testing this file'
+
+
+def _test_copy_local_to_storage_works(tmpdir, this_storage):
+ local_filename = tempfile.mktemp()
+ with file(local_filename, 'w') as tmpfile:
+ tmpfile.write('haha')
+
+ this_storage.copy_local_to_storage(
+ local_filename, ['dir1', 'dir2', 'copiedto.txt'])
+
+ assert file(
+ os.path.join(tmpdir, 'dir1/dir2/copiedto.txt'),
+ 'r').read() == 'haha'
+
+
+def test_basic_storage_copy_local_to_storage():
+ tmpdir, this_storage = get_tmp_filestorage()
+ _test_copy_local_to_storage_works(tmpdir, this_storage)
+
+
+def test_general_storage_copy_local_to_storage():
+ tmpdir, this_storage = get_tmp_filestorage(fake_remote=True)
+ _test_copy_local_to_storage_works(tmpdir, this_storage)
diff --git a/mediagoblin/tests/test_submission.py b/mediagoblin/tests/test_submission.py
index dec7118b..a3453f2f 100644
--- a/mediagoblin/tests/test_submission.py
+++ b/mediagoblin/tests/test_submission.py
@@ -19,8 +19,8 @@ import pkg_resources
from nose.tools import assert_equal, assert_true, assert_false
-from mediagoblin.auth import lib as auth_lib
-from mediagoblin.tests.tools import setup_fresh_app, get_test_app
+from mediagoblin.tests.tools import setup_fresh_app, get_test_app, \
+ fixture_add_user
from mediagoblin import mg_globals
from mediagoblin.tools import template, common
@@ -45,13 +45,7 @@ class TestSubmission:
# TODO: Possibly abstract into a decorator like:
# @as_authenticated_user('chris')
- test_user = mg_globals.database.User()
- test_user['username'] = u'chris'
- test_user['email'] = u'chris@example.com'
- test_user['email_verified'] = True
- test_user['status'] = u'active'
- test_user['pw_hash'] = auth_lib.bcrypt_gen_password_hash('toast')
- test_user.save()
+ test_user = fixture_add_user()
self.test_user = test_user
@@ -177,7 +171,7 @@ class TestSubmission:
request.urlgen('mediagoblin.user_pages.media_confirm_delete',
# No work: user=media.uploader().username,
user=self.test_user['username'],
- media=media._id),
+ media=media.slug),
# no value means no confirm
{})
@@ -197,7 +191,7 @@ class TestSubmission:
request.urlgen('mediagoblin.user_pages.media_confirm_delete',
# No work: user=media.uploader().username,
user=self.test_user['username'],
- media=media._id),
+ media=media.slug),
{'confirm': 'y'})
response.follow()
@@ -222,7 +216,7 @@ class TestSubmission:
context = template.TEMPLATE_TEST_CONTEXT['mediagoblin/submit/start.html']
form = context['submit_form']
- assert form.file.errors == ['The file doesn\'t seem to be an image!']
+ assert form.file.errors == [u'Invalid file type.']
# NOTE: The following 2 tests will ultimately fail, but they
# *will* pass the initial form submission step. Instead,
@@ -246,7 +240,7 @@ class TestSubmission:
assert_equal(entry['state'], 'failed')
assert_equal(
entry['fail_error'],
- u'mediagoblin.process_media.errors:BadMediaFail')
+ u'mediagoblin.processing:BadMediaFail')
# Test non-supported file with .png extension
# -------------------------------------------
@@ -266,4 +260,4 @@ class TestSubmission:
assert_equal(entry['state'], 'failed')
assert_equal(
entry['fail_error'],
- u'mediagoblin.process_media.errors:BadMediaFail')
+ u'mediagoblin.processing:BadMediaFail')
diff --git a/mediagoblin/tests/test_tags.py b/mediagoblin/tests/test_tags.py
index a05831c9..583c1a55 100644
--- a/mediagoblin/tests/test_tags.py
+++ b/mediagoblin/tests/test_tags.py
@@ -39,11 +39,4 @@ def test_list_of_dicts_conversion(test_app):
# Make sure converting the list of dicts to a string works
assert text.media_tags_as_string([{'name': u'yin', 'slug': u'yin'},
{'name': u'yang', 'slug': u'yang'}]) == \
- u'yin,yang'
-
- # If the tag delimiter is a space then we expect different results
- mg_globals.app_config['tags_delimiter'] = u' '
- assert text.convert_to_tag_list_of_dicts('unicorn ceramic nazi') == [
- {'name': u'unicorn', 'slug': u'unicorn'},
- {'name': u'ceramic', 'slug': u'ceramic'},
- {'name': u'nazi', 'slug': u'nazi'}]
+ u'yin, yang'
diff --git a/mediagoblin/tests/tools.py b/mediagoblin/tests/tools.py
index 420d9ba8..49a3d33e 100644
--- a/mediagoblin/tests/tools.py
+++ b/mediagoblin/tests/tools.py
@@ -26,6 +26,8 @@ from mediagoblin.tools import testing
from mediagoblin.init.config import read_mediagoblin_config
from mediagoblin.decorators import _make_safe
from mediagoblin.db.open import setup_connection_and_db_from_config
+from mediagoblin.meddleware import BaseMeddleware
+from mediagoblin.auth.lib import bcrypt_gen_password_hash
MEDIAGOBLIN_TEST_DB_NAME = u'__mediagoblin_tests__'
@@ -50,9 +52,9 @@ $ CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_tests ./bin/nosetests"""
class BadCeleryEnviron(Exception): pass
-class TestingMiddleware(object):
+class TestingMeddleware(BaseMeddleware):
"""
- Middleware for the Unit tests
+ Meddleware for the Unit tests
It might make sense to perform some tests on all
requests/responses. Or prepare them in a special
@@ -60,7 +62,7 @@ class TestingMiddleware(object):
for being valid html *after* being rendered.
This module is getting inserted at the front of the
- middleware list, which means: requests are handed here
+ meddleware list, which means: requests are handed here
first, responses last. So this wraps up the "normal"
app.
@@ -69,12 +71,6 @@ class TestingMiddleware(object):
create a new method and call it from process_*.
"""
- def __init__(self, mg_app):
- self.app = mg_app
-
- def process_request(self, request):
- pass
-
def process_response(self, request, response):
# All following tests should be for html only!
if response.content_type != "text/html":
@@ -149,11 +145,11 @@ def get_test_app(dump_old_app=True):
test_app = loadapp(
'config:' + TEST_SERVER_CONFIG)
- # Insert the TestingMiddleware, which can do some
+ # Insert the TestingMeddleware, which can do some
# sanity checks on every request/response.
# Doing it this way is probably not the cleanest way.
# We'll fix it, when we have plugins!
- mg_globals.app.middleware.insert(0, TestingMiddleware(mg_globals.app))
+ mg_globals.app.meddleware.insert(0, TestingMeddleware(mg_globals.app))
app = TestApp(test_app)
MGOBLIN_APP = app
@@ -205,3 +201,19 @@ def assert_db_meets_expected(db, expected):
document = collection.find_one({'_id': expected_document['_id']})
assert document is not None # make sure it exists
assert document == expected_document # make sure it matches
+
+
+def fixture_add_user(username = u'chris', password = 'toast',
+ active_user = True):
+ test_user = mg_globals.database.User()
+ test_user.username = username
+ test_user.email = username + u'@example.com'
+ if password is not None:
+ test_user.pw_hash = bcrypt_gen_password_hash(password)
+ if active_user:
+ test_user.email_verified = True
+ test_user.status = u'active'
+
+ test_user.save()
+
+ return test_user
diff --git a/mediagoblin/tools/response.py b/mediagoblin/tools/response.py
index b01d31a2..c905097c 100644
--- a/mediagoblin/tools/response.py
+++ b/mediagoblin/tools/response.py
@@ -30,7 +30,7 @@ def render_404(request):
Render a 404.
"""
return render_to_response(
- request, 'mediagoblin/404.html', {}, status=400)
+ request, 'mediagoblin/404.html', {}, status=404)
def redirect(request, *args, **kwargs):
diff --git a/mediagoblin/tools/template.py b/mediagoblin/tools/template.py
index 0986761b..d0400347 100644
--- a/mediagoblin/tools/template.py
+++ b/mediagoblin/tools/template.py
@@ -21,7 +21,7 @@ from mediagoblin import mg_globals
from mediagoblin import messages
from mediagoblin.tools import common
from mediagoblin.tools.translate import setup_gettext
-from mediagoblin.middleware.csrf import render_csrf_form_token
+from mediagoblin.meddleware.csrf import render_csrf_form_token
SETUP_JINJA_ENVS = {}
@@ -79,7 +79,9 @@ def render_template(request, template_path, context):
template = request.template_env.get_template(
template_path)
context['request'] = request
- context['csrf_token'] = render_csrf_form_token(request)
+ rendered_csrf_token = render_csrf_form_token(request)
+ if rendered_csrf_token is not None:
+ context['csrf_token'] = render_csrf_form_token(request)
rendered = template.render(context)
if common.TESTS_ENABLED:
diff --git a/mediagoblin/tools/text.py b/mediagoblin/tools/text.py
index be1adb00..d576224d 100644
--- a/mediagoblin/tools/text.py
+++ b/mediagoblin/tools/text.py
@@ -43,6 +43,7 @@ HTML_CLEANER = Cleaner(
host_whitelist=(),
whitelist_tags=set([]))
+TAGS_DELIMITER=',';
def clean_html(html):
# clean_html barfs on an empty string
@@ -67,7 +68,7 @@ def convert_to_tag_list_of_dicts(tag_string):
# Split the tag string into a list of tags
for tag in stripped_tag_string.split(
- mg_globals.app_config['tags_delimiter']):
+ TAGS_DELIMITER):
# Ignore empty or duplicate tags
if tag.strip() and tag.strip() not in [t['name'] for t in taglist]:
@@ -85,7 +86,7 @@ def media_tags_as_string(media_entry_tags):
"""
media_tag_string = ''
if media_entry_tags:
- media_tag_string = mg_globals.app_config['tags_delimiter'].join(
+ media_tag_string = (TAGS_DELIMITER+u' ').join(
[tag['name'] for tag in media_entry_tags])
return media_tag_string
diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py
index 25fd2ebb..779394c7 100644
--- a/mediagoblin/user_pages/views.py
+++ b/mediagoblin/user_pages/views.py
@@ -30,6 +30,8 @@ from mediagoblin.decorators import (uses_pagination, get_user_media_entry,
from werkzeug.contrib.atom import AtomFeed
+from mediagoblin.media_types import get_media_manager
+
@uses_pagination
def user_home(request, page):
@@ -120,9 +122,11 @@ def media_home(request, media, page, **kwargs):
comment_form = user_forms.MediaCommentForm(request.POST)
+ media_template_name = get_media_manager(media['media_type'])['display_template']
+
return render_to_response(
request,
- 'mediagoblin/user_pages/media.html',
+ media_template_name,
{'media': media,
'comments': comments,
'pagination': pagination,
@@ -148,13 +152,13 @@ def media_post_comment(request, media):
messages.add_message(
request,
messages.ERROR,
- _("Empty comments are not allowed."))
+ _("Oops, your comment was empty."))
else:
comment.save()
messages.add_message(
request, messages.SUCCESS,
- _('Comment posted!'))
+ _('Your comment has been posted!'))
return exc.HTTPFound(
location=media.url_for_self(request.urlgen))
@@ -169,21 +173,26 @@ def media_confirm_delete(request, media):
if request.method == 'POST' and form.validate():
if form.confirm.data is True:
- username = media.uploader()['username']
+ username = media.get_uploader()['username']
# Delete all files on the public storage
delete_media_files(media)
media.delete()
+ messages.add_message(
+ request, messages.SUCCESS, _('You deleted the media.'))
return redirect(request, "mediagoblin.user_pages.user_home",
user=username)
else:
+ messages.add_message(
+ request, messages.ERROR,
+ _("The media was not deleted because you didn't check that you were sure."))
return exc.HTTPFound(
location=media.url_for_self(request.urlgen))
if ((request.user[u'is_admin'] and
- request.user._id != media.uploader()._id)):
+ request.user._id != media.get_uploader()._id)):
messages.add_message(
request, messages.WARNING,
_("You are about to delete another user's media. "
diff --git a/mediagoblin/views.py b/mediagoblin/views.py
index ecf5b723..cd6aba9b 100644
--- a/mediagoblin/views.py
+++ b/mediagoblin/views.py
@@ -14,11 +14,15 @@
# 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 sys
+
from mediagoblin import mg_globals
from mediagoblin.tools.pagination import Pagination
from mediagoblin.tools.response import render_to_response
from mediagoblin.db.util import DESCENDING
from mediagoblin.decorators import uses_pagination
+from mediagoblin import media_types
+
@uses_pagination
@@ -28,12 +32,12 @@ def root_view(request, page):
pagination = Pagination(page, cursor)
media_entries = pagination()
-
return render_to_response(
request, 'mediagoblin/root.html',
{'media_entries': media_entries,
'allow_registration': mg_globals.app_config["allow_registration"],
- 'pagination': pagination})
+ 'pagination': pagination,
+ 'sys': sys})
def simple_template_render(request):
diff --git a/mediagoblin/workbench.py b/mediagoblin/workbench.py
index 60a79f47..9578494c 100644
--- a/mediagoblin/workbench.py
+++ b/mediagoblin/workbench.py
@@ -47,7 +47,10 @@ class Workbench(object):
return str(self.dir)
def __repr__(self):
- return repr(self.dir)
+ try:
+ return str(self)
+ except AttributeError:
+ return 'None'
def joinpath(self, *args):
return os.path.join(self.dir, *args)
diff --git a/setup.py b/setup.py
index 7333f974..ec672dd2 100644
--- a/setup.py
+++ b/setup.py
@@ -66,6 +66,7 @@ setup(
## their package managers.
# 'lxml',
],
+ # requires=['gst'],
test_suite='nose.collector',
entry_points="""\
[console_scripts]