aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AUTHORS4
-rw-r--r--docs/source/plugindocs/trim_whitespace.rst1
-rw-r--r--docs/source/siteadmin/codebase.rst2
-rw-r--r--docs/source/siteadmin/media-types.rst40
-rw-r--r--docs/source/siteadmin/relnotes.rst68
-rw-r--r--mediagoblin/_version.py2
-rw-r--r--mediagoblin/admin/views.py7
-rw-r--r--mediagoblin/app.py68
-rw-r--r--mediagoblin/auth/lib.py4
-rw-r--r--mediagoblin/auth/views.py45
-rw-r--r--mediagoblin/db/mixin.py8
-rw-r--r--mediagoblin/db/sql/base.py23
-rw-r--r--mediagoblin/db/sql/models.py22
-rw-r--r--mediagoblin/decorators.py36
-rw-r--r--mediagoblin/edit/lib.py2
-rw-r--r--mediagoblin/edit/routing.py2
-rw-r--r--mediagoblin/edit/views.py22
-rw-r--r--mediagoblin/gmg_commands/users.py2
-rw-r--r--mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mobin22664 -> 22564 bytes
-rw-r--r--mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mobin22414 -> 22314 bytes
-rw-r--r--mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.mobin21486 -> 21386 bytes
-rw-r--r--mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mobin22473 -> 22702 bytes
-rw-r--r--mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po143
-rw-r--r--mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po26
-rw-r--r--mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mobin22487 -> 22387 bytes
-rw-r--r--mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mobin23124 -> 23107 bytes
-rw-r--r--mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po70
-rw-r--r--mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.mobin22310 -> 22210 bytes
-rw-r--r--mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mobin23318 -> 23218 bytes
-rw-r--r--mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.mobin24055 -> 24165 bytes
-rw-r--r--mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.po135
-rw-r--r--mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mobin21486 -> 21386 bytes
-rw-r--r--mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.mobin23160 -> 23175 bytes
-rw-r--r--mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.po70
-rw-r--r--mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mobin22507 -> 22407 bytes
-rw-r--r--mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mobin22055 -> 21955 bytes
-rw-r--r--mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.mobin23479 -> 23379 bytes
-rw-r--r--mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mobin21950 -> 21850 bytes
-rw-r--r--mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mobin21090 -> 20935 bytes
-rw-r--r--mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po72
-rw-r--r--mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.mobin22322 -> 22222 bytes
-rw-r--r--mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mobin21660 -> 21560 bytes
-rw-r--r--mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mobin22636 -> 22885 bytes
-rw-r--r--mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po139
-rw-r--r--mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mobin28344 -> 28560 bytes
-rw-r--r--mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po139
-rw-r--r--mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mobin22312 -> 22277 bytes
-rw-r--r--mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po70
-rw-r--r--mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mobin21666 -> 21566 bytes
-rw-r--r--mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.mobin22826 -> 22754 bytes
-rw-r--r--mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.po66
-rw-r--r--mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mobin21582 -> 21482 bytes
-rw-r--r--mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mobin21812 -> 21712 bytes
-rw-r--r--mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mobin21728 -> 21628 bytes
-rw-r--r--mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.mobin21526 -> 21426 bytes
-rw-r--r--mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.po28
-rw-r--r--mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mobin20847 -> 20709 bytes
-rw-r--r--mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po73
-rw-r--r--mediagoblin/listings/routing.py2
-rw-r--r--mediagoblin/meddleware/csrf.py12
-rw-r--r--mediagoblin/media_types/ascii/models.py5
-rw-r--r--mediagoblin/media_types/audio/models.py5
-rw-r--r--mediagoblin/media_types/image/models.py5
-rw-r--r--mediagoblin/media_types/stl/models.py5
-rw-r--r--mediagoblin/media_types/video/models.py5
-rw-r--r--mediagoblin/media_types/video/transcoders.py16
-rw-r--r--mediagoblin/plugins/api/tools.py19
-rw-r--r--mediagoblin/plugins/api/views.py21
-rw-r--r--mediagoblin/plugins/httpapiauth/__init__.py2
-rw-r--r--mediagoblin/plugins/oauth/views.py9
-rw-r--r--mediagoblin/processing/__init__.py6
-rw-r--r--mediagoblin/processing/task.py8
-rw-r--r--mediagoblin/routing.py49
-rw-r--r--mediagoblin/submit/routing.py2
-rw-r--r--mediagoblin/submit/views.py18
-rw-r--r--mediagoblin/templates/mediagoblin/admin/panel.html6
-rw-r--r--mediagoblin/templates/mediagoblin/edit/attachments.html2
-rw-r--r--mediagoblin/templates/mediagoblin/edit/edit.html2
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/collection.html2
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/collection_item_confirm_remove.html2
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/media.html22
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/media_collect.html2
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html2
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/processing_panel.html6
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/user.html6
-rw-r--r--mediagoblin/templates/mediagoblin/utils/collection_gallery.html2
-rw-r--r--mediagoblin/tests/__init__.py4
-rw-r--r--mediagoblin/tests/test_api.py104
-rw-r--r--mediagoblin/tests/test_auth.py21
-rw-r--r--mediagoblin/tests/test_mgoblin_app.ini2
-rw-r--r--mediagoblin/tests/test_storage.py9
-rw-r--r--mediagoblin/tests/test_submission.py2
-rw-r--r--mediagoblin/tests/test_tests.py10
-rw-r--r--mediagoblin/tests/tools.py10
-rw-r--r--mediagoblin/tools/pagination.py11
-rw-r--r--mediagoblin/tools/request.py2
-rw-r--r--mediagoblin/tools/response.py50
-rw-r--r--mediagoblin/tools/routing.py66
-rw-r--r--mediagoblin/user_pages/lib.py2
-rw-r--r--mediagoblin/user_pages/routing.py3
-rw-r--r--mediagoblin/user_pages/views.py276
-rw-r--r--mediagoblin/webfinger/routing.py2
-rw-r--r--setup.py1
120 files changed, 1416 insertions, 1267 deletions
diff --git a/AUTHORS b/AUTHORS
index 9205fc02..64956ad4 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -8,6 +8,7 @@ variety of different ways and this software wouldn't exist without them.
Thank you!
* Aaron Williamson
+* Aeva Ntsc
* Alejandro Villanueva
* Aleksandar Micovic
* Alex Camelio
@@ -17,12 +18,15 @@ Thank you!
* Chris Moylan
* Christopher Allan Webber
* Daniel Neel
+* Duncan Paterson
* Deb Nicholson
* Elrond of Samba TNG
+* Emily O'Leary
* Jakob Kramer
* Jef van Schendel
* Joar Wandborg
* Karen Rustad
+* Kuno Woudt
* Mark Holmquist
* Matt Lee
* Nathan Yergler
diff --git a/docs/source/plugindocs/trim_whitespace.rst b/docs/source/plugindocs/trim_whitespace.rst
new file mode 100644
index 00000000..eb38e0e5
--- /dev/null
+++ b/docs/source/plugindocs/trim_whitespace.rst
@@ -0,0 +1 @@
+.. include:: ../../../mediagoblin/plugins/trim_whitespace/README.rst
diff --git a/docs/source/siteadmin/codebase.rst b/docs/source/siteadmin/codebase.rst
index 22f4e18b..73e938e7 100644
--- a/docs/source/siteadmin/codebase.rst
+++ b/docs/source/siteadmin/codebase.rst
@@ -65,7 +65,7 @@ Software Stack
`Paste Script <http://pythonpaste.org/script/>`_: we'll use this for
configuring and launching the application
- * `WebOb <http://pythonpaste.org/webob/>`_: nice abstraction layer
+ * `werkzeug <http://werkzeug.pocoo.org/>`_: nice abstraction layer
from HTTP requests, responses and WSGI bits
* `Beaker <http://beaker.groovie.org/>`_: for handling sessions and
diff --git a/docs/source/siteadmin/media-types.rst b/docs/source/siteadmin/media-types.rst
index 3b46c1b6..8fbce5e4 100644
--- a/docs/source/siteadmin/media-types.rst
+++ b/docs/source/siteadmin/media-types.rst
@@ -77,6 +77,13 @@ good/bad/ugly). On Debianoid systems::
gstreamer0.10-ffmpeg
+Add ``mediagoblin.media_types.video`` to the ``media_types`` list in your
+``mediagoblin_local.ini`` and restart MediaGoblin.
+
+Run::
+
+ ./bin/gmg dbupdate
+
Now you should be able to submit videos, and mediagoblin should
transcode them.
@@ -117,8 +124,13 @@ Then install ``scikits.audiolab`` for the spectrograms::
./bin/pip install scikits.audiolab
Add ``mediagoblin.media_types.audio`` to the ``media_types`` list in your
-``mediagoblin_local.ini`` and restart MediaGoblin. You should now be able to
-upload and listen to audio files!
+``mediagoblin_local.ini`` and restart MediaGoblin.
+
+Run::
+
+ ./bin/gmg dbupdate
+
+You should now be able to upload and listen to audio files!
Ascii art
@@ -140,4 +152,28 @@ the list would look like this::
media_types = mediagoblin.media_types.image, mediagoblin.media_types.ascii
+Run::
+
+ ./bin/gmg dbupdate
+
Now any .txt file you uploaded will be processed as ascii art!
+
+
+STL / 3d model support
+======================
+
+To enable the "STL" 3d model support plugin, first make sure you have
+a recentish `Blender <http://blender.org>`_ installed and available on
+your execution path. This feature has been tested with Blender 2.63.
+It may work on some earlier versions, but that is not guaranteed (and
+is surely not to work prior to Blender 2.5X).
+
+Add ``mediagoblin.media_types.stl`` to the ``media_types`` list in your
+``mediagoblin_local.ini`` and restart MediaGoblin.
+
+Run::
+
+ ./bin/gmg dbupdate
+
+You should now be able to upload .obj and .stl files and MediaGoblin
+will be able to present them to your wide audience of admirers!
diff --git a/docs/source/siteadmin/relnotes.rst b/docs/source/siteadmin/relnotes.rst
index 3e09078e..9b45f642 100644
--- a/docs/source/siteadmin/relnotes.rst
+++ b/docs/source/siteadmin/relnotes.rst
@@ -19,16 +19,33 @@ This chapter has important information for releases in it.
If you're upgrading from a previous release, please read it
carefully, or at least skim over it.
+WIP
+=====
+
+**New features**
+
+**Other changed**
+
+* Dependency list has been reduced not requireing the "webob" package anymore.
+
0.3.2
=====
This will be the last release that is capable of converting from an earlier
MongoDB-based MediaGoblin instance to the newer SQL-based system.
+**Do this to upgrade**
+
+1. Make sure to run ``bin/gmg dbupdate`` after upgrading.
+
**New features**
-* TO BE FILLED IN BEFORE RELEASE :-)
+* **3d model support!**
+
+ You can now upload STL and OBJ files and display them in
+ MediaGoblin. Requires a recent-ish Blender; for details see:
+ :ref:`deploying-chapter`
* **trim_whitespace**
@@ -37,6 +54,55 @@ MongoDB-based MediaGoblin instance to the newer SQL-based system.
See :ref:`core-plugin-section` for plugin documentation
+* **A new API!**
+
+ It isn't well documented yet but we do have an API. There is an
+ `android application in progress <https://gitorious.org/mediagoblin/mediagoblin-android>`_
+ which makes use of it, and there are some demo applications between
+ `automgtic <https://github.com/jwandborg/automgtic>`_, an
+ automatic media uploader for your desktop
+ and `OMGMG <https://github.com/jwandborg/omgmg>`_, an example of
+ a web application hooking up to the API.
+
+ This is a plugin, so you have to enable it in your mediagoblin
+ config file by adding a section under [plugins] like::
+
+ [plugins]
+ [[mediagoblin.plugins.api]]
+
+ Note that the API works but is not nailed down... the way it is
+ called may change in future releases.
+
+* **OAuth login support**
+
+ For applications that use OAuth to connect to the API.
+
+ This is a plugin, so you have to enable it in your mediagoblin
+ config file by adding a section under [plugins] like::
+
+ [plugins]
+ [[mediagoblin.plugins.oauth]]
+
+* **Collections**
+
+ We now have user-curated collections support. These are arbitrary
+ galleries that are customizable by users. You can add media to
+ these by clicking on the paperclip icon when logged in and looking
+ at a media entry.
+
+* **OpenStreetMap licensing display improvements**
+
+ More accurate display of OSM licensing, and less disruptive: you
+ click to "expand" the display of said licensing.
+
+ Geolocation is also now on by default.
+
+* **Miscelaneous visual improvements**
+
+ We've made a number of small visual improvements including newer and
+ nicer looking thumbnails and improved checkbox placement.
+
+
0.3.1
=====
diff --git a/mediagoblin/_version.py b/mediagoblin/_version.py
index 94ab9f1a..2db399a9 100644
--- a/mediagoblin/_version.py
+++ b/mediagoblin/_version.py
@@ -23,4 +23,4 @@
# see http://www.python.org/dev/peps/pep-0386/
-__version__ = "0.3.2.dev"
+__version__ = "0.3.3.dev"
diff --git a/mediagoblin/admin/views.py b/mediagoblin/admin/views.py
index 9c14c55c..d0665151 100644
--- a/mediagoblin/admin/views.py
+++ b/mediagoblin/admin/views.py
@@ -14,10 +14,11 @@
# 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 werkzeug.exceptions import Forbidden
+
from mediagoblin.db.util import DESCENDING
from mediagoblin.decorators import require_active_login
-from mediagoblin.tools.response import (render_to_response, render_403,
- render_404)
+from mediagoblin.tools.response import render_to_response
@require_active_login
def admin_processing_panel(request):
@@ -26,7 +27,7 @@ def admin_processing_panel(request):
'''
# TODO: Why not a "require_admin_login" decorator throwing a 403 exception?
if not request.user.is_admin:
- return render_403(request)
+ raise Forbidden()
processing_entries = request.db.MediaEntry.find(
{'state': u'processing'}).sort('created', DESCENDING)
diff --git a/mediagoblin/app.py b/mediagoblin/app.py
index 876ded4e..936a354f 100644
--- a/mediagoblin/app.py
+++ b/mediagoblin/app.py
@@ -17,14 +17,15 @@
import os
import logging
-from mediagoblin.routing import url_map, view_functions, add_route
+from mediagoblin.routing import get_url_map
+from mediagoblin.tools.routing import endpoint_to_controller
from werkzeug.wrappers import Request
from werkzeug.exceptions import HTTPException, NotFound
from mediagoblin import meddleware, __version__
from mediagoblin.tools import common, translate, template
-from mediagoblin.tools.response import render_404
+from mediagoblin.tools.response import render_http_exception
from mediagoblin.tools.theme import register_themes
from mediagoblin.tools import request as mg_request
from mediagoblin.mg_globals import setup_globals
@@ -93,11 +94,7 @@ class MediaGoblinApp(object):
self.public_store, self.queue_store = setup_storage()
# set up routing
- self.url_map = url_map
-
- for route in PluginManager().get_routes():
- _log.debug('adding plugin route: {0}'.format(route))
- add_route(*route)
+ self.url_map = get_url_map()
# set up staticdirector tool
self.staticdirector = get_staticdirector(app_config)
@@ -135,9 +132,8 @@ class MediaGoblinApp(object):
def call_backend(self, environ, start_response):
request = Request(environ)
- ## Compatibility webob -> werkzeug
+ # Compatibility with django, use request.args preferrably
request.GET = request.args
- request.accept = request.accept_mimetypes
## Routing / controller loading stuff
map_adapter = self.url_map.bind_to_environ(request.environ)
@@ -188,41 +184,43 @@ class MediaGoblinApp(object):
mg_request.setup_user_in_request(request)
try:
- endpoint, url_values = map_adapter.match()
+ found_rule, url_values = map_adapter.match(return_rule=True)
request.matchdict = url_values
- except NotFound as exc:
- return render_404(request)(environ, start_response)
except HTTPException as exc:
- # Support legacy webob.exc responses
- return exc(environ, start_response)
-
- view_func = view_functions[endpoint]
-
- _log.debug('endpoint: {0} view_func: {1}'.format(
- endpoint,
- view_func))
+ # Stop and render exception
+ return render_http_exception(
+ request, exc,
+ exc.get_description(environ))(environ, start_response)
- # import the endpoint, or if it's already a callable, call that
- if isinstance(view_func, unicode) \
- or isinstance(view_func, str):
- controller = common.import_component(view_func)
- else:
- controller = view_func
+ controller = endpoint_to_controller(found_rule)
# 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)
+ try:
+ for m in self.meddleware:
+ response = m.process_request(request, controller)
+ if response is not None:
+ return response(environ, start_response)
+ except HTTPException as e:
+ return render_http_exception(
+ request, e,
+ e.get_description(environ))(environ, start_response)
request.start_response = start_response
- # get the response from the controller
- response = controller(request)
+ # get the Http response from the controller
+ try:
+ response = controller(request)
+ except HTTPException as e:
+ response = render_http_exception(
+ request, e, e.get_description(environ))
- # pass the response through the meddleware
- for m in self.meddleware[::-1]:
- m.process_response(request, response)
+ # pass the response through the meddlewares
+ try:
+ for m in self.meddleware[::-1]:
+ m.process_response(request, response)
+ except HTTPException as e:
+ response = render_http_exeption(
+ request, e, e.get_description(environ))
return response(environ, start_response)
diff --git a/mediagoblin/auth/lib.py b/mediagoblin/auth/lib.py
index c5b046d2..8829995a 100644
--- a/mediagoblin/auth/lib.py
+++ b/mediagoblin/auth/lib.py
@@ -109,7 +109,7 @@ def send_verification_email(user, request):
'verification_url': EMAIL_VERIFICATION_TEMPLATE.format(
host=request.host,
uri=request.urlgen('mediagoblin.auth.verify_email'),
- userid=unicode(user._id),
+ userid=unicode(user.id),
verification_key=user.verification_key)})
# TODO: There is no error handling in place
@@ -144,7 +144,7 @@ def send_fp_verification_email(user, request):
'verification_url': EMAIL_FP_VERIFICATION_TEMPLATE.format(
host=request.host,
uri=request.urlgen('mediagoblin.auth.verify_forgot_password'),
- userid=unicode(user._id),
+ userid=unicode(user.id),
fp_verification_key=user.fp_verification_key)})
# TODO: There is no error handling in place
diff --git a/mediagoblin/auth/views.py b/mediagoblin/auth/views.py
index 5b77c122..efd3e018 100644
--- a/mediagoblin/auth/views.py
+++ b/mediagoblin/auth/views.py
@@ -17,13 +17,10 @@
import uuid
import datetime
-from webob import exc
-
-from mediagoblin import messages
-from mediagoblin import mg_globals
+from mediagoblin import messages, mg_globals
+from mediagoblin.db.sql.models import User
from mediagoblin.tools.response import render_to_response, redirect, render_404
from mediagoblin.tools.translate import pass_to_ugettext as _
-from mediagoblin.db.util import ObjectId, InvalidId
from mediagoblin.auth import lib as auth_lib
from mediagoblin.auth import forms as auth_forms
from mediagoblin.auth.lib import send_verification_email, \
@@ -63,10 +60,8 @@ def register(request):
em_user, em_dom = unicode(request.form['email']).split("@", 1)
em_dom = em_dom.lower()
email = em_user + "@" + em_dom
- users_with_username = request.db.User.find(
- {'username': username}).count()
- users_with_email = request.db.User.find(
- {'email': email}).count()
+ users_with_username = User.query.filter_by(username=username).count()
+ users_with_email = User.query.filter_by(email=email).count()
extra_validation_passes = True
@@ -81,16 +76,16 @@ def register(request):
if extra_validation_passes:
# Create the user
- user = request.db.User()
+ user = User()
user.username = username
user.email = email
user.pw_hash = auth_lib.bcrypt_gen_password_hash(
request.form['password'])
user.verification_key = unicode(uuid.uuid4())
- user.save(validate=True)
+ user.save()
# log the user in
- request.session['user_id'] = unicode(user._id)
+ request.session['user_id'] = unicode(user.id)
request.session.save()
# send verification email
@@ -120,16 +115,15 @@ def login(request):
login_failed = False
if request.method == 'POST' and login_form.validate():
- user = request.db.User.find_one(
- {'username': request.form['username'].lower()})
+ user = User.query.filter_by(username=request.form['username'].lower()).first()
if user and user.check_login(request.form['password']):
# set up login in session
- request.session['user_id'] = unicode(user._id)
+ request.session['user_id'] = unicode(user.id)
request.session.save()
if request.form.get('next'):
- return exc.HTTPFound(location=request.form['next'])
+ return redirect(request, location=request.form['next'])
else:
return redirect(request, "index")
@@ -166,8 +160,7 @@ def verify_email(request):
if not 'userid' in request.GET or not 'token' in request.GET:
return render_404(request)
- user = request.db.User.find_one(
- {'_id': ObjectId(unicode(request.GET['userid']))})
+ user = User.query.filter_by(id=request.args['userid']).first()
if user and user.verification_key == unicode(request.GET['token']):
user.status = u'active'
@@ -242,11 +235,9 @@ def forgot_password(request):
if request.method == 'POST' and fp_form.validate():
# '$or' not available till mongodb 1.5.3
- user = request.db.User.find_one(
- {'username': request.form['username']})
+ user = User.query.filter_by(username=request.form['username']).first()
if not user:
- user = request.db.User.find_one(
- {'email': request.form['username']})
+ user = User.query.filter_by(email=request.form['username']).first()
if user:
if user.email_verified and user.status == 'active':
@@ -305,11 +296,9 @@ def verify_forgot_password(request):
formdata_userid = formdata['vars']['userid']
formdata_vars = formdata['vars']
- # check if it's a valid Id
- try:
- user = request.db.User.find_one(
- {'_id': ObjectId(unicode(formdata_userid))})
- except InvalidId:
+ # check if it's a valid user id
+ user = User.query.filter_by(id=formdata_userid).first()
+ if not user:
return render_404(request)
# check if we have a real user and correct token
@@ -338,7 +327,7 @@ def verify_forgot_password(request):
'mediagoblin/auth/change_fp.html',
{'cp_form': cp_form})
- # in case there is a valid id but no user whit that id in the db
+ # in case there is a valid id but no user with that id in the db
# or the token expired
else:
return render_404(request)
diff --git a/mediagoblin/db/mixin.py b/mediagoblin/db/mixin.py
index 3f395e90..9829bb6e 100644
--- a/mediagoblin/db/mixin.py
+++ b/mediagoblin/db/mixin.py
@@ -99,14 +99,14 @@ class MediaEntryMixin(object):
@property
def slug_or_id(self):
- return (self.slug or self._id)
+ return (self.slug or self.id)
def url_for_self(self, urlgen, **extra_args):
"""
Generate an appropriate url for ourselves
- Use a slug if we have one, else use our '_id'.
+ Use a slug if we have one, else use our 'id'.
"""
uploader = self.get_uploader
@@ -208,13 +208,13 @@ class CollectionMixin(object):
@property
def slug_or_id(self):
- return (self.slug or self._id)
+ return (self.slug or self.id)
def url_for_self(self, urlgen, **extra_args):
"""
Generate an appropriate url for ourselves
- Use a slug if we have one, else use our '_id'.
+ Use a slug if we have one, else use our 'id'.
"""
creator = self.get_creator
diff --git a/mediagoblin/db/sql/base.py b/mediagoblin/db/sql/base.py
index ca0c8166..2dceca75 100644
--- a/mediagoblin/db/sql/base.py
+++ b/mediagoblin/db/sql/base.py
@@ -35,35 +35,19 @@ class GMGQuery(Query):
key_col = desc(key_col)
return self.order_by(key_col)
- def skip(self, amount):
- return self.offset(amount)
-
Session = scoped_session(sessionmaker(query_cls=GMGQuery))
-def _fix_query_dict(query_dict):
- if '_id' in query_dict:
- query_dict['id'] = query_dict.pop('_id')
-
-
class GMGTableBase(object):
query = Session.query_property()
@classmethod
- def find(cls, query_dict=None):
- if query_dict is None:
- query_dict = {}
-
- _fix_query_dict(query_dict)
+ def find(cls, query_dict):
return cls.query.filter_by(**query_dict)
@classmethod
- def find_one(cls, query_dict=None):
- if query_dict is None:
- query_dict = {}
-
- _fix_query_dict(query_dict)
+ def find_one(cls, query_dict):
return cls.query.filter_by(**query_dict).first()
@classmethod
@@ -77,8 +61,7 @@ class GMGTableBase(object):
# The key *has* to exist on sql.
return getattr(self, key)
- def save(self, validate=True):
- assert validate
+ def save(self):
sess = object_session(self)
if sess is None:
sess = Session()
diff --git a/mediagoblin/db/sql/models.py b/mediagoblin/db/sql/models.py
index b48c1fbe..4450e38d 100644
--- a/mediagoblin/db/sql/models.py
+++ b/mediagoblin/db/sql/models.py
@@ -44,18 +44,6 @@ from mediagoblin.db.sql.base import Session
from migrate import changeset
-class SimpleFieldAlias(object):
- """An alias for any field"""
- def __init__(self, fieldname):
- self.fieldname = fieldname
-
- def __get__(self, instance, cls):
- return getattr(instance, self.fieldname)
-
- def __set__(self, instance, val):
- setattr(instance, self.fieldname, val)
-
-
class User(Base, UserMixin):
"""
TODO: We should consider moving some rarely used fields
@@ -83,8 +71,6 @@ class User(Base, UserMixin):
## TODO
# plugin data would be in a separate model
- _id = SimpleFieldAlias("id")
-
def __repr__(self):
return '<{0} #{1} {2} {3} "{4}">'.format(
self.__class__.__name__,
@@ -161,8 +147,6 @@ class MediaEntry(Base, MediaEntryMixin):
# media_data
# fail_error
- _id = SimpleFieldAlias("id")
-
def get_comments(self, ascending=False):
order_col = MediaComment.created
if not ascending:
@@ -359,8 +343,6 @@ class MediaComment(Base, MediaCommentMixin):
get_author = relationship(User)
- _id = SimpleFieldAlias("id")
-
class Collection(Base, CollectionMixin):
__tablename__ = "core__collections"
@@ -383,8 +365,6 @@ class Collection(Base, CollectionMixin):
return CollectionItem.query.filter_by(
collection=self.id).order_by(order_col)
- _id = SimpleFieldAlias("id")
-
class CollectionItem(Base, CollectionItemMixin):
__tablename__ = "core__collection_items"
@@ -400,8 +380,6 @@ class CollectionItem(Base, CollectionItemMixin):
get_media_entry = relationship(MediaEntry)
- _id = SimpleFieldAlias("id")
-
__table_args__ = (
UniqueConstraint('collection', 'media_entry'),
{})
diff --git a/mediagoblin/decorators.py b/mediagoblin/decorators.py
index 90b36771..0903dd41 100644
--- a/mediagoblin/decorators.py
+++ b/mediagoblin/decorators.py
@@ -17,9 +17,8 @@
from functools import wraps
from urlparse import urljoin
-from urllib import urlencode
-
-from webob import exc
+from werkzeug.exceptions import Forbidden
+from werkzeug.urls import url_quote
from mediagoblin.db.util import ObjectId, InvalidId
from mediagoblin.db.sql.models import User
@@ -43,11 +42,8 @@ def require_active_login(controller):
qualified=True),
request.url)
- return exc.HTTPFound(
- location='?'.join([
- request.urlgen('mediagoblin.auth.login'),
- urlencode({
- 'next': next_url})]))
+ return redirect(request, 'mediagoblin.auth.login',
+ next=url_quote(next_url))
return controller(request, *args, **kwargs)
@@ -75,10 +71,10 @@ def user_may_delete_media(controller):
@wraps(controller)
def wrapper(request, *args, **kwargs):
uploader_id = request.db.MediaEntry.find_one(
- {'_id': ObjectId(request.matchdict['media'])}).uploader
+ {'id': ObjectId(request.matchdict['media'])}).uploader
if not (request.user.is_admin or
- request.user._id == uploader_id):
- return exc.HTTPForbidden()
+ request.user.id == uploader_id):
+ raise Forbidden()
return controller(request, *args, **kwargs)
@@ -94,8 +90,8 @@ def user_may_alter_collection(controller):
creator_id = request.db.User.find_one(
{'username': request.matchdict['user']}).id
if not (request.user.is_admin or
- request.user._id == creator_id):
- return exc.HTTPForbidden()
+ request.user.id == creator_id):
+ raise Forbidden()
return controller(request, *args, **kwargs)
@@ -134,15 +130,15 @@ def get_user_media_entry(controller):
media = request.db.MediaEntry.find_one(
{'slug': request.matchdict['media'],
'state': u'processed',
- 'uploader': user._id})
+ 'uploader': user.id})
# no media via slug? Grab it via ObjectId
if not media:
try:
media = request.db.MediaEntry.find_one(
- {'_id': ObjectId(request.matchdict['media']),
+ {'id': ObjectId(request.matchdict['media']),
'state': u'processed',
- 'uploader': user._id})
+ 'uploader': user.id})
except InvalidId:
return render_404(request)
@@ -169,7 +165,7 @@ def get_user_collection(controller):
collection = request.db.Collection.find_one(
{'slug': request.matchdict['collection'],
- 'creator': user._id})
+ 'creator': user.id})
# Still no collection? Okay, 404.
if not collection:
@@ -194,10 +190,10 @@ def get_user_collection_item(controller):
collection = request.db.Collection.find_one(
{'slug': request.matchdict['collection'],
- 'creator': user._id})
+ 'creator': user.id})
collection_item = request.db.CollectionItem.find_one(
- {'_id': request.matchdict['collection_item'] })
+ {'id': request.matchdict['collection_item'] })
# Still no collection item? Okay, 404.
if not collection_item:
@@ -216,7 +212,7 @@ def get_media_entry_by_id(controller):
def wrapper(request, *args, **kwargs):
try:
media = request.db.MediaEntry.find_one(
- {'_id': ObjectId(request.matchdict['media']),
+ {'id': ObjectId(request.matchdict['media']),
'state': u'processed'})
except InvalidId:
return render_404(request)
diff --git a/mediagoblin/edit/lib.py b/mediagoblin/edit/lib.py
index b4715134..aab537a0 100644
--- a/mediagoblin/edit/lib.py
+++ b/mediagoblin/edit/lib.py
@@ -17,7 +17,7 @@
def may_edit_media(request, media):
"""Check, if the request's user may edit the media details"""
- if media.uploader == request.user._id:
+ if media.uploader == request.user.id:
return True
if request.user.is_admin:
return True
diff --git a/mediagoblin/edit/routing.py b/mediagoblin/edit/routing.py
index 28b73d1e..3e6787d2 100644
--- a/mediagoblin/edit/routing.py
+++ b/mediagoblin/edit/routing.py
@@ -14,7 +14,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from mediagoblin.routing import add_route
+from mediagoblin.tools.routing import add_route
add_route('mediagoblin.edit.profile', '/edit/profile/',
'mediagoblin.edit.views:edit_profile')
diff --git a/mediagoblin/edit/views.py b/mediagoblin/edit/views.py
index 111f9ae8..9de034bb 100644
--- a/mediagoblin/edit/views.py
+++ b/mediagoblin/edit/views.py
@@ -14,10 +14,10 @@
# 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 webob import exc
from cgi import FieldStorage
from datetime import datetime
+from werkzeug.exceptions import Forbidden
from werkzeug.utils import secure_filename
from mediagoblin import messages
@@ -41,7 +41,7 @@ import mimetypes
@require_active_login
def edit_media(request, media):
if not may_edit_media(request, media):
- return exc.HTTPForbidden()
+ raise Forbidden("User may not edit this media")
defaults = dict(
title=media.title,
@@ -75,11 +75,11 @@ def edit_media(request, media):
media.save()
- return exc.HTTPFound(
- location=media.url_for_self(request.urlgen))
+ return redirect(request,
+ location=media.url_for_self(request.urlgen))
if request.user.is_admin \
- and media.uploader != request.user._id \
+ and media.uploader != request.user.id \
and request.method != 'POST':
messages.add_message(
request, messages.WARNING,
@@ -130,7 +130,7 @@ def edit_attachments(request, media):
attachment_public_filepath \
= mg_globals.public_store.get_unique_filepath(
- ['media_entries', unicode(media._id), 'attachment',
+ ['media_entries', unicode(media.id), 'attachment',
public_filename])
attachment_public_file = mg_globals.public_store.get_file(
@@ -157,15 +157,15 @@ def edit_attachments(request, media):
% (request.form['attachment_name']
or request.files['attachment_file'].filename))
- return exc.HTTPFound(
- location=media.url_for_self(request.urlgen))
+ return redirect(request,
+ location=media.url_for_self(request.urlgen))
return render_to_response(
request,
'mediagoblin/edit/attachments.html',
{'media': media,
'form': form})
else:
- return exc.HTTPForbidden()
+ raise Forbidden("Attachments are disabled")
@require_active_login
@@ -278,7 +278,7 @@ def edit_collection(request, collection):
# Make sure there isn't already a Collection with this title
existing_collection = request.db.Collection.find_one({
- 'creator': request.user._id,
+ 'creator': request.user.id,
'title':request.form['title']})
if existing_collection and existing_collection.id != collection.id:
@@ -301,7 +301,7 @@ def edit_collection(request, collection):
collection=collection.slug)
if request.user.is_admin \
- and collection.creator != request.user._id \
+ and collection.creator != request.user.id \
and request.method != 'POST':
messages.add_message(
request, messages.WARNING,
diff --git a/mediagoblin/gmg_commands/users.py b/mediagoblin/gmg_commands/users.py
index 70e591c9..024c8498 100644
--- a/mediagoblin/gmg_commands/users.py
+++ b/mediagoblin/gmg_commands/users.py
@@ -55,7 +55,7 @@ def adduser(args):
entry.pw_hash = auth_lib.bcrypt_gen_password_hash(args.password)
entry.status = u'active'
entry.email_verified = True
- entry.save(validate=True)
+ entry.save()
print "User created (and email marked as verified)"
diff --git a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo
index 06dc2263..d8d02ded 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 e8648171..6bdfacc6 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://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -309,7 +309,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -744,14 +744,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -916,12 +908,12 @@ msgid ""
msgstr "هنا ستظهر وسائطك، ولكن يبدو أنك لم تض٠شيئًا بعد."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "لا يبدو أنه توجد أي وسائط هنا حتى الآن..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -981,26 +973,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "ويحي!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo
index 09105662..ae6216cf 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 b93516d8..79f26e8f 100644
--- a/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -309,7 +309,7 @@ msgstr "La URI de redirecció per les aplicacions, aquest camp\n és
msgid "This field is required for public clients"
msgstr "Aquest camp és requeriment per a clients públics"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "El client {0} ha sigut enregistrat!"
@@ -744,14 +744,6 @@ msgstr "Editar"
msgid "Delete"
msgstr "Esborrar"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -916,12 +908,12 @@ msgid ""
msgstr "Aqui és on apareixerà el teu mitjà, però sembla que encara no hi has afegit res."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Sembla que no hi ha cap mitjà aqui encara..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -981,26 +973,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr "No s'ha pogut llegir l'arxiu d'imatge"
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Ups!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.mo
index c511196a..9d9955ce 100644
--- a/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.po
index 12466d58..c0677f43 100644
--- a/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -309,7 +309,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr "Dette felt er nødvendigt for offentlige klienter"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "Klienten {0} er blevet registreret!"
@@ -744,14 +744,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -916,12 +908,12 @@ msgid ""
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr ""
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -981,26 +973,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Hovsa!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo
index 793fb975..6374be42 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 8b764c1c..d3a56821 100644
--- a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po
@@ -20,9 +20,9 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-03 13:23-0600\n"
-"PO-Revision-Date: 2012-12-05 08:17+0000\n"
-"Last-Translator: spaetz <sebastian@sspaeth.de>\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
+"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: German (http://www.transifex.com/projects/p/mediagoblin/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -67,7 +67,7 @@ msgstr "Leider gibt es bereits einen Benutzer mit dieser E-Mail-Adresse."
msgid ""
"Your email address has been verified. You may now login, edit your profile, "
"and submit images!"
-msgstr "Deine E-Mail-Adresse wurde hiermit aktiviert. Du kannst dich jetzt anmelden, dein Profil bearbeiten und Media hochladen!"
+msgstr "Dein GNU MediaGoblin Konto wurde hiermit aktiviert. Du kannst dich jetzt anmelden, dein Profil bearbeiten und Medien hochladen."
#: mediagoblin/auth/views.py:188
msgid "The verification key or user id is incorrect"
@@ -223,7 +223,7 @@ msgid "Wrong password"
msgstr "Falsches Passwort"
#: mediagoblin/edit/views.py:287 mediagoblin/submit/views.py:211
-#: mediagoblin/user_pages/views.py:215
+#: mediagoblin/user_pages/views.py:210
#, python-format
msgid "You already have a collection called \"%s\"!"
msgstr "Du hast bereits eine Sammlung mit Namen \"%s\"!"
@@ -249,7 +249,7 @@ msgid "However, old link directory symlink found; removed.\n"
msgstr "Trotzdem wurde eine alte Verknüpfung gefunden; sie wurde entfernt\n"
#: mediagoblin/media_types/__init__.py:60
-#: mediagoblin/media_types/__init__.py:120
+#: mediagoblin/media_types/__init__.py:101
msgid "Sorry, I don't support that file type :("
msgstr "Entschuldigung, dieser Dateityp wird nicht unterstützt."
@@ -319,7 +319,7 @@ msgstr "Die Weiterleitungs-URI für die Anwendung, dieses Feld\n ist
msgid "This field is required for public clients"
msgstr "Dieses Feld ist Pflicht für öffentliche Clients"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "Client {0} wurde registriert!"
@@ -344,43 +344,43 @@ msgstr "JAAA! Geschafft!"
msgid "Collection \"%s\" added!"
msgstr "Sammlung \"%s\" hinzugefügt!"
-#: mediagoblin/templates/mediagoblin/base.html:50
+#: mediagoblin/templates/mediagoblin/base.html:48
msgid "MediaGoblin logo"
msgstr "MediaGoblin Logo"
-#: mediagoblin/templates/mediagoblin/base.html:56
+#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
msgstr "<a href=\"%(user_url)s\">%(user_name)s</a>s Konto"
-#: mediagoblin/templates/mediagoblin/base.html:62
+#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
msgstr "abmelden"
-#: mediagoblin/templates/mediagoblin/base.html:64
+#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
msgid "Add media"
msgstr "Medien hinzufügen"
-#: mediagoblin/templates/mediagoblin/base.html:70
+#: mediagoblin/templates/mediagoblin/base.html:68
msgid "Verify your email!"
msgstr "Bitte bestätige Deine E-Mail-Adresse!"
-#: mediagoblin/templates/mediagoblin/base.html:75
+#: mediagoblin/templates/mediagoblin/base.html:73
#: mediagoblin/templates/mediagoblin/auth/login.html:28
#: mediagoblin/templates/mediagoblin/auth/login.html:36
#: mediagoblin/templates/mediagoblin/auth/login.html:54
msgid "Log in"
msgstr "Anmelden"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:87
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project."
msgstr "Diese Seite setzt das <a href=\"http://gnu.org/\">GNU</a>-Projekt <a href=\"http://mediagoblin.org/\">MediaGoblin</a> ein."
-#: mediagoblin/templates/mediagoblin/base.html:92
+#: mediagoblin/templates/mediagoblin/base.html:90
#, python-format
msgid ""
"Released under the <a "
@@ -619,6 +619,7 @@ msgstr "Medien mit Schlagwort: %(tag_name)s"
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
#: mediagoblin/templates/mediagoblin/media_displays/audio.html:56
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:136
#: mediagoblin/templates/mediagoblin/media_displays/video.html:52
msgid "Download"
msgstr "Download"
@@ -650,6 +651,56 @@ msgstr "Originaldatei"
msgid "WebM file (Vorbis codec)"
msgstr "WebM-Datei (Vorbis-Codec)"
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:87
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:93
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:99
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:105
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
+#, python-format
+msgid "Image for %(media_title)s"
+msgstr "Bild für %(media_title)s"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:112
+msgid "Toggle Rotate"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
+msgid "Perspective"
+msgstr "Perspektive"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
+msgid "Front"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
+msgid "Top"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
+msgid "Side"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
+msgid "WebGL"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:138
+msgid "Download model"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
+msgid "File Format"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
+msgid "Object Height"
+msgstr "Objekthöhe"
+
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
"Sorry, this video will not work because \n"
@@ -703,14 +754,6 @@ msgstr "Bearbeiten"
msgid "Delete"
msgstr "Löschen"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -753,12 +796,6 @@ msgstr "<a href=\"%(user_url)s\">%(username)s</a>s Medien"
msgid "â– Browsing media by <a href=\"%(user_url)s\">%(username)s</a>"
msgstr "â– Medien von <a href=\"%(user_url)s\">%(username)s</a>"
-#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
-#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
-#, python-format
-msgid "Image for %(media_title)s"
-msgstr "Bild für %(media_title)s"
-
#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
msgid "Add a comment"
msgstr "Einen Kommentar schreiben"
@@ -805,7 +842,7 @@ msgstr "Eine neue Sammlung hinzufügen"
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:29
msgid ""
"You can track the state of media being processed for your gallery here."
-msgstr "Du kannst hier den Status der Medien verfolgen die sich gerade in Bearbeitung befinden."
+msgstr "Du kannst hier den Status der Medien verfolgen, die sich gerade in Bearbeitung befinden."
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:89
msgid "Your last 10 successful uploads"
@@ -881,12 +918,12 @@ msgid ""
msgstr "Hier erscheinen deine Medien, sobald du etwas hochgeladen hast."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Scheinbar gibt es hier noch nichts …"
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr "(entfernen)"
@@ -946,26 +983,26 @@ msgstr "Schlagwörter"
msgid "Could not read the image file."
msgstr "Die Bilddatei konnte nicht gelesen werden."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Hoppla!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr "Ein Fehler trat auf"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr "Funktion nicht erlaubt"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr "So nicht!</p><p>Du wolltest eine Funktion verwenden zu der Du nicht die nötigen Rechte Rechte besitzt. Wolltest Du etwa schon wieder alle Nutzerkonten löschen?"
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
@@ -992,74 +1029,74 @@ msgstr "Notiz anfügen"
msgid "commented on your post"
msgstr "hat dein Medium kommentiert"
-#: mediagoblin/user_pages/views.py:161
+#: mediagoblin/user_pages/views.py:156
msgid "Oops, your comment was empty."
msgstr "Hoppla, der Kommentartext fehlte."
-#: mediagoblin/user_pages/views.py:167
+#: mediagoblin/user_pages/views.py:162
msgid "Your comment has been posted!"
msgstr "Dein Kommentar wurde angenommen!"
-#: mediagoblin/user_pages/views.py:235
+#: mediagoblin/user_pages/views.py:230
msgid "You have to select or add a collection"
msgstr "Du musst eine Sammlung auswählen oder hinzufügen"
-#: mediagoblin/user_pages/views.py:243
+#: mediagoblin/user_pages/views.py:238
#, python-format
msgid "\"%s\" already in collection \"%s\""
msgstr "\"%s\" ist bereits in der Sammlung \"%s\""
-#: mediagoblin/user_pages/views.py:258
+#: mediagoblin/user_pages/views.py:253
#, python-format
msgid "\"%s\" added to collection \"%s\""
msgstr "\"%s\" zur Sammlung \"%s\" hinzugefügt"
-#: mediagoblin/user_pages/views.py:266
+#: mediagoblin/user_pages/views.py:261
msgid "Please check your entries and try again."
msgstr "Bitte prüfe deinen Einträge und versuche erneut."
-#: mediagoblin/user_pages/views.py:297
+#: mediagoblin/user_pages/views.py:292
msgid ""
"Some of the files with this entry seem to be missing. Deleting anyway."
msgstr "Manche Dateien dieses Eintrags scheinen zu fehlen. Es wird trotzdem gelöscht."
-#: mediagoblin/user_pages/views.py:302
+#: mediagoblin/user_pages/views.py:297
msgid "You deleted the media."
msgstr "Du hast das Medium gelöscht."
-#: mediagoblin/user_pages/views.py:309
+#: mediagoblin/user_pages/views.py:304
msgid "The media was not deleted because you didn't check that you were sure."
msgstr "Das Medium wurde nicht gelöscht, da nicht angekreuzt hast, dass du es wirklich löschen möchtest."
-#: mediagoblin/user_pages/views.py:317
+#: mediagoblin/user_pages/views.py:312
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "Du versuchst Medien eines anderen Nutzers zu löschen. Sei bitte vorsichtig."
-#: mediagoblin/user_pages/views.py:379
+#: mediagoblin/user_pages/views.py:370
msgid "You deleted the item from the collection."
msgstr "Du hast das Objekt aus der Sammlung gelöscht."
-#: mediagoblin/user_pages/views.py:383
+#: mediagoblin/user_pages/views.py:374
msgid "The item was not removed because you didn't check that you were sure."
msgstr "Das Objekt wurde nicht aus der Sammlung entfernt, weil du nicht bestätigt hast, dass du dir sicher bist."
-#: mediagoblin/user_pages/views.py:393
+#: mediagoblin/user_pages/views.py:384
msgid ""
"You are about to delete an item from another user's collection. Proceed with"
" caution."
msgstr "Du bist dabei ein Objekt aus der Sammlung eines anderen Nutzers zu entfernen. Sei vorsichtig."
-#: mediagoblin/user_pages/views.py:426
+#: mediagoblin/user_pages/views.py:417
#, python-format
msgid "You deleted the collection \"%s\""
msgstr "Du hast die Sammlung \"%s\" gelöscht"
-#: mediagoblin/user_pages/views.py:433
+#: mediagoblin/user_pages/views.py:424
msgid ""
"The collection was not deleted because you didn't check that you were sure."
msgstr "Die Sammlung wurde nicht gelöscht, weil du nicht bestätigt hast, dass du dir sicher bist."
-#: mediagoblin/user_pages/views.py:443
+#: mediagoblin/user_pages/views.py:434
msgid ""
"You are about to delete another user's collection. Proceed with caution."
msgstr "Du bist dabei eine Sammlung eines anderen Nutzers zu entfernen. Sei vorsichtig."
diff --git a/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po
index f2d82eff..3ac01f5a 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: 2012-12-07 12:45-0600\n"
+"POT-Creation-Date: 2012-12-20 10:11-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"
@@ -309,7 +309,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -746,14 +746,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -917,12 +909,12 @@ msgid ""
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr ""
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -982,26 +974,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr ""
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're "
"sure the address is correct, maybe the page you're looking for has been "
diff --git a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo
index b5e6398b..28500ceb 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 4bd19dda..3b1dce48 100644
--- a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -309,7 +309,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -744,14 +744,6 @@ msgstr "ÅœanÄi"
msgid "Delete"
msgstr "Forigi"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -916,12 +908,12 @@ msgid ""
msgstr "Äœuste ĉi tie aperos viaj dosieroj, sed vi Åajne ankoraÅ­ nenion alÅutis."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Ĉi tie Åajne estas ankoraÅ­ neniuj dosieroj…"
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -981,26 +973,26 @@ msgstr "Markita per"
msgid "Could not read the image file."
msgstr "Malsukcesis lego de la bildodosiero"
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Oj!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo
index bbc0efb0..98dbebdd 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 903aa2af..e1249591 100644
--- a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po
@@ -18,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/mediagoblin/language/es/)\n"
"MIME-Version: 1.0\n"
@@ -202,7 +202,7 @@ msgstr "Estás editando el contenido de otro usuario. Proceder con precaución."
#: mediagoblin/edit/views.py:156
#, python-format
msgid "You added the attachment %s!"
-msgstr ""
+msgstr "¡Has añadido el adjunto %s!"
#: mediagoblin/edit/views.py:181
msgid "You are editing a user's profile. Proceed with caution."
@@ -317,7 +317,7 @@ msgstr "La URI para redireccionar las aplicaciones, este campo es <strong>requer
msgid "This field is required for public clients"
msgstr "Este campo es requerido para los clientes públicos"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "¡El cliente {0} ha sido registrado!"
@@ -349,11 +349,11 @@ msgstr "Logo de MediaGoblin"
#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
-msgstr ""
+msgstr "Cuenta de <a href=\"%(user_url)s\">%(user_name)s</a>"
#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
-msgstr ""
+msgstr "cerrar sesión"
#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
@@ -388,15 +388,15 @@ msgstr "Publicado bajo la <a href=\"http://www.fsf.org/licensing/licenses/agpl-3
#: mediagoblin/templates/mediagoblin/error.html:24
msgid "Image of goblin stressing out"
-msgstr ""
+msgstr "Imagen de un goblin estresándose"
#: mediagoblin/templates/mediagoblin/root.html:25
msgid "Actions"
-msgstr ""
+msgstr "Acciones"
#: mediagoblin/templates/mediagoblin/root.html:31
msgid "Create new collection"
-msgstr ""
+msgstr "Crear nueva colección"
#: mediagoblin/templates/mediagoblin/root.html:34
msgid "Change account settings"
@@ -661,43 +661,43 @@ msgstr "Imágenes para %(media_title)s"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:112
msgid "Toggle Rotate"
-msgstr ""
+msgstr "Alternar Rotar"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
msgid "Perspective"
-msgstr ""
+msgstr "Perspectiva"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
msgid "Front"
-msgstr ""
+msgstr "Frente"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
msgid "Top"
-msgstr ""
+msgstr "Arriba"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
msgid "Side"
-msgstr ""
+msgstr "Lateral"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
msgid "WebGL"
-msgstr ""
+msgstr "WebGL"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:138
msgid "Download model"
-msgstr ""
+msgstr "Descargar modelo"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
msgid "File Format"
-msgstr ""
+msgstr "Formato de Archivo"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
msgid "Object Height"
-msgstr ""
+msgstr "Altura del Objeto"
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
@@ -752,14 +752,6 @@ msgstr "Editar"
msgid "Delete"
msgstr "Borrar"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n%(collection_description)s\n</p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -830,7 +822,7 @@ msgstr "<h3>Añadido en</h3>\n <p>%(date)s</p>"
#: mediagoblin/templates/mediagoblin/user_pages/media.html:202
msgid "Add media to collection"
-msgstr ""
+msgstr "Añadir contenido a la colección"
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:35
#, python-format
@@ -924,14 +916,14 @@ msgid ""
msgstr "Aquí es donde estará ubicado tu contenido, pero parece que aún no has agregado nada."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Parece que aún no hay ningún contenido aquí..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
-msgstr ""
+msgstr "(borrar)"
#: mediagoblin/templates/mediagoblin/utils/collections.html:20
#, python-format
@@ -989,31 +981,31 @@ msgstr "Marcado con"
msgid "Could not read the image file."
msgstr "No se pudo leer el archivo de imagen."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "¡Ups!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
-msgstr ""
+msgstr "Ha ocurrido un error"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
-msgstr ""
+msgstr "Operación no permitida"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
-msgstr ""
+msgstr "¡Lo siento Dave, no puedo permitir que hagas eso!</p><p>Has intentado realizar una operación no permitida. ¿Has vuelto a intentar borrar todas las cuentas de usuario?"
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
" deleted."
-msgstr ""
+msgstr "Parece que no hay ninguna página en esta dirección. ¡Lo siento!</p><p>Si estás seguro de que la dirección es correcta, quizá han borrado o movido la página que estás buscando."
#: mediagoblin/user_pages/forms.py:28
msgid "I am sure I want to delete this"
diff --git a/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.mo
index 155ccd22..ba9aad9b 100644
--- a/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.po
index d877209a..44e8b802 100644
--- a/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -307,7 +307,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -742,14 +742,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -914,12 +906,12 @@ msgid ""
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr ""
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -979,26 +971,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "اوه"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo
index fcef90d8..b0106832 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 98b5b52f..39480ea9 100644
--- a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po
@@ -15,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: French (http://www.transifex.com/projects/p/mediagoblin/language/fr/)\n"
"MIME-Version: 1.0\n"
@@ -314,7 +314,7 @@ msgstr "L'URI de redirection pour l'application, ce champ est <strong>requis</st
msgid "This field is required for public clients"
msgstr "Ce champ est requis pour les clients publics"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "Le client {0} as été enregistré !"
@@ -749,14 +749,6 @@ msgstr "Éditer"
msgid "Delete"
msgstr "Effacer"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -921,12 +913,12 @@ msgid ""
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:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
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 ..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -986,26 +978,26 @@ msgstr "Taggé avec"
msgid "Could not read the image file."
msgstr "Impossible de lire l'image."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Zut !"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.mo
index 2db7a9a9..d38d8938 100644
--- a/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.po
index c953cc03..8041742b 100644
--- a/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PROJECT project.
#
# Translators:
+# <genghiskhan@gmx.ca>, 2012.
# Isratine Citizen <genghiskhan@gmx.ca>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -71,7 +72,7 @@ msgstr "כבר ×ימתת ×ת כתובת הדו×״ל שלך!"
#: mediagoblin/auth/views.py:227
msgid "Resent your verification email."
-msgstr "שליחה מחודשת של ×ימות הדו×״ל שלך."
+msgstr "שלח שוב ×ת דו×״ל ×”×ימות שלך."
#: mediagoblin/auth/views.py:263
msgid ""
@@ -82,11 +83,11 @@ msgstr "דו×״ל נשלח בצירוף הור×ות בנוגע לכיצד × ×™
msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
-msgstr "×œ× × ×™×ª×Ÿ ×”×™×” לשלוח דו×״ל לשחזור סיסמה מ×חר ×•×©× ×”×ž×©×ª×ž×© שלך ×ינו פעיל ×ו שכתובת הדו×״ל של חשבונך ×œ× ×ומתה."
+msgstr "×œ× ×”×™×” ניתן לשלוח דו×״ל לשחזור סיסמה מ×חר ×•×©× ×”×ž×©×ª×ž×© שלך ×ינו פעיל ×ו שכתובת הדו×״ל של חשבונך ×œ× ×ומתה."
#: mediagoblin/auth/views.py:285
msgid "Couldn't find someone with that username or email."
-msgstr "×œ× × ×™×ª×Ÿ ×”×™×” ×œ×ž×¦×•× ×ž×™×©×”×• ×¢× ×©× ×ž×©×ª×ž×© ×ו דו×״ל ×–×”."
+msgstr "×œ× ×”×™×” ניתן ×œ×ž×¦×•× ×ž×™×©×”×• ×¢× ×©× ×ž×©×ª×ž×© ×ו דו×״ל ×–×”."
#: mediagoblin/auth/views.py:333
msgid "You can now log in using your new password."
@@ -136,7 +137,7 @@ msgstr "×זור הכותרת של כתובת מדיה זו. לרוב ×ין ×”×
#: mediagoblin/edit/forms.py:44 mediagoblin/submit/forms.py:41
#: mediagoblin/templates/mediagoblin/utils/license.html:20
msgid "License"
-msgstr "רישיון"
+msgstr "רשיון"
#: mediagoblin/edit/forms.py:50
msgid "Bio"
@@ -192,7 +193,7 @@ msgstr "×תה עורך מדיה של משתמש ×חר. המשך בזהירות
#: mediagoblin/edit/views.py:156
#, python-format
msgid "You added the attachment %s!"
-msgstr ""
+msgstr "הוספת ×ת התצריף %s!"
#: mediagoblin/edit/views.py:181
msgid "You are editing a user's profile. Proceed with caution."
@@ -226,7 +227,7 @@ msgstr "×תה עורך ×וסף של משתמש ×חר. המשך בזהירות
#: mediagoblin/gmg_commands/theme.py:58
msgid "Cannot link theme... no theme set\n"
-msgstr ""
+msgstr "×œ× × ×™×ª×Ÿ לקשר ×ל מוטיב... ×œ× ×”×•×’×“×¨ מוטיב\n"
#: mediagoblin/gmg_commands/theme.py:71
msgid "No asset directory for this theme\n"
@@ -307,7 +308,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr "שדה ×–×” הינו דרוש עבור לקוחות פומביי×"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "הלקוח {0} נרש×!"
@@ -339,11 +340,11 @@ msgstr "לוגו MediaGoblin"
#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
-msgstr ""
+msgstr "החשבון של <a href=\"%(user_url)s\">%(user_name)s</a>"
#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
-msgstr ""
+msgstr "התנתקות"
#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
@@ -378,19 +379,19 @@ msgstr "משוחרר תחת הרשיון <a href=\"http://www.fsf.org/licensing/
#: mediagoblin/templates/mediagoblin/error.html:24
msgid "Image of goblin stressing out"
-msgstr ""
+msgstr "תמונה של גובלין מת×מץ יתר על המידה"
#: mediagoblin/templates/mediagoblin/root.html:25
msgid "Actions"
-msgstr ""
+msgstr "פעולות"
#: mediagoblin/templates/mediagoblin/root.html:31
msgid "Create new collection"
-msgstr ""
+msgstr "צור ×וסף חדש"
#: mediagoblin/templates/mediagoblin/root.html:34
msgid "Change account settings"
-msgstr "שינוי הגדרות חשבון"
+msgstr "שנה הגדרות חשבון"
#: mediagoblin/templates/mediagoblin/root.html:38
#: mediagoblin/templates/mediagoblin/root.html:44
@@ -440,7 +441,7 @@ msgstr "המדיה ×”×חרונה ביותר"
#: mediagoblin/templates/mediagoblin/admin/panel.html:29
msgid ""
"Here you can track the state of media being processed on this instance."
-msgstr "×›×× ×‘×™×›×•×œ×ª×š לעקוב ×חר המצב של המדיה שמתעבדת בשרת ×–×”."
+msgstr "×›×ן ביכולתך לעקוב ×חר המצב של המדיה שמתעבדת בשרת ×–×”."
#: mediagoblin/templates/mediagoblin/admin/panel.html:32
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:32
@@ -460,7 +461,7 @@ msgstr "העל×ות ×לה נכשלו להתעבד:"
#: mediagoblin/templates/mediagoblin/admin/panel.html:90
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:86
msgid "No failed entries!"
-msgstr ""
+msgstr "×ין רשומות כושלות!"
#: mediagoblin/templates/mediagoblin/admin/panel.html:92
msgid "Last 10 successful uploads"
@@ -474,20 +475,20 @@ msgstr "×ין ×¨×™×©×•×ž×™× ×ž×¢×•×‘×“×™×, עדיין!"
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:28
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:36
msgid "Set your new password"
-msgstr "הגדרת סיסמתך החדשה"
+msgstr "הגדר ×ת סיסמתך החדשה"
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:39
msgid "Set password"
-msgstr "הגדרת סיסמה"
+msgstr "הגדר סיסמה"
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:23
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:31
msgid "Recover password"
-msgstr "שחזור סיסמה"
+msgstr "שחזר סיסמה"
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:34
msgid "Send instructions"
-msgstr "שליחת הור×ות"
+msgstr "שלח הור×ות"
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
#, python-format
@@ -501,7 +502,7 @@ msgid ""
"\n"
"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בתוך דפדפן הרשת שלך:\n\n%(verification_url)s\n\nבמידה ו×תה חושב שמדובר בשגי××”, פשוט ×”×ª×¢×œ× ×ž×Ÿ דו×״ל ×–×” והמשך להיות\nגובלין מ×ושר!"
+msgstr "×©×œ×•× %(username)s,\n\nבכדי לשנות ×ת סיסמתך ×צל GNU MediaGoblin, עליך לפתוח ×ת הכתובת הב××” \nבתוך דפדפן הרשת שלך:\n\n%(verification_url)s\n\nבמידה ו×תה חושב שמדובר בשגי××”, פשוט ×”×ª×¢×œ× ×ž×Ÿ דו×״ל ×–×” והמשך להיות\nגובלין מ×ושר!"
#: mediagoblin/templates/mediagoblin/auth/login.html:39
msgid "Logging in failed!"
@@ -537,7 +538,7 @@ msgid ""
"your web browser:\n"
"\n"
"%(verification_url)s"
-msgstr "×©×œ×•× %(username)s,\n\nבכדי להפעיל ×ת חשבונך ×צל GNU MediaGoblin, × × ×œ×¤×ª×•×— ×ת הכתובת הב××”\nבתוך דפדפן הרשת שלך:\n\n%(verification_url)s"
+msgstr "×©×œ×•× %(username)s,\n\nבכדי להפעיל ×ת חשבונך ×צל GNU MediaGoblin, עליך לפתוח ×ת הכתובת הב××”\nבתוך דפדפן הרשת שלך:\n\n%(verification_url)s"
#: mediagoblin/templates/mediagoblin/edit/attachments.html:23
#: mediagoblin/templates/mediagoblin/edit/attachments.html:35
@@ -572,13 +573,13 @@ msgstr "ביטול"
#: mediagoblin/templates/mediagoblin/edit/edit_collection.html:33
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:41
msgid "Save changes"
-msgstr "שמירת שינויי×"
+msgstr "שמור שינויי×"
#: mediagoblin/templates/mediagoblin/edit/edit.html:23
#: mediagoblin/templates/mediagoblin/edit/edit.html:35
#, python-format
msgid "Editing %(media_title)s"
-msgstr "עריכת %(media_title)s"
+msgstr "ערוך %(media_title)s"
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:28
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
@@ -610,11 +611,11 @@ msgstr "מדיה מתויגת ×¢×: %(tag_name)s"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:136
#: mediagoblin/templates/mediagoblin/media_displays/video.html:52
msgid "Download"
-msgstr "הורדה"
+msgstr "הורד"
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:38
msgid "Original"
-msgstr "מקורי/ת"
+msgstr "מקורית"
#: mediagoblin/templates/mediagoblin/media_displays/audio.html:44
msgid ""
@@ -655,22 +656,22 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
msgid "Perspective"
-msgstr ""
+msgstr "נקודת מבט"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
msgid "Front"
-msgstr ""
+msgstr "לפני×"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
msgid "Top"
-msgstr ""
+msgstr "ר×ש"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
msgid "Side"
-msgstr ""
+msgstr "צד"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
@@ -683,11 +684,11 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
msgid "File Format"
-msgstr ""
+msgstr "פורמט קובץ"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
msgid "Object Height"
-msgstr ""
+msgstr "גובה ×ובייקט"
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
@@ -709,13 +710,13 @@ msgstr "קובץ WebM ‫(640p; VP8/Vorbis)"
#: mediagoblin/templates/mediagoblin/submit/collection.html:26
msgid "Add a collection"
-msgstr "הוספת ×וסף"
+msgstr "הוסף ×וסף"
#: mediagoblin/templates/mediagoblin/submit/collection.html:30
#: mediagoblin/templates/mediagoblin/submit/start.html:34
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:82
msgid "Add"
-msgstr "הוספה"
+msgstr "הוסף"
#: mediagoblin/templates/mediagoblin/submit/start.html:23
#: mediagoblin/templates/mediagoblin/submit/start.html:30
@@ -735,20 +736,12 @@ msgstr "%(collection_title)s מ×ת <a href=\"%(user_url)s\">%(username)s</a>"
#: mediagoblin/templates/mediagoblin/user_pages/collection.html:52
#: mediagoblin/templates/mediagoblin/user_pages/media.html:87
msgid "Edit"
-msgstr "עריכה"
+msgstr "ערוך"
#: mediagoblin/templates/mediagoblin/user_pages/collection.html:56
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
msgid "Delete"
-msgstr "מחיקה"
-
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
+msgstr "מחק"
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
@@ -759,7 +752,7 @@ msgstr "ב×מת למחוק ×ת %(title)s?"
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:47
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
msgid "Delete permanently"
-msgstr "מחיקה לצמיתות"
+msgstr "מחק לצמיתות"
#: mediagoblin/templates/mediagoblin/user_pages/collection_item_confirm_remove.html:31
#, python-format
@@ -768,7 +761,7 @@ msgstr "ב×מת להסיר ×ת %(media_title)s מן %(collection_title)s?"
#: mediagoblin/templates/mediagoblin/user_pages/collection_item_confirm_remove.html:53
msgid "Remove"
-msgstr "הסרה"
+msgstr "הסר"
#: mediagoblin/templates/mediagoblin/user_pages/comment_email.txt:19
#, python-format
@@ -794,7 +787,7 @@ msgstr "■עיון במדיה מ×ת <a href=\"%(user_url)s\">%(username)s</a>
#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
msgid "Add a comment"
-msgstr "הוספת תגובה"
+msgstr "הוסף תגובה"
#: mediagoblin/templates/mediagoblin/user_pages/media.html:109
msgid ""
@@ -805,7 +798,7 @@ msgstr "ביכולתך לעשות שימוש בתחביר <a href=\"http://darin
#: mediagoblin/templates/mediagoblin/user_pages/media.html:113
msgid "Add this comment"
-msgstr "הוספת תגובה זו"
+msgstr "הוסף ×ת תגובה זו"
#: mediagoblin/templates/mediagoblin/user_pages/media.html:132
msgid "at"
@@ -820,12 +813,12 @@ msgstr "<h3>הוסף בת×ריך</h3>\n <p>%(date)s</p>"
#: mediagoblin/templates/mediagoblin/user_pages/media.html:202
msgid "Add media to collection"
-msgstr ""
+msgstr "הוסף מדיה ל×וסף"
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:35
#, python-format
msgid "Add %(title)s to collection"
-msgstr ""
+msgstr "הוסף ×ת %(title)s ל×וסף"
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:51
msgid "+"
@@ -833,7 +826,7 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:56
msgid "Add a new collection"
-msgstr "הוספת ×וסף חדש"
+msgstr "הוסף ×וסף חדש"
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:29
msgid ""
@@ -874,7 +867,7 @@ msgstr "במידה וזה ל×:"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
msgid "Resend verification email"
-msgstr "שליחה מחודשת של ×ימות דו×״ל"
+msgstr "שלח דו×״ל ×ימות"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
msgid ""
@@ -896,7 +889,7 @@ msgstr "×”× ×” ×ž×§×•× ×œ×•×ž×¨ ל××—×¨×™× ×ודותייך."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
msgid "Edit profile"
-msgstr "עריכת דיוקן"
+msgstr "ערוך דיוקן"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
msgid "This user hasn't filled in their profile (yet)."
@@ -905,7 +898,7 @@ msgstr "משתמש ×–×” ×œ× ×ž×™×œ× ×“×™×•×§×Ÿ (עדיין)."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:132
#, python-format
msgid "View all of %(username)s's media"
-msgstr "הצגת כל המדיה של %(username)s"
+msgstr "צפיה בכל המדיה של %(username)s"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:145
msgid ""
@@ -914,14 +907,14 @@ msgid ""
msgstr "×›×ן ×–×” ×”×ž×§×•× ×‘×• המדיה שלך תופיע, ××•×œ× ×œ× × ×¨××” שהוספת משהו עדיין."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "×œ× × ×¨××” שיש ×›×ן מדיה כלשהי עדיין..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
-msgstr ""
+msgstr "(הסר)"
#: mediagoblin/templates/mediagoblin/utils/collections.html:20
#, python-format
@@ -977,33 +970,33 @@ msgstr "מתויגת ×¢×"
#: mediagoblin/tools/exif.py:78
msgid "Could not read the image file."
-msgstr "×œ× × ×™×ª×Ÿ ×”×™×” ×œ×§×¨×•× ×ת קובץ התמונה."
+msgstr "×œ× ×”×™×” ניתן ×œ×§×¨×•× ×ת קובץ התמונה."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "×ופס!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
-msgstr ""
+msgstr "×ירעה שגי××”"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
-msgstr ""
+msgstr "פעולה ×œ× ×ž×•×¨×©×™×ª"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
-msgstr ""
+msgstr "צר לי דוד, ×× ×™ ×œ× ×™×›×•×œ להתיר לך לעשות ×–×ת!</p><p>ניסית לבצע פעולה ש×ינך מורשה לעשות. ×”×× × ×™×¡×™×ª למחוק ×ת כל החשבונות של ×”×ž×©×ª×ž×©×™× ×©×•×‘?"
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
" deleted."
-msgstr ""
+msgstr "×œ× × ×¨××” ×©×§×™×™× ×¢×ž×•×“ בכתובת זו. צר לי!</p><p>×× ×תה בטוח שהכתובת ×”×™× ×” מדויקת, ייתכן שהעמוד ש×תה מחפש כעת הועבר ×ו נמחק."
#: mediagoblin/user_pages/forms.py:28
msgid "I am sure I want to delete this"
@@ -1045,16 +1038,16 @@ msgstr "\"%s\" כבר ×§×™×™× ×‘×וסף \"%s\""
#: mediagoblin/user_pages/views.py:253
#, python-format
msgid "\"%s\" added to collection \"%s\""
-msgstr "\"%s\" הוסף ×ל ×”×וסף \"%s\""
+msgstr "\"%s\" התווסף ×ל ×”×וסף \"%s\""
#: mediagoblin/user_pages/views.py:261
msgid "Please check your entries and try again."
-msgstr "× × ×œ×‘×“×•×§ ×ת רישומייך ולנסות שוב."
+msgstr "×× × ×‘×“×•×§ ×ת רשומותיך ונסה שוב."
#: mediagoblin/user_pages/views.py:292
msgid ""
"Some of the files with this entry seem to be missing. Deleting anyway."
-msgstr "נר××” שכמה ×§×‘×¦×™× ×¢× ×¨×™×©×•× ×–×” חסרי×. למחוק בכל ×–×ת"
+msgstr "נר××” שכמה ×§×‘×¦×™× ×¢× ×¨×™×©×•× ×–×” חסרי×. מוחק בכל ×–×ת"
#: mediagoblin/user_pages/views.py:297
msgid "You deleted the media."
diff --git a/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo
index 488d8dd2..32ec1bc2 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 bcb0f925..34f97df5 100644
--- a/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -308,7 +308,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -743,14 +743,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -915,12 +907,12 @@ msgid ""
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr ""
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -980,26 +972,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr ""
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.mo
index b2157a19..23f9f1bf 100644
--- a/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.po
index 61ab89e6..04a1f7f6 100644
--- a/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -192,7 +192,7 @@ msgstr "Þú ert að breyta efni annars notanda. Farðu mjög varlega."
#: mediagoblin/edit/views.py:156
#, python-format
msgid "You added the attachment %s!"
-msgstr ""
+msgstr "Þú bættir við viðhenginu %s!"
#: mediagoblin/edit/views.py:181
msgid "You are editing a user's profile. Proceed with caution."
@@ -307,7 +307,7 @@ msgstr "Ãframsendingarvefslóðin fyrir forritin, þessi reitur\n er
msgid "This field is required for public clients"
msgstr "Þessi reitur er nauðsynlegur fyrir opinbera biðlara"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "Biðlarinn {0} hefur verið skráður!"
@@ -339,11 +339,11 @@ msgstr "MediaGoblin einkennismerkið"
#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
-msgstr ""
+msgstr "Notandaaðgangur <a href=\"%(user_url)s\">%(user_name)s</a>"
#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
-msgstr ""
+msgstr "útskrá"
#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
@@ -378,15 +378,15 @@ msgstr "Gefið út undir <a href=\"http://www.fsf.org/licensing/licenses/agpl-3.
#: mediagoblin/templates/mediagoblin/error.html:24
msgid "Image of goblin stressing out"
-msgstr ""
+msgstr "Mynd af durt í stresskasti"
#: mediagoblin/templates/mediagoblin/root.html:25
msgid "Actions"
-msgstr ""
+msgstr "Aðgerðir"
#: mediagoblin/templates/mediagoblin/root.html:31
msgid "Create new collection"
-msgstr ""
+msgstr "Búa til nýtt albúm"
#: mediagoblin/templates/mediagoblin/root.html:34
msgid "Change account settings"
@@ -651,43 +651,43 @@ msgstr "Mynd fyrir %(media_title)s"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:112
msgid "Toggle Rotate"
-msgstr ""
+msgstr "Stilla snúning af eða á"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
msgid "Perspective"
-msgstr ""
+msgstr "Sjónhorf"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
msgid "Front"
-msgstr ""
+msgstr "Framhlið"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
msgid "Top"
-msgstr ""
+msgstr "Toppur"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
msgid "Side"
-msgstr ""
+msgstr "Hlið"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
msgid "WebGL"
-msgstr ""
+msgstr "WebGL"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:138
msgid "Download model"
-msgstr ""
+msgstr "Hala niður líkani"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
msgid "File Format"
-msgstr ""
+msgstr "Skráarsnið"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
msgid "Object Height"
-msgstr ""
+msgstr "Hæð hlutar"
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
@@ -742,14 +742,6 @@ msgstr "Breyta"
msgid "Delete"
msgstr "Eyða"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -820,7 +812,7 @@ msgstr "<h3>Bætt við:</h3>\n <p>%(date)s</p>"
#: mediagoblin/templates/mediagoblin/user_pages/media.html:202
msgid "Add media to collection"
-msgstr ""
+msgstr "Bæta efni við albúmið"
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:35
#, python-format
@@ -914,14 +906,14 @@ msgid ""
msgstr "Þetta er staðurinn þar sem efnið þitt birtist en þú virðist ekki hafa sent neitt inn ennþá."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Það virðist ekki vera neitt efni hérna ennþá..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
-msgstr ""
+msgstr "(fjarlægja)"
#: mediagoblin/templates/mediagoblin/utils/collections.html:20
#, python-format
@@ -979,31 +971,31 @@ msgstr "Merkt með"
msgid "Could not read the image file."
msgstr "Gat ekki lesið myndskrána."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Obbosí!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
-msgstr ""
+msgstr "Villa kom upp"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
-msgstr ""
+msgstr "Aðgerð ekki leyfileg"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
-msgstr ""
+msgstr "Fyrirgefðu Davíð. Ég get ekki leyft þér að gera þetta!</p></p>Þú hefur reynt að framkvæma aðger sem þú hefur ekki leyfi til. Varstu að reyna að eyða öllum notendunum aftur?"
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
" deleted."
-msgstr ""
+msgstr "Því miður! Það virðist ekki vera nein síða á þessari vefslóð.</p><p>Ef þú ert viss um að vefslóðin sé rétt hefur vefsíðan sem þú ert að leita að kannski verið flutt eða fjarlægð."
#: mediagoblin/user_pages/forms.py:28
msgid "I am sure I want to delete this"
diff --git a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo
index cd60d011..dad0aec4 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 834c4c49..e91926a1 100644
--- a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -310,7 +310,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -745,14 +745,6 @@ msgstr "Modifica"
msgid "Delete"
msgstr "Elimina"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -917,12 +909,12 @@ msgid ""
msgstr "Qui è dove appariranno i tuoi files multimediali, ma sembra che tu non abbia ancora aggiunto niente."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Sembra che non ci sia ancora nessun file multimediale qui..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -982,26 +974,26 @@ msgstr "Taggato con"
msgid "Could not read the image file."
msgstr "Impossibile leggere il file immagine."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Oops!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo
index 1b45aff2..1ebdba16 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 f902893a..abbf5b26 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://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -307,7 +307,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -742,14 +742,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -914,12 +906,12 @@ msgid ""
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr ""
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -979,26 +971,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr ""
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.mo
index 5ffc82dd..e7602e15 100644
--- a/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.po
index e6b3cf7a..6a35c0e0 100644
--- a/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -307,7 +307,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr "ì´ í•­ëª©ì€ ê³µê°œ 사용ìžë“¤ì„ 위해 ê¼­ í•„ìš” 합니다."
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "ì‚¬ìš©ìž {0}ë‹˜ì´ ë“±ë¡ ë˜ì—ˆìŠµë‹ˆë‹¤!"
@@ -742,14 +742,6 @@ msgstr "수정"
msgid "Delete"
msgstr "삭제"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -914,12 +906,12 @@ msgid ""
msgstr "ì´ê³³ì— 등ë¡í•œ 미디어가 나타나게 ë©ë‹ˆë‹¤. 하지만 ì•„ì§ ì•„ë¬´ëŸ° 미디어를 등ë¡í•˜ì§€ 않으셨네요."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "ì•„ì§ ì–´ë– í•œ ë¯¸ë””ì–´ë„ ì¡´ìž¬í•˜ì§€ 않습니다."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -979,26 +971,26 @@ msgstr "태그 정보"
msgid "Could not read the image file."
msgstr "ì´ë¯¸ì§€ 파ì¼ì„ ì½ì„ 수 없습니다."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "ì›ìФ!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo
index fbe19c51..afa8849c 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 3abb2b0f..ba2907fb 100644
--- a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -308,7 +308,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -743,14 +743,6 @@ msgstr "Pas aan"
msgid "Delete"
msgstr "Verwijderen"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -915,12 +907,12 @@ msgid ""
msgstr "Dit is waar je nieuwe media zal verschijnen, maar het lijkt erop dat je nog niets heb toegevoegd."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Het lijkt erop dat er nog geen media is."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -980,26 +972,26 @@ msgstr "Getagged met"
msgid "Could not read the image file."
msgstr "Kon het afbeeldingsbestand niet lezen."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Oeps!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo
index 2953d800..206c906c 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 24f876fd..2cfe7f61 100644
--- a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
-"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 16:04+0000\n"
+"Last-Translator: velmont <odin.omdal@gmail.com>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/mediagoblin/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -192,7 +192,7 @@ msgstr "Trå varsamt, du endrar nokon andre sine verk."
#: mediagoblin/edit/views.py:156
#, python-format
msgid "You added the attachment %s!"
-msgstr ""
+msgstr "La til vedlegg %s."
#: mediagoblin/edit/views.py:181
msgid "You are editing a user's profile. Proceed with caution."
@@ -307,7 +307,7 @@ msgstr "Omdirigerings-URI-en for programmene. Denne feltet <strong>krevst</stron
msgid "This field is required for public clients"
msgstr "Dette feltet krevst for opne (public) klientar"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "Klienten {0} er registrert."
@@ -339,11 +339,11 @@ msgstr "MediaGoblin"
#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
-msgstr ""
+msgstr "<a href=\"%(user_url)s\">%(user_name)s</a> sin konto"
#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
-msgstr ""
+msgstr "Logg ut"
#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
@@ -378,15 +378,15 @@ msgstr "Lisensiert med <a href=\"http://www.fsf.org/licensing/licenses/agpl-3.0.
#: mediagoblin/templates/mediagoblin/error.html:24
msgid "Image of goblin stressing out"
-msgstr ""
+msgstr "Bilete av stressa goblin"
#: mediagoblin/templates/mediagoblin/root.html:25
msgid "Actions"
-msgstr ""
+msgstr "Handlingar"
#: mediagoblin/templates/mediagoblin/root.html:31
msgid "Create new collection"
-msgstr ""
+msgstr "Lag ny samling"
#: mediagoblin/templates/mediagoblin/root.html:34
msgid "Change account settings"
@@ -651,43 +651,43 @@ msgstr "Bilete for %(media_title)s"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:112
msgid "Toggle Rotate"
-msgstr ""
+msgstr "Slå av/på rotering"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
msgid "Perspective"
-msgstr ""
+msgstr "Perspektiv"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
msgid "Front"
-msgstr ""
+msgstr "Front"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
msgid "Top"
-msgstr ""
+msgstr "Topp"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
msgid "Side"
-msgstr ""
+msgstr "Side"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
msgid "WebGL"
-msgstr ""
+msgstr "WebGL"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:138
msgid "Download model"
-msgstr ""
+msgstr "Last ned modell"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
msgid "File Format"
-msgstr ""
+msgstr "Filformat"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
msgid "Object Height"
-msgstr ""
+msgstr "Objekthøgd"
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
@@ -742,14 +742,6 @@ msgstr "Endra"
msgid "Delete"
msgstr "Slett"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -820,7 +812,7 @@ msgstr "<h3>Lagt til</h3>\n <p>%(date)s</p>"
#: mediagoblin/templates/mediagoblin/user_pages/media.html:202
msgid "Add media to collection"
-msgstr ""
+msgstr "Legg til verk til samling"
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:35
#, python-format
@@ -914,14 +906,14 @@ msgid ""
msgstr "Her kjem verka dine."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Ser ikkje ut til at det finst nokon verk her nett no."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
-msgstr ""
+msgstr "(fjern)"
#: mediagoblin/templates/mediagoblin/utils/collections.html:20
#, python-format
@@ -979,31 +971,31 @@ msgstr "Merka med"
msgid "Could not read the image file."
msgstr "Klarte ikkje lesa biletefila."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Oops."
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
-msgstr ""
+msgstr "Noko gjekk gale"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
-msgstr ""
+msgstr "Ulovleg operasjon"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
-msgstr ""
+msgstr "Orsak Dave, eg kan ikkje la deg gjera det!&lt;HAL2000&gt;</p>\n<p>Du prøvde å gjera noko du ikkje har løyve til. Prøvar du å sletta alle brukarkonti no igjen?"
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
" deleted."
-msgstr ""
+msgstr "Ser ikkje ut til å finnast noko her. Orsak.</p>\n<p>Dersom du er sikker på at adressa finst, so er ho truleg flytta eller sletta."
#: mediagoblin/user_pages/forms.py:28
msgid "I am sure I want to delete this"
diff --git a/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.mo
index cbbed538..64a4d00f 100644
--- a/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.po
index 152d2533..b516065d 100644
--- a/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -307,7 +307,7 @@ msgstr "Przekierowanie URI dla aplikacji, to pole\n jest <strong>wyma
msgid "This field is required for public clients"
msgstr "To pole jest wymagane dla klientów publicznych"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "Klient {0} został zarejestrowany!"
@@ -742,14 +742,6 @@ msgstr "Edytuj"
msgid "Delete"
msgstr "Usuń"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -914,12 +906,12 @@ msgid ""
msgstr "Tu będą widoczne twoje media, ale na razie niczego tu jeszcze nie ma."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Tu nie ma jeszcze żadnych mediów..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -979,26 +971,26 @@ msgstr "Znaczniki:"
msgid "Could not read the image file."
msgstr "Nie udało się odczytać pliku grafiki."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Ups!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo
index 4a027c1c..2cad018a 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 d1d098b8..66a28516 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://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/mediagoblin/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -308,7 +308,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -743,14 +743,6 @@ msgstr "Editar"
msgid "Delete"
msgstr "Apagar"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -915,12 +907,12 @@ msgid ""
msgstr "Aqui é onde sua mídia vai aparecer, mas parece que você não adicionou nada ainda."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Aparentemente não há nenhuma mídia aqui ainda..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -980,26 +972,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Oops"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo
index 07bfd9b2..dc64a04b 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 364a6017..4929de7a 100644
--- a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-03 13:23-0600\n"
-"PO-Revision-Date: 2012-12-04 04:03+0000\n"
-"Last-Translator: George Pop <gapop@hotmail.com>\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
+"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/mediagoblin/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -212,7 +212,7 @@ msgid "Wrong password"
msgstr "Parolă incorectă"
#: mediagoblin/edit/views.py:287 mediagoblin/submit/views.py:211
-#: mediagoblin/user_pages/views.py:215
+#: mediagoblin/user_pages/views.py:210
#, python-format
msgid "You already have a collection called \"%s\"!"
msgstr "Ai deja o colecție numită \"%s\"!"
@@ -238,7 +238,7 @@ msgid "However, old link directory symlink found; removed.\n"
msgstr "A fost însă găsit un symlink către vechiul folder; s-a șters.\n"
#: mediagoblin/media_types/__init__.py:60
-#: mediagoblin/media_types/__init__.py:120
+#: mediagoblin/media_types/__init__.py:101
msgid "Sorry, I don't support that file type :("
msgstr "Scuze, nu recunosc acest tip de fișier :("
@@ -308,7 +308,7 @@ msgstr "URI-ul de redirectare pentru aplicații, această rubrică\n
msgid "This field is required for public clients"
msgstr "Această rubrică este obligatorie pentru clienții publici"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "Clientul {0} a fost înregistrat!"
@@ -333,43 +333,43 @@ msgstr "Ura! Trimis!"
msgid "Collection \"%s\" added!"
msgstr "Colecția \"%s\" a fost creată!"
-#: mediagoblin/templates/mediagoblin/base.html:50
+#: mediagoblin/templates/mediagoblin/base.html:48
msgid "MediaGoblin logo"
msgstr "logo MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:56
+#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
msgstr "Contul lui <a href=\"%(user_url)s\">%(user_name)s</a>"
-#: mediagoblin/templates/mediagoblin/base.html:62
+#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
msgstr "Ieșire"
-#: mediagoblin/templates/mediagoblin/base.html:64
+#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
msgid "Add media"
msgstr "Trimite fișier"
-#: mediagoblin/templates/mediagoblin/base.html:70
+#: mediagoblin/templates/mediagoblin/base.html:68
msgid "Verify your email!"
msgstr "Verifică adresa de e-mail!"
-#: mediagoblin/templates/mediagoblin/base.html:75
+#: mediagoblin/templates/mediagoblin/base.html:73
#: mediagoblin/templates/mediagoblin/auth/login.html:28
#: mediagoblin/templates/mediagoblin/auth/login.html:36
#: mediagoblin/templates/mediagoblin/auth/login.html:54
msgid "Log in"
msgstr "Autentificare"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:87
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project."
msgstr "Construit cu <a href=\"http://mediagoblin.org\">MediaGoblin</a>, un proiect <a href=\"http://gnu.org/\">GNU</a>."
-#: mediagoblin/templates/mediagoblin/base.html:92
+#: mediagoblin/templates/mediagoblin/base.html:90
#, python-format
msgid ""
"Released under the <a "
@@ -608,6 +608,7 @@ msgstr "Fișier etichetat cu tag-urile: %(tag_name)s"
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
#: mediagoblin/templates/mediagoblin/media_displays/audio.html:56
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:136
#: mediagoblin/templates/mediagoblin/media_displays/video.html:52
msgid "Download"
msgstr "Download"
@@ -639,6 +640,56 @@ msgstr "Fișierul original"
msgid "WebM file (Vorbis codec)"
msgstr "Fișier WebM (codec Vorbis)"
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:87
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:93
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:99
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:105
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
+#, python-format
+msgid "Image for %(media_title)s"
+msgstr "Imagine pentru %(media_title)s"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:112
+msgid "Toggle Rotate"
+msgstr "Rotire"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
+msgid "Perspective"
+msgstr "Perspectivă"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
+msgid "Front"
+msgstr "Din față"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
+msgid "Top"
+msgstr "De sus"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
+msgid "Side"
+msgstr "Lateral"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
+msgid "WebGL"
+msgstr "WebGL"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:138
+msgid "Download model"
+msgstr "Descarcă modelul"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
+msgid "File Format"
+msgstr "Formatul fișierului"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
+msgid "Object Height"
+msgstr "Înălțimea obiectului"
+
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
"Sorry, this video will not work because \n"
@@ -692,14 +743,6 @@ msgstr "Editare"
msgid "Delete"
msgstr "Șterge"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -742,12 +785,6 @@ msgstr "Fișierele media ale lui <a href=\"%(user_url)s\">%(username)s</a>"
msgid "â– Browsing media by <a href=\"%(user_url)s\">%(username)s</a>"
msgstr "<p>■Fișierele media ale lui <a href=\"%(user_url)s\">%(username)s</a></p>"
-#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
-#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
-#, python-format
-msgid "Image for %(media_title)s"
-msgstr "Imagine pentru %(media_title)s"
-
#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
msgid "Add a comment"
msgstr "Adaugă un comentariu"
@@ -870,12 +907,12 @@ msgid ""
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:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Nu pare să existe niciun fișier media deocamdată..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr "(șterge)"
@@ -935,26 +972,26 @@ msgstr "Etichete"
msgid "Could not read the image file."
msgstr "Fișierul cu imaginea nu a putut fi citit."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Hopa!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr "S-a produs o eroare"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr "Operația nu este permisă"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr "Îmi pare rău, Dave, nu te pot lăsa să faci asta!</p><p>Ai încercat să faci o operație nepermisă. Ai încercat iar să ștergi toate conturile utilizatorilor?"
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
@@ -981,74 +1018,74 @@ msgstr "Adaugă o notiță"
msgid "commented on your post"
msgstr "a făcut un comentariu la postarea ta"
-#: mediagoblin/user_pages/views.py:161
+#: mediagoblin/user_pages/views.py:156
msgid "Oops, your comment was empty."
msgstr "Hopa, ai uitat să scrii comentariul."
-#: mediagoblin/user_pages/views.py:167
+#: mediagoblin/user_pages/views.py:162
msgid "Your comment has been posted!"
msgstr "Comentariul tău a fost trimis!"
-#: mediagoblin/user_pages/views.py:235
+#: mediagoblin/user_pages/views.py:230
msgid "You have to select or add a collection"
msgstr "Trebuie să alegi sau să creezi o colecție"
-#: mediagoblin/user_pages/views.py:243
+#: mediagoblin/user_pages/views.py:238
#, python-format
msgid "\"%s\" already in collection \"%s\""
msgstr "\"%s\" este deja în colecția \"%s\""
-#: mediagoblin/user_pages/views.py:258
+#: mediagoblin/user_pages/views.py:253
#, python-format
msgid "\"%s\" added to collection \"%s\""
msgstr "\"%s\" a fost adăugat la colecția \"%s\""
-#: mediagoblin/user_pages/views.py:266
+#: mediagoblin/user_pages/views.py:261
msgid "Please check your entries and try again."
msgstr "Verifică datele și încearcă din nou."
-#: mediagoblin/user_pages/views.py:297
+#: mediagoblin/user_pages/views.py:292
msgid ""
"Some of the files with this entry seem to be missing. Deleting anyway."
msgstr "Unele fișiere din acest entry par să lipsească. Ștergem, totuși."
-#: mediagoblin/user_pages/views.py:302
+#: mediagoblin/user_pages/views.py:297
msgid "You deleted the media."
msgstr "Ai șters acest fișier"
-#: mediagoblin/user_pages/views.py:309
+#: mediagoblin/user_pages/views.py:304
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:317
+#: mediagoblin/user_pages/views.py:312
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ă prudență."
-#: mediagoblin/user_pages/views.py:379
+#: mediagoblin/user_pages/views.py:370
msgid "You deleted the item from the collection."
msgstr "Ai șters acest articol din colecție."
-#: mediagoblin/user_pages/views.py:383
+#: mediagoblin/user_pages/views.py:374
msgid "The item was not removed because you didn't check that you were sure."
msgstr "Articolul nu a fost șters pentru că nu ai confirmat că ești sigur(ă)."
-#: mediagoblin/user_pages/views.py:393
+#: mediagoblin/user_pages/views.py:384
msgid ""
"You are about to delete an item from another user's collection. Proceed with"
" caution."
msgstr "Urmează să ștergi un articol din colecția unui alt utilizator. Se recomandă prudență."
-#: mediagoblin/user_pages/views.py:426
+#: mediagoblin/user_pages/views.py:417
#, python-format
msgid "You deleted the collection \"%s\""
msgstr "Ai șters colecția \"%s\""
-#: mediagoblin/user_pages/views.py:433
+#: mediagoblin/user_pages/views.py:424
msgid ""
"The collection was not deleted because you didn't check that you were sure."
msgstr "Colecția nu a fost ștearsă pentru că nu ai confirmat că ești sigur(ă)."
-#: mediagoblin/user_pages/views.py:443
+#: mediagoblin/user_pages/views.py:434
msgid ""
"You are about to delete another user's collection. Proceed with caution."
msgstr "Urmează să ștergi colecția unui alt utilizator. Se recomandă prudență."
diff --git a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo
index 90d2cfda..5cb985ec 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 81a64c9f..f7ae7d29 100644
--- a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-03 13:23-0600\n"
-"PO-Revision-Date: 2012-12-05 12:41+0000\n"
-"Last-Translator: aleksejrs <deletesoftware@yandex.ru>\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+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"
@@ -211,7 +211,7 @@ msgid "Wrong password"
msgstr "Ðеправильный пароль"
#: mediagoblin/edit/views.py:287 mediagoblin/submit/views.py:211
-#: mediagoblin/user_pages/views.py:215
+#: mediagoblin/user_pages/views.py:210
#, python-format
msgid "You already have a collection called \"%s\"!"
msgstr "У Ð²Ð°Ñ ÑƒÐ¶Ðµ еÑть ÐºÐ¾Ð»Ð»ÐµÐºÑ†Ð¸Ñ Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ «%s»!"
@@ -237,7 +237,7 @@ msgid "However, old link directory symlink found; removed.\n"
msgstr "Однако найдена (и удалена) ÑÑ‚Ð°Ñ€Ð°Ñ ÑимволичеÑÐºÐ°Ñ ÑÑылка на каталог.\n"
#: mediagoblin/media_types/__init__.py:60
-#: mediagoblin/media_types/__init__.py:120
+#: mediagoblin/media_types/__init__.py:101
msgid "Sorry, I don't support that file type :("
msgstr "Увы, Ñ Ð½Ðµ поддерживаю Ñтот тип файлов :("
@@ -307,7 +307,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -332,43 +332,43 @@ msgstr "Ура! Файл загружен!"
msgid "Collection \"%s\" added!"
msgstr "ÐšÐ¾Ð»Ð»ÐµÐºÑ†Ð¸Ñ Â«%s» добавлена!"
-#: mediagoblin/templates/mediagoblin/base.html:50
+#: mediagoblin/templates/mediagoblin/base.html:48
msgid "MediaGoblin logo"
msgstr "Символ MediaGoblin"
-#: mediagoblin/templates/mediagoblin/base.html:56
+#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
msgstr "Ð£Ñ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ <a href=\"%(user_url)s\">%(user_name)s</a>"
-#: mediagoblin/templates/mediagoblin/base.html:62
+#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
msgstr "завершение ÑеанÑа"
-#: mediagoblin/templates/mediagoblin/base.html:64
+#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
msgid "Add media"
msgstr "Добавить файлы"
-#: mediagoblin/templates/mediagoblin/base.html:70
+#: mediagoblin/templates/mediagoblin/base.html:68
msgid "Verify your email!"
msgstr "Подтвердите ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты!"
-#: mediagoblin/templates/mediagoblin/base.html:75
+#: mediagoblin/templates/mediagoblin/base.html:73
#: mediagoblin/templates/mediagoblin/auth/login.html:28
#: mediagoblin/templates/mediagoblin/auth/login.html:36
#: mediagoblin/templates/mediagoblin/auth/login.html:54
msgid "Log in"
msgstr "Войти"
-#: mediagoblin/templates/mediagoblin/base.html:89
+#: mediagoblin/templates/mediagoblin/base.html:87
msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project."
msgstr "Работает на <a href=\"http://mediagoblin.org\">MediaGoblin</a>, проекте <a href=\"http://gnu.org/\">GNU</a>."
-#: mediagoblin/templates/mediagoblin/base.html:92
+#: mediagoblin/templates/mediagoblin/base.html:90
#, python-format
msgid ""
"Released under the <a "
@@ -607,6 +607,7 @@ msgstr "Файлы Ñ Ð¼ÐµÑ‚ÐºÐ¾Ð¹: %(tag_name)s"
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
#: mediagoblin/templates/mediagoblin/media_displays/audio.html:56
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:136
#: mediagoblin/templates/mediagoblin/media_displays/video.html:52
msgid "Download"
msgstr "Скачать"
@@ -638,6 +639,56 @@ msgstr "ИÑходный файл"
msgid "WebM file (Vorbis codec)"
msgstr "WebMâ€Ñ„айл (кодек — Vorbis)"
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:87
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:93
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:99
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:105
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
+#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
+#, python-format
+msgid "Image for %(media_title)s"
+msgstr "Изображение «%(media_title)s»"
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:112
+msgid "Toggle Rotate"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
+msgid "Perspective"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
+msgid "Front"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
+msgid "Top"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
+msgid "Side"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
+msgid "WebGL"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:138
+msgid "Download model"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
+msgid "File Format"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
+msgid "Object Height"
+msgstr ""
+
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
"Sorry, this video will not work because \n"
@@ -691,14 +742,6 @@ msgstr "Изменить"
msgid "Delete"
msgstr "Удалить"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -741,12 +784,6 @@ msgstr "Файлы Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ <a href=\"%(user_url)s\">%(username)
msgid "â– Browsing media by <a href=\"%(user_url)s\">%(username)s</a>"
msgstr "■ПроÑмотр файлов Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ <a href=\"%(user_url)s\">%(username)s</a>"
-#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
-#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
-#, python-format
-msgid "Image for %(media_title)s"
-msgstr "Изображение «%(media_title)s»"
-
#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
msgid "Add a comment"
msgstr "Добавить комментарий"
@@ -869,12 +906,12 @@ msgid ""
msgstr "Ваши файлы поÑвÑÑ‚ÑÑ Ð·Ð´ÐµÑÑŒ, когда вы их добавите."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Пока что тут файлов нет…"
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr "(иÑключить)"
@@ -934,26 +971,26 @@ msgstr "Метки"
msgid "Could not read the image file."
msgstr "Ðе удалоÑÑŒ прочитать файл Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Ой!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr "Произошла ошибка"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ позволÑетÑÑ"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
@@ -980,74 +1017,74 @@ msgstr "Примечание"
msgid "commented on your post"
msgstr "оÑтавил комментарий к вашему файлу"
-#: mediagoblin/user_pages/views.py:161
+#: mediagoblin/user_pages/views.py:156
msgid "Oops, your comment was empty."
msgstr "Ой, ваш комментарий был пуÑÑ‚."
-#: mediagoblin/user_pages/views.py:167
+#: mediagoblin/user_pages/views.py:162
msgid "Your comment has been posted!"
msgstr "Ваш комментарий размещён!"
-#: mediagoblin/user_pages/views.py:235
+#: mediagoblin/user_pages/views.py:230
msgid "You have to select or add a collection"
msgstr "Ðеобходимо выбрать или добавить коллекцию"
-#: mediagoblin/user_pages/views.py:243
+#: mediagoblin/user_pages/views.py:238
#, python-format
msgid "\"%s\" already in collection \"%s\""
msgstr "«%s» — уже в коллекции «%s»"
-#: mediagoblin/user_pages/views.py:258
+#: mediagoblin/user_pages/views.py:253
#, python-format
msgid "\"%s\" added to collection \"%s\""
msgstr "«%s» добавлено в коллекцию «%s»"
-#: mediagoblin/user_pages/views.py:266
+#: mediagoblin/user_pages/views.py:261
msgid "Please check your entries and try again."
msgstr ""
-#: mediagoblin/user_pages/views.py:297
+#: mediagoblin/user_pages/views.py:292
msgid ""
"Some of the files with this entry seem to be missing. Deleting anyway."
msgstr "Ðекоторые файлы от Ñтой запиÑи не обнаружены. Ð’ÑÑ‘ равно удалÑем."
-#: mediagoblin/user_pages/views.py:302
+#: mediagoblin/user_pages/views.py:297
msgid "You deleted the media."
msgstr "Вы удалили файл."
-#: mediagoblin/user_pages/views.py:309
+#: mediagoblin/user_pages/views.py:304
msgid "The media was not deleted because you didn't check that you were sure."
msgstr "Файл не удалён, так как вы не подтвердили Ñвою уверенноÑть галочкой."
-#: mediagoblin/user_pages/views.py:317
+#: mediagoblin/user_pages/views.py:312
msgid "You are about to delete another user's media. Proceed with caution."
msgstr "Ð’Ñ‹ на пороге ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° другого пользователÑ. Будьте оÑторожны."
-#: mediagoblin/user_pages/views.py:379
+#: mediagoblin/user_pages/views.py:370
msgid "You deleted the item from the collection."
msgstr "Ð’Ñ‹ иÑключили файл из коллекции."
-#: mediagoblin/user_pages/views.py:383
+#: mediagoblin/user_pages/views.py:374
msgid "The item was not removed because you didn't check that you were sure."
msgstr "Файл не иÑключён из коллекции, так как вы не подтвердили Ñвоё намерение отметкой."
-#: mediagoblin/user_pages/views.py:393
+#: mediagoblin/user_pages/views.py:384
msgid ""
"You are about to delete an item from another user's collection. Proceed with"
" caution."
msgstr "Ð’Ñ‹ на пороге иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° из коллекции другого пользователÑ. Будьте оÑторожны."
-#: mediagoblin/user_pages/views.py:426
+#: mediagoblin/user_pages/views.py:417
#, python-format
msgid "You deleted the collection \"%s\""
msgstr "Вы удалили коллекцию «%s»"
-#: mediagoblin/user_pages/views.py:433
+#: mediagoblin/user_pages/views.py:424
msgid ""
"The collection was not deleted because you didn't check that you were sure."
msgstr "ÐšÐ¾Ð»Ð»ÐµÐºÑ†Ð¸Ñ Ð½Ðµ удалена, так как вы не подтвердили Ñвоё намерение отметкой."
-#: mediagoblin/user_pages/views.py:443
+#: mediagoblin/user_pages/views.py:434
msgid ""
"You are about to delete another user's collection. Proceed with caution."
msgstr "Ð’Ñ‹ на пороге ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð»ÐµÐºÑ†Ð¸Ð¸ другого пользователÑ. Будьте оÑторожны."
diff --git a/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo
index 99394357..d84b09c4 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 e412694f..b866501e 100644
--- a/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -196,7 +196,7 @@ msgstr "Du er ved at ændre en anden brugers' medier. Pas på."
#: mediagoblin/edit/views.py:156
#, python-format
msgid "You added the attachment %s!"
-msgstr ""
+msgstr "Príloha %s pridaná!"
#: mediagoblin/edit/views.py:181
msgid "You are editing a user's profile. Proceed with caution."
@@ -311,7 +311,7 @@ msgstr "Presmerovacie URI pre aplikácie, toto pole\nj <strong>požadované</str
msgid "This field is required for public clients"
msgstr "Dette felt er nødvendigt for offentlige klienter"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "Klienten {0} er blevet registreret!"
@@ -343,11 +343,11 @@ msgstr "MediaGoblin logo"
#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
-msgstr ""
+msgstr "ÚÄet používateľa <a href=\"%(user_url)s\">%(user_name)s</a>"
#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
-msgstr ""
+msgstr "odhlásiť sa"
#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
@@ -382,15 +382,15 @@ msgstr "Vydané pod <a href=\"http://www.fsf.org/licensing/licenses/agpl-3.0.htm
#: mediagoblin/templates/mediagoblin/error.html:24
msgid "Image of goblin stressing out"
-msgstr ""
+msgstr "Obrázok hysterického goblina"
#: mediagoblin/templates/mediagoblin/root.html:25
msgid "Actions"
-msgstr ""
+msgstr "Úkony"
#: mediagoblin/templates/mediagoblin/root.html:31
msgid "Create new collection"
-msgstr ""
+msgstr "Vytvoriť novú zbierku"
#: mediagoblin/templates/mediagoblin/root.html:34
msgid "Change account settings"
@@ -655,43 +655,43 @@ msgstr "Obrázok pre %(media_title)s"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:112
msgid "Toggle Rotate"
-msgstr ""
+msgstr "Zapnúť rotáciu"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
msgid "Perspective"
-msgstr ""
+msgstr "Perspektíva"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
msgid "Front"
-msgstr ""
+msgstr "ÄŒelo"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
msgid "Top"
-msgstr ""
+msgstr "Vrch"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
msgid "Side"
-msgstr ""
+msgstr "Strana"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
msgid "WebGL"
-msgstr ""
+msgstr "WebGL"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:138
msgid "Download model"
-msgstr ""
+msgstr "Stiahnuť model"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
msgid "File Format"
-msgstr ""
+msgstr "Súborový formát"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
msgid "Object Height"
-msgstr ""
+msgstr "Výška objektu"
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
@@ -746,14 +746,6 @@ msgstr "Upraviť"
msgid "Delete"
msgstr "Odstrániť"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n%(collection_description)s </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -824,7 +816,7 @@ msgstr "<h3>Pridané</h3>\n <p>%(date)s</p>"
#: mediagoblin/templates/mediagoblin/user_pages/media.html:202
msgid "Add media to collection"
-msgstr ""
+msgstr "Pridať výtvory do zbierky"
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:35
#, python-format
@@ -918,14 +910,14 @@ msgid ""
msgstr "VÅ¡etky tvoje výtvory sa objavia práve tu, ale zatiaľ nemáš niÄ pridané."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Najskôr sa tu ešte nenachádzajú žiadne výtvory..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
-msgstr ""
+msgstr "(odstrániť)"
#: mediagoblin/templates/mediagoblin/utils/collections.html:20
#, python-format
@@ -983,31 +975,31 @@ msgstr "OznaÄené ako"
msgid "Could not read the image file."
msgstr "Nebolo možné preÄítaÅ¥ obrazový súbor."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Hovsa!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
-msgstr ""
+msgstr "Výskyt chyby"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
-msgstr ""
+msgstr "Nepovolená operácia"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
-msgstr ""
+msgstr "PrepÃ¡Ä Hocikto, toto nesmieÅ¡!</p><p>Práve si chcel vykonaÅ¥ funkciu, na ktorú nemáš oprávnenie. Opäť si chcel skúsiÅ¥ odstrániÅ¥ vÅ¡etky používateľské úÄty?"
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
" deleted."
-msgstr ""
+msgstr "Zdá sa, že na tejto adrese sa niÄ nenachádza. PrepáÄ!</p><p>Pokiaľ si si istý, že adresa je správna, možno sa hľadaná stránka presunula inam, prípadne zmazala."
#: mediagoblin/user_pages/forms.py:28
msgid "I am sure I want to delete this"
diff --git a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo
index 0711332d..1599b039 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 e1d0a754..aa482e0c 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://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -307,7 +307,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -742,14 +742,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -914,12 +906,12 @@ msgid ""
msgstr "Tu bo prikazana vaÅ¡a vsebina, a trenutno Å¡e niste dodali niÄ."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Videti je, da tu še ni nobene vsebine ..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -979,26 +971,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Opa!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.mo
index 0cca32cf..64880aed 100644
--- a/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.po
index 56fd4849..2911f34e 100644
--- a/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/mediagoblin/language/sq/)\n"
"MIME-Version: 1.0\n"
@@ -193,7 +193,7 @@ msgstr "Po përpunoni media të një tjetër përdoruesi. Hapni sytë."
#: mediagoblin/edit/views.py:156
#, python-format
msgid "You added the attachment %s!"
-msgstr ""
+msgstr "Shtuat bashkangjitjen %s!"
#: mediagoblin/edit/views.py:181
msgid "You are editing a user's profile. Proceed with caution."
@@ -308,7 +308,7 @@ msgstr "URI ridrejtimi për zbatimin, kjo fushë\n është <strong>e
msgid "This field is required for public clients"
msgstr "Kjo fushë është e domosdoshme për klientë publikë"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "Klienti {0} u regjistrua!"
@@ -340,11 +340,11 @@ msgstr "Logoja e MediaGoblin-it"
#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
-msgstr ""
+msgstr "Llogaria e <a href=\"%(user_url)s\">%(user_name)s</a>"
#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
-msgstr ""
+msgstr "dilni"
#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
@@ -383,11 +383,11 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:25
msgid "Actions"
-msgstr ""
+msgstr "Veprime"
#: mediagoblin/templates/mediagoblin/root.html:31
msgid "Create new collection"
-msgstr ""
+msgstr "Krijoni koleksion të ri"
#: mediagoblin/templates/mediagoblin/root.html:34
msgid "Change account settings"
@@ -656,39 +656,39 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
msgid "Perspective"
-msgstr ""
+msgstr "Perspektivë"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
msgid "Front"
-msgstr ""
+msgstr "Ball"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
msgid "Top"
-msgstr ""
+msgstr "Krye"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
msgid "Side"
-msgstr ""
+msgstr "Anë"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
msgid "WebGL"
-msgstr ""
+msgstr "WebGL"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:138
msgid "Download model"
-msgstr ""
+msgstr "Shkarkojeni modelin"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
msgid "File Format"
-msgstr ""
+msgstr "Format Kartele"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
msgid "Object Height"
-msgstr ""
+msgstr "Lartësi Objekti"
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
@@ -743,14 +743,6 @@ msgstr "Përpunoni"
msgid "Delete"
msgstr "Fshije"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -821,7 +813,7 @@ msgstr "<h3>Shtuar më</h3>\n <p>%(date)s</p>"
#: mediagoblin/templates/mediagoblin/user_pages/media.html:202
msgid "Add media to collection"
-msgstr ""
+msgstr "Shtoni koleksion media"
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:35
#, python-format
@@ -915,14 +907,14 @@ msgid ""
msgstr "Media juaj do të shfaqet këtu, por nuk duket të keni shtuar gjë ende."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Nuk duket ende të ketë ndonjë media këtu..."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
-msgstr ""
+msgstr "(hiqe)"
#: mediagoblin/templates/mediagoblin/utils/collections.html:20
#, python-format
@@ -980,31 +972,31 @@ msgstr "Etiketuar me"
msgid "Could not read the image file."
msgstr "Nuk lexoi dot kartelën e figurës."
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Oooh!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
-msgstr ""
+msgstr "Ndodhi një gabim"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
-msgstr ""
+msgstr "Veprim i palejuar"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
-msgstr ""
+msgstr "Më ndjeni or trim, nuk ju lë dot ta bëni këtë!</p><p>Provuat të kryeni një funksion që nuk lejohet. Keni provuar prapë të fshini krejt llogaritë e përdoruesve?"
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
" deleted."
-msgstr ""
+msgstr "Nuk duket se ka ndonjë faqe në këtë adresë. Na ndjeni!</p><p>Nëse jeni i sigurt se kjo adresë është e saktë, ndoshta faqja që po kërkoni është lëvizur ose fshirë."
#: mediagoblin/user_pages/forms.py:28
msgid "I am sure I want to delete this"
diff --git a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo
index 8084b3f4..dd67d341 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 840e9e3f..32e7d3d9 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://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/mediagoblin/language/sr/)\n"
"MIME-Version: 1.0\n"
@@ -306,7 +306,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -741,14 +741,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -913,12 +905,12 @@ msgid ""
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr ""
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -978,26 +970,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr ""
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo
index 435c406b..e4586d50 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 939dce36..d288feac 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://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/mediagoblin/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -308,7 +308,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -743,14 +743,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -915,12 +907,12 @@ msgid ""
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:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "Det verkar inte finnas någon media här ännu."
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -980,26 +972,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "Ojoj!"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo
index 43de15d1..5009e371 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 115728a9..44a7bf44 100644
--- a/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -307,7 +307,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -742,14 +742,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -914,12 +906,12 @@ msgid ""
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr ""
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -979,26 +971,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr ""
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.mo
index 854f7b51..7b1c154c 100644
--- a/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.po
index 41d97d9c..5a47ef7c 100644
--- a/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Chinese (Taiwan) (Big5) (http://www.transifex.com/projects/p/mediagoblin/language/zh_TW.Big5/)\n"
"MIME-Version: 1.0\n"
@@ -306,7 +306,7 @@ msgstr ""
msgid "This field is required for public clients"
msgstr ""
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr ""
@@ -741,14 +741,6 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr ""
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -913,12 +905,12 @@ msgid ""
msgstr ""
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr ""
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
msgstr ""
@@ -978,26 +970,26 @@ msgstr ""
msgid "Could not read the image file."
msgstr ""
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr ""
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
msgstr ""
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
msgstr ""
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
msgstr ""
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
diff --git a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo
index 846b8f70..13346b7c 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 0dd3f1be..4a722732 100644
--- a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po
@@ -5,12 +5,13 @@
# Translators:
# <chc@citi.sinica.edu.tw>, 2011.
# Harry Chen <harryhow@gmail.com>, 2011-2012.
+# <medicalwei@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://issues.mediagoblin.org/\n"
-"POT-Creation-Date: 2012-12-07 12:45-0600\n"
-"PO-Revision-Date: 2012-12-07 18:41+0000\n"
+"POT-Creation-Date: 2012-12-20 09:18-0600\n"
+"PO-Revision-Date: 2012-12-20 15:14+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -193,7 +194,7 @@ msgstr "您正在修改別人的媒體,請å°å¿ƒæ“作。"
#: mediagoblin/edit/views.py:156
#, python-format
msgid "You added the attachment %s!"
-msgstr ""
+msgstr "您加上了附件「%sã€ï¼"
#: mediagoblin/edit/views.py:181
msgid "You are editing a user's profile. Proceed with caution."
@@ -308,7 +309,7 @@ msgstr "此應用程å¼çš„é‡å®šå‘ URI,本欄ä½åœ¨å…¬é–‹é¡žåž‹çš„ OAuth clie
msgid "This field is required for public clients"
msgstr "本欄ä½åœ¨å…¬é–‹é¡žåž‹çš„ OAuth client 為必填"
-#: mediagoblin/plugins/oauth/views.py:59
+#: mediagoblin/plugins/oauth/views.py:60
msgid "The client {0} has been registered!"
msgstr "OAuth client {0} 註冊完æˆï¼"
@@ -340,11 +341,11 @@ msgstr "MediaGoblin 標誌"
#: mediagoblin/templates/mediagoblin/base.html:54
#, python-format
msgid "<a href=\"%(user_url)s\">%(user_name)s</a>'s account"
-msgstr ""
+msgstr "<a href=\"%(user_url)s\">%(user_name)s</a> 的帳號"
#: mediagoblin/templates/mediagoblin/base.html:60
msgid "log out"
-msgstr ""
+msgstr "登出"
#: mediagoblin/templates/mediagoblin/base.html:62
#: mediagoblin/templates/mediagoblin/root.html:28
@@ -379,15 +380,15 @@ msgstr "以 <a href=\"http://www.fsf.org/licensing/licenses/agpl-3.0.html\">AGPL
#: mediagoblin/templates/mediagoblin/error.html:24
msgid "Image of goblin stressing out"
-msgstr ""
+msgstr "滿臉å•號的哥布林"
#: mediagoblin/templates/mediagoblin/root.html:25
msgid "Actions"
-msgstr ""
+msgstr "動作"
#: mediagoblin/templates/mediagoblin/root.html:31
msgid "Create new collection"
-msgstr ""
+msgstr "新增新的è’è—"
#: mediagoblin/templates/mediagoblin/root.html:34
msgid "Change account settings"
@@ -432,7 +433,7 @@ msgid ""
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
" or\n"
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
-msgstr "<a class=\"button_action_highlight\" href=\"%(register_url)s\">在這個網站上建立帳號</a>\n 或是\n <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">在自己的伺æœå™¨ä¸Šå»ºç«‹ MedaiGoblin</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:67
msgid "Most recent media"
@@ -652,43 +653,43 @@ msgstr " %(media_title)s 的照片"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:112
msgid "Toggle Rotate"
-msgstr ""
+msgstr "åˆ‡æ›æ—‹è½‰"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:113
msgid "Perspective"
-msgstr ""
+msgstr "視角"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:116
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:117
msgid "Front"
-msgstr ""
+msgstr "æ­£é¢"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:120
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:121
msgid "Top"
-msgstr ""
+msgstr "é ‚é¢"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:124
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:125
msgid "Side"
-msgstr ""
+msgstr "å´é¢"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:130
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:131
msgid "WebGL"
-msgstr ""
+msgstr "WebGL"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:138
msgid "Download model"
-msgstr ""
+msgstr "下載模型"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:146
msgid "File Format"
-msgstr ""
+msgstr "檔案格å¼"
#: mediagoblin/templates/mediagoblin/media_displays/stl.html:148
msgid "Object Height"
-msgstr ""
+msgstr "物件高度"
#: mediagoblin/templates/mediagoblin/media_displays/video.html:40
msgid ""
@@ -743,14 +744,6 @@ msgstr "編輯"
msgid "Delete"
msgstr "刪除"
-#: mediagoblin/templates/mediagoblin/user_pages/collection.html:59
-#, python-format
-msgid ""
-"<p>\n"
-" %(collection_description)s\n"
-" </p>"
-msgstr "<p>\n %(collection_description)s\n </p>"
-
#: mediagoblin/templates/mediagoblin/user_pages/collection_confirm_delete.html:30
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
#, python-format
@@ -821,7 +814,7 @@ msgstr "<h3>加入日期</h3>\n <p>%(date)s</p>"
#: mediagoblin/templates/mediagoblin/user_pages/media.html:202
msgid "Add media to collection"
-msgstr ""
+msgstr "將媒體加入è’è—"
#: mediagoblin/templates/mediagoblin/user_pages/media_collect.html:35
#, python-format
@@ -915,14 +908,14 @@ msgid ""
msgstr "此處是您的媒體會出ç¾çš„地方,但是似乎還沒有加入任何æ±è¥¿ã€‚"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:86
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:84
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:70
msgid "There doesn't seem to be any media here yet..."
msgstr "那裡好åƒé‚„沒有任何的媒體…"
-#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:51
+#: mediagoblin/templates/mediagoblin/utils/collection_gallery.html:49
msgid "(remove)"
-msgstr ""
+msgstr " (移除)"
#: mediagoblin/templates/mediagoblin/utils/collections.html:20
#, python-format
@@ -980,31 +973,31 @@ msgstr "標籤"
msgid "Could not read the image file."
msgstr "無法讀å–圖片檔案。"
-#: mediagoblin/tools/response.py:29
+#: mediagoblin/tools/response.py:30
msgid "Oops!"
msgstr "糟糕ï¼"
-#: mediagoblin/tools/response.py:30
+#: mediagoblin/tools/response.py:31
msgid "An error occured"
-msgstr ""
+msgstr "發生錯誤"
-#: mediagoblin/tools/response.py:44
+#: mediagoblin/tools/response.py:46
msgid "Operation not allowed"
-msgstr ""
+msgstr "æ“作ä¸å…許"
-#: mediagoblin/tools/response.py:45
+#: mediagoblin/tools/response.py:47
msgid ""
"Sorry Dave, I can't let you do that!</p><p>You have tried to perform a "
"function that you are not allowed to. Have you been trying to delete all "
"user accounts again?"
-msgstr ""
+msgstr "Dave å°ä¸èµ·ï¼Œæˆ‘ä¸èƒ½è®“你這樣åšï¼</p><p>您正在試著æ“作ä¸å…許您使用的功能。您打算刪除所有使用者的帳號嗎?"
-#: mediagoblin/tools/response.py:52
+#: mediagoblin/tools/response.py:55
msgid ""
"There doesn't seem to be a page at this address. Sorry!</p><p>If you're sure"
" the address is correct, maybe the page you're looking for has been moved or"
" deleted."
-msgstr ""
+msgstr "ä¸å¥½æ„æ€ï¼Œçœ‹èµ·ä¾†é€™å€‹ç¶²å€ä¸Šæ²’有網é ã€‚</p><p>å¦‚æžœæ‚¨ç¢ºå®šé€™å€‹ç¶²å€æ˜¯æ­£ç¢ºçš„,您在尋找的é é¢å¯èƒ½å·²ç¶“移動或是被刪除了。"
#: mediagoblin/user_pages/forms.py:28
msgid "I am sure I want to delete this"
diff --git a/mediagoblin/listings/routing.py b/mediagoblin/listings/routing.py
index d25f1c8c..e5683168 100644
--- a/mediagoblin/listings/routing.py
+++ b/mediagoblin/listings/routing.py
@@ -14,7 +14,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from mediagoblin.routing import add_route
+from mediagoblin.tools.routing import add_route
add_route('mediagoblin.listings.tags_listing',
"/tag/<string:tag>/",
diff --git a/mediagoblin/meddleware/csrf.py b/mediagoblin/meddleware/csrf.py
index 1488e6d9..2984ebb9 100644
--- a/mediagoblin/meddleware/csrf.py
+++ b/mediagoblin/meddleware/csrf.py
@@ -17,7 +17,7 @@
import random
import logging
-from webob.exc import HTTPForbidden
+from werkzeug.exceptions import Forbidden
from wtforms import Form, HiddenField, validators
from mediagoblin import mg_globals
@@ -128,8 +128,9 @@ class CsrfMeddleware(BaseMeddleware):
if cookie_token is None:
# the CSRF cookie must be present in the request
- _log.error('CSRF cookie not present')
- return HTTPForbidden()
+ errstr = 'CSRF cookie not present'
+ _log.error(errstr)
+ raise Forbidden(errstr)
# get the form token and confirm it matches
form = CsrfForm(request.form)
@@ -142,5 +143,6 @@ class CsrfMeddleware(BaseMeddleware):
# either the tokens didn't match or the form token wasn't
# present; either way, the request is denied
- _log.error('CSRF validation failed')
- return HTTPForbidden()
+ errstr = 'CSRF validation failed'
+ _log.error(errstr)
+ raise Forbidden(errstr)
diff --git a/mediagoblin/media_types/ascii/models.py b/mediagoblin/media_types/ascii/models.py
index 865c216c..60420fdd 100644
--- a/mediagoblin/media_types/ascii/models.py
+++ b/mediagoblin/media_types/ascii/models.py
@@ -22,6 +22,9 @@ from sqlalchemy import (
from sqlalchemy.orm import relationship, backref
+BACKREF_NAME = "ascii__media_data"
+
+
class AsciiData(Base):
__tablename__ = "ascii__mediadata"
@@ -29,7 +32,7 @@ class AsciiData(Base):
media_entry = Column(Integer, ForeignKey('core__media_entries.id'),
primary_key=True)
get_media_entry = relationship("MediaEntry",
- backref=backref("ascii__media_data", cascade="all, delete-orphan"))
+ backref=backref(BACKREF_NAME, cascade="all, delete-orphan"))
DATA_MODEL = AsciiData
diff --git a/mediagoblin/media_types/audio/models.py b/mediagoblin/media_types/audio/models.py
index 5f18d2c2..08a90f54 100644
--- a/mediagoblin/media_types/audio/models.py
+++ b/mediagoblin/media_types/audio/models.py
@@ -22,6 +22,9 @@ from sqlalchemy import (
from sqlalchemy.orm import relationship, backref
+BACKREF_NAME = "audio__media_data"
+
+
class AudioData(Base):
__tablename__ = "audio__mediadata"
@@ -29,7 +32,7 @@ class AudioData(Base):
media_entry = Column(Integer, ForeignKey('core__media_entries.id'),
primary_key=True)
get_media_entry = relationship("MediaEntry",
- backref=backref("audio__media_data", cascade="all, delete-orphan"))
+ backref=backref(BACKREF_NAME, cascade="all, delete-orphan"))
DATA_MODEL = AudioData
diff --git a/mediagoblin/media_types/image/models.py b/mediagoblin/media_types/image/models.py
index fc518daa..f54a0762 100644
--- a/mediagoblin/media_types/image/models.py
+++ b/mediagoblin/media_types/image/models.py
@@ -23,6 +23,9 @@ from sqlalchemy.orm import relationship, backref
from mediagoblin.db.sql.extratypes import JSONEncoded
+BACKREF_NAME = "image__media_data"
+
+
class ImageData(Base):
__tablename__ = "image__mediadata"
@@ -30,7 +33,7 @@ class ImageData(Base):
media_entry = Column(Integer, ForeignKey('core__media_entries.id'),
primary_key=True)
get_media_entry = relationship("MediaEntry",
- backref=backref("image__media_data", cascade="all, delete-orphan"))
+ backref=backref(BACKREF_NAME, cascade="all, delete-orphan"))
width = Column(Integer)
height = Column(Integer)
diff --git a/mediagoblin/media_types/stl/models.py b/mediagoblin/media_types/stl/models.py
index ccb1b9dc..0ed4a2e5 100644
--- a/mediagoblin/media_types/stl/models.py
+++ b/mediagoblin/media_types/stl/models.py
@@ -22,6 +22,9 @@ from sqlalchemy import (
from sqlalchemy.orm import relationship, backref
+BACKREF_NAME = "stl__media_data"
+
+
class StlData(Base):
__tablename__ = "stl__mediadata"
@@ -29,7 +32,7 @@ class StlData(Base):
media_entry = Column(Integer, ForeignKey('core__media_entries.id'),
primary_key=True)
get_media_entry = relationship("MediaEntry",
- backref=backref("stl__media_data", cascade="all, delete-orphan"))
+ backref=backref(BACKREF_NAME, cascade="all, delete-orphan"))
center_x = Column(Float)
center_y = Column(Float)
diff --git a/mediagoblin/media_types/video/models.py b/mediagoblin/media_types/video/models.py
index 35ed92bf..4e02cb9a 100644
--- a/mediagoblin/media_types/video/models.py
+++ b/mediagoblin/media_types/video/models.py
@@ -22,6 +22,9 @@ from sqlalchemy import (
from sqlalchemy.orm import relationship, backref
+BACKREF_NAME = "video__media_data"
+
+
class VideoData(Base):
__tablename__ = "video__mediadata"
@@ -29,7 +32,7 @@ class VideoData(Base):
media_entry = Column(Integer, ForeignKey('core__media_entries.id'),
primary_key=True)
get_media_entry = relationship("MediaEntry",
- backref=backref("video__media_data", cascade="all, delete-orphan"))
+ backref=backref(BACKREF_NAME, cascade="all, delete-orphan"))
width = Column(SmallInteger)
height = Column(SmallInteger)
diff --git a/mediagoblin/media_types/video/transcoders.py b/mediagoblin/media_types/video/transcoders.py
index 26f96b5f..152de288 100644
--- a/mediagoblin/media_types/video/transcoders.py
+++ b/mediagoblin/media_types/video/transcoders.py
@@ -636,7 +636,7 @@ class VideoTranscoder:
'''
def __init__(self):
_log.info('Initializing VideoTranscoder...')
-
+ self.progress_percentage = None
self.loop = gobject.MainLoop()
def transcode(self, src, dst, **kwargs):
@@ -913,12 +913,14 @@ class VideoTranscoder:
elif message.type == gst.MESSAGE_ELEMENT:
if message.structure.get_name() == 'progress':
data = dict(message.structure)
-
- if self._progress_callback:
- self._progress_callback(data.get('percent'))
-
- _log.info('{percent}% done...'.format(
- percent=data.get('percent')))
+ # Update progress state if it has changed
+ if self.progress_percentage != data.get('percent'):
+ self.progress_percentage = data.get('percent')
+ if self._progress_callback:
+ self._progress_callback(data.get('percent'))
+
+ _log.info('{percent}% done...'.format(
+ percent=data.get('percent')))
_log.debug(data)
elif t == gst.MESSAGE_ERROR:
diff --git a/mediagoblin/plugins/api/tools.py b/mediagoblin/plugins/api/tools.py
index ecc50364..e5878258 100644
--- a/mediagoblin/plugins/api/tools.py
+++ b/mediagoblin/plugins/api/tools.py
@@ -18,9 +18,9 @@ import logging
import json
from functools import wraps
-from webob import exc, Response
from urlparse import urljoin
-
+from werkzeug.exceptions import Forbidden
+from werkzeug.wrappers import Response
from mediagoblin import mg_globals
from mediagoblin.tools.pluginapi import PluginManager
from mediagoblin.storage.filestorage import BasicFileStorage
@@ -54,23 +54,22 @@ class Auth(object):
def json_response(serializable, _disable_cors=False, *args, **kw):
'''
- Serializes a json objects and returns a webob.Response object with the
+ Serializes a json objects and returns a werkzeug Response object with the
serialized value as the response body and Content-Type: application/json.
:param serializable: A json-serializable object
Any extra arguments and keyword arguments are passed to the
- webob.Response.__init__ method.
+ Response.__init__ method.
'''
- response = Response(json.dumps(serializable), *args, **kw)
- response.headers['Content-Type'] = 'application/json'
+ response = Response(json.dumps(serializable), *args, content_type='application/json', **kw)
if not _disable_cors:
cors_headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, X-Requested-With'}
- response.headers.update(cors_headers)
+ (response.headers.set(key, value) for key, value in cors_headers)
return response
@@ -136,14 +135,14 @@ def api_auth(controller):
auth_candidates = []
for auth in PluginManager().get_hook_callables('auth'):
- _log.debug('Plugin auth: {0}'.format(auth))
if auth.trigger(request):
+ _log.debug('{0} believes it is capable of authenticating this request.'.format(auth))
auth_candidates.append(auth)
# If we can't find any authentication methods, we should not let them
# pass.
if not auth_candidates:
- return exc.HTTPForbidden()
+ raise Forbidden()
# For now, just select the first one in the list
auth = auth_candidates[0]
@@ -157,7 +156,7 @@ def api_auth(controller):
'status': 403,
'errors': auth.errors})
- return exc.HTTPForbidden()
+ raise Forbidden()
return controller(request, *args, **kw)
diff --git a/mediagoblin/plugins/api/views.py b/mediagoblin/plugins/api/views.py
index a1b1bcac..d3cef432 100644
--- a/mediagoblin/plugins/api/views.py
+++ b/mediagoblin/plugins/api/views.py
@@ -19,12 +19,12 @@ import logging
import uuid
from os.path import splitext
-from webob import exc, Response
-from werkzeug.utils import secure_filename
from werkzeug.datastructures import FileStorage
+from werkzeug.exceptions import BadRequest, Forbidden
+from werkzeug.utils import secure_filename
+from werkzeug.wrappers import Response
from celery import registry
-from mediagoblin.db.util import ObjectId
from mediagoblin.decorators import require_active_login
from mediagoblin.processing import mark_entry_failed
from mediagoblin.processing.task import ProcessMedia
@@ -47,20 +47,19 @@ def post_entry(request):
if request.method != 'POST':
_log.debug('Must POST against post_entry')
- return exc.HTTPBadRequest()
+ raise BadRequest()
if not 'file' in request.files \
or not isinstance(request.files['file'], FileStorage) \
or not request.files['file'].stream:
_log.debug('File field not found')
- return exc.HTTPBadRequest()
+ raise BadRequest()
media_file = request.files['file']
media_type, media_manager = sniff_media(media_file)
entry = request.db.MediaEntry()
- entry.id = ObjectId()
entry.media_type = unicode(media_type)
entry.title = unicode(request.form.get('title')
or splitext(media_file.filename)[0])
@@ -93,7 +92,7 @@ def post_entry(request):
entry.queued_task_id = task_id
# Save now so we have this data before kicking off processing
- entry.save(validate=True)
+ entry.save()
if request.form.get('callback_url'):
metadata = request.db.ProcessingMetaData()
@@ -108,7 +107,7 @@ def post_entry(request):
process_media = registry.tasks[ProcessMedia.name]
try:
process_media.apply_async(
- [unicode(entry._id)], {},
+ [unicode(entry.id)], {},
task_id=task_id)
except BaseException as e:
# The purpose of this section is because when running in "lazy"
@@ -119,7 +118,7 @@ def post_entry(request):
#
# ... not completely the diaper pattern because the
# exception is re-raised :)
- mark_entry_failed(entry._id, e)
+ mark_entry_failed(entry.id, e)
# re-raise the exception
raise
@@ -129,12 +128,14 @@ def post_entry(request):
@api_auth
def api_test(request):
if not request.user:
- return exc.HTTPForbidden()
+ raise Forbidden()
user_data = {
'username': request.user.username,
'email': request.user.email}
+ # TODO: This is the *only* thing using Response() here, should that
+ # not simply use json_response()?
return Response(json.dumps(user_data))
diff --git a/mediagoblin/plugins/httpapiauth/__init__.py b/mediagoblin/plugins/httpapiauth/__init__.py
index d3d2065e..081b590e 100644
--- a/mediagoblin/plugins/httpapiauth/__init__.py
+++ b/mediagoblin/plugins/httpapiauth/__init__.py
@@ -41,7 +41,7 @@ class HTTPAuth(Auth):
return False
user = request.db.User.query.filter_by(
- username=request.authorization['username']).first()
+ username=unicode(request.authorization['username'])).first()
if user.check_login(request.authorization['password']):
request.user = user
diff --git a/mediagoblin/plugins/oauth/views.py b/mediagoblin/plugins/oauth/views.py
index 643c2783..c7b2a332 100644
--- a/mediagoblin/plugins/oauth/views.py
+++ b/mediagoblin/plugins/oauth/views.py
@@ -18,7 +18,6 @@
import logging
import json
-from webob import exc, Response
from urllib import urlencode
from uuid import uuid4
from datetime import datetime
@@ -95,7 +94,7 @@ def authorize_client(request):
if not client:
_log.error('''No such client id as received from client authorization
form.''')
- return exc.HTTPBadRequest()
+ return BadRequest()
if form.validate():
relation = OAuthUserClient()
@@ -106,11 +105,11 @@ def authorize_client(request):
elif form.deny.data:
relation.state = u'rejected'
else:
- return exc.HTTPBadRequest
+ return BadRequest
relation.save()
- return exc.HTTPFound(location=form.next.data)
+ return redirect(request, location=form.next.data)
return render_to_response(
request,
@@ -163,7 +162,7 @@ def authorize(request, client):
_log.debug('Redirecting to {0}'.format(redirect_uri))
- return exc.HTTPFound(location=redirect_uri)
+ return redirect(request, location=redirect_uri)
else:
# Show prompt to allow client to access data
# - on accept: send the user agent back to the redirect_uri with the
diff --git a/mediagoblin/processing/__init__.py b/mediagoblin/processing/__init__.py
index 6b2d50e2..e2bc1a13 100644
--- a/mediagoblin/processing/__init__.py
+++ b/mediagoblin/processing/__init__.py
@@ -38,7 +38,7 @@ class ProgressCallback(object):
def create_pub_filepath(entry, filename):
return mgg.public_store.get_unique_filepath(
['media_entries',
- unicode(entry._id),
+ unicode(entry.id),
filename])
@@ -93,7 +93,7 @@ def mark_entry_failed(entry_id, exc):
# Looks like yes, so record information about that failure and any
# metadata the user might have supplied.
atomic_update(mgg.database.MediaEntry,
- {'_id': entry_id},
+ {'id': entry_id},
{u'state': u'failed',
u'fail_error': unicode(exc.exception_path),
u'fail_metadata': exc.metadata})
@@ -104,7 +104,7 @@ def mark_entry_failed(entry_id, exc):
# metadata (in fact overwrite it if somehow it had previous info
# here)
atomic_update(mgg.database.MediaEntry,
- {'_id': entry_id},
+ {'id': entry_id},
{u'state': u'failed',
u'fail_error': None,
u'fail_metadata': {}})
diff --git a/mediagoblin/processing/task.py b/mediagoblin/processing/task.py
index a8bc0f2f..06a26bb7 100644
--- a/mediagoblin/processing/task.py
+++ b/mediagoblin/processing/task.py
@@ -42,7 +42,7 @@ class ProcessMedia(Task):
(for now just process_image...)
"""
entry = mgg.database.MediaEntry.one(
- {'_id': ObjectId(media_id)})
+ {'id': ObjectId(media_id)})
# Try to process, and handle expected errors.
try:
@@ -61,7 +61,7 @@ class ProcessMedia(Task):
json_processing_callback(entry)
except BaseProcessingFail as exc:
- mark_entry_failed(entry._id, exc)
+ mark_entry_failed(entry.id, exc)
json_processing_callback(entry)
return
@@ -72,7 +72,7 @@ class ProcessMedia(Task):
entry.title,
exc))
- mark_entry_failed(entry._id, exc)
+ mark_entry_failed(entry.id, exc)
json_processing_callback(entry)
except Exception as exc:
@@ -80,7 +80,7 @@ class ProcessMedia(Task):
+ ' processing {0}'.format(
entry))
- mark_entry_failed(entry._id, exc)
+ mark_entry_failed(entry.id, exc)
json_processing_callback(entry)
raise
diff --git a/mediagoblin/routing.py b/mediagoblin/routing.py
index defbc4ba..a650f22f 100644
--- a/mediagoblin/routing.py
+++ b/mediagoblin/routing.py
@@ -14,42 +14,29 @@
# 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 werkzeug.routing import Map, Rule
+import logging
-url_map = Map()
+from mediagoblin.tools.routing import add_route, mount, url_map
+from mediagoblin.tools.pluginapi import PluginManager
+from mediagoblin.admin.routing import admin_routes
+from mediagoblin.auth.routing import auth_routes
-view_functions = {}
-def add_route(endpoint, url, controller):
- """
- Add a route to the url mapping
- """
- # XXX: We cannot use this, since running tests means that the plugin
- # routes will be populated over and over over the same session.
- #
- # assert endpoint not in view_functions.keys(), 'Trying to overwrite a rule'
+_log = logging.getLogger(__name__)
- view_functions.update({endpoint: controller})
- url_map.add(Rule(url, endpoint=endpoint))
+def get_url_map():
+ add_route('index', '/', 'mediagoblin.views:root_view')
+ mount('/auth', auth_routes)
+ mount('/a', admin_routes)
-def mount(mountpoint, routes):
- """
- Mount a bunch of routes to this mountpoint
- """
- for endpoint, url, controller in routes:
- url = "%s/%s" % (mountpoint.rstrip('/'), url.lstrip('/'))
- add_route(endpoint, url, controller)
+ import mediagoblin.submit.routing
+ import mediagoblin.user_pages.routing
+ import mediagoblin.edit.routing
+ import mediagoblin.webfinger.routing
+ import mediagoblin.listings.routing
-add_route('index', '/', 'mediagoblin.views:root_view')
+ for route in PluginManager().get_routes():
+ add_route(*route)
-from mediagoblin.admin.routing import admin_routes
-from mediagoblin.auth.routing import auth_routes
-mount('/auth', auth_routes)
-mount('/a', admin_routes)
-
-import mediagoblin.submit.routing
-import mediagoblin.user_pages.routing
-import mediagoblin.edit.routing
-import mediagoblin.webfinger.routing
-import mediagoblin.listings.routing
+ return url_map
diff --git a/mediagoblin/submit/routing.py b/mediagoblin/submit/routing.py
index fbe3c39c..085344fd 100644
--- a/mediagoblin/submit/routing.py
+++ b/mediagoblin/submit/routing.py
@@ -14,7 +14,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from mediagoblin.routing import add_route
+from mediagoblin.tools.routing import add_route
add_route('mediagoblin.submit.start',
'/submit/', 'mediagoblin.submit.views:submit_start')
diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py
index 02026f45..b52fca33 100644
--- a/mediagoblin/submit/views.py
+++ b/mediagoblin/submit/views.py
@@ -29,7 +29,6 @@ _log = logging.getLogger(__name__)
from werkzeug.utils import secure_filename
from werkzeug.datastructures import FileStorage
-from mediagoblin.db.util import ObjectId
from mediagoblin.tools.text import convert_to_tag_list_of_dicts
from mediagoblin.tools.translate import pass_to_ugettext as _
from mediagoblin.tools.response import render_to_response, redirect
@@ -66,7 +65,6 @@ def submit_start(request):
# create entry and save in database
entry = request.db.MediaEntry()
- entry.id = ObjectId()
entry.media_type = unicode(media_type)
entry.title = (
unicode(request.form['title'])
@@ -76,7 +74,7 @@ def submit_start(request):
entry.license = unicode(request.form.get('license', "")) or None
- entry.uploader = request.user._id
+ entry.uploader = request.user.id
# Process the user's folksonomy "tags"
entry.tags = convert_to_tag_list_of_dicts(
@@ -112,7 +110,7 @@ def submit_start(request):
entry.queued_task_id = task_id
# Save now so we have this data before kicking off processing
- entry.save(validate=True)
+ entry.save()
# Pass off to processing
#
@@ -121,7 +119,7 @@ def submit_start(request):
process_media = registry.tasks[ProcessMedia.name]
try:
process_media.apply_async(
- [unicode(entry._id)], {},
+ [unicode(entry.id)], {},
task_id=task_id)
except BaseException as exc:
# The purpose of this section is because when running in "lazy"
@@ -132,7 +130,7 @@ def submit_start(request):
#
# ... not completely the diaper pattern because the
# exception is re-raised :)
- mark_entry_failed(entry._id, exc)
+ mark_entry_failed(entry.id, exc)
# re-raise the exception
raise
@@ -193,24 +191,22 @@ def add_collection(request, media=None):
if request.method == 'POST' and submit_form.validate():
try:
collection = request.db.Collection()
- collection.id = ObjectId()
collection.title = unicode(request.form['title'])
-
collection.description = unicode(request.form.get('description'))
- collection.creator = request.user._id
+ collection.creator = request.user.id
collection.generate_slug()
# Make sure this user isn't duplicating an existing collection
existing_collection = request.db.Collection.find_one({
- 'creator': request.user._id,
+ 'creator': request.user.id,
'title':collection.title})
if existing_collection:
messages.add_message(
request, messages.ERROR, _('You already have a collection called "%s"!' % collection.title))
else:
- collection.save(validate=True)
+ collection.save()
add_message(request, SUCCESS, _('Collection "%s" added!' % collection.title))
diff --git a/mediagoblin/templates/mediagoblin/admin/panel.html b/mediagoblin/templates/mediagoblin/admin/panel.html
index d3c6c958..6bcb5c24 100644
--- a/mediagoblin/templates/mediagoblin/admin/panel.html
+++ b/mediagoblin/templates/mediagoblin/admin/panel.html
@@ -42,7 +42,7 @@
</tr>
{% for media_entry in processing_entries %}
<tr>
- <td>{{ media_entry._id }}</td>
+ <td>{{ media_entry.id }}</td>
<td>{{ media_entry.get_uploader.username }}</td>
<td>{{ media_entry.title }}</td>
<td>{{ media_entry.created.strftime("%F %R") }}</td>
@@ -72,7 +72,7 @@
</tr>
{% for media_entry in failed_entries %}
<tr>
- <td>{{ media_entry._id }}</td>
+ <td>{{ media_entry.id }}</td>
<td>{{ media_entry.get_uploader.username }}</td>
<td>{{ media_entry.title }}</td>
<td>{{ media_entry.created.strftime("%F %R") }}</td>
@@ -101,7 +101,7 @@
</tr>
{% for media_entry in processed_entries %}
<tr>
- <td>{{ media_entry._id }}</td>
+ <td>{{ media_entry.id }}</td>
<td>{{ media_entry.get_uploader.username }}</td>
<td><a href="{{ media_entry.url_for_self(request.urlgen) }}">{{ media_entry.title }}</a></td>
<td>{{ media_entry.created.strftime("%F %R") }}</td>
diff --git a/mediagoblin/templates/mediagoblin/edit/attachments.html b/mediagoblin/templates/mediagoblin/edit/attachments.html
index 6e7da0a1..55d446de 100644
--- a/mediagoblin/templates/mediagoblin/edit/attachments.html
+++ b/mediagoblin/templates/mediagoblin/edit/attachments.html
@@ -28,7 +28,7 @@
{% block mediagoblin_content %}
<form action="{{ request.urlgen('mediagoblin.edit.attachments',
user= media.get_uploader.username,
- media= media._id) }}"
+ media= media.id) }}"
method="POST" enctype="multipart/form-data">
<div class="form_box">
<h1>
diff --git a/mediagoblin/templates/mediagoblin/edit/edit.html b/mediagoblin/templates/mediagoblin/edit/edit.html
index 144184df..1f5b91f7 100644
--- a/mediagoblin/templates/mediagoblin/edit/edit.html
+++ b/mediagoblin/templates/mediagoblin/edit/edit.html
@@ -29,7 +29,7 @@
<form action="{{ request.urlgen('mediagoblin.edit.edit_media',
user= media.get_uploader.username,
- media= media._id) }}"
+ media= media.id) }}"
method="POST" enctype="multipart/form-data">
<div class="form_box_xl edit_box">
<h1>{% trans media_title=media.title %}Editing {{ media_title }}{% endtrans %}</h1>
diff --git a/mediagoblin/templates/mediagoblin/user_pages/collection.html b/mediagoblin/templates/mediagoblin/user_pages/collection.html
index f53c164f..f1ab7a42 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/collection.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/collection.html
@@ -44,7 +44,7 @@
{{ collection_title }} by <a href="{{ user_url }}">{{ username }}</a>
{%- endtrans %}
</h1>
- {% if request.user and (collection.creator == request.user._id or
+ {% if request.user and (collection.creator == request.user.id or
request.user.is_admin) %}
{% set edit_url = request.urlgen('mediagoblin.edit.edit_collection',
user=collection.get_creator.username,
diff --git a/mediagoblin/templates/mediagoblin/user_pages/collection_item_confirm_remove.html b/mediagoblin/templates/mediagoblin/user_pages/collection_item_confirm_remove.html
index 9be10321..447201cd 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/collection_item_confirm_remove.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/collection_item_confirm_remove.html
@@ -24,7 +24,7 @@
<form action="{{ request.urlgen('mediagoblin.user_pages.collection_item_confirm_remove',
user=collection_item.in_collection.get_creator.username,
collection=collection_item.in_collection.slug,
- collection_item=collection_item._id) }}"
+ collection_item=collection_item.id) }}"
method="POST" enctype="multipart/form-data">
<div class="form_box">
<h1>
diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html
index cb06c7ba..11f2a2a1 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/media.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/media.html
@@ -79,15 +79,15 @@
{{ media.title }}
</h2>
{% if request.user and
- (media.uploader == request.user._id or
+ (media.uploader == request.user.id or
request.user.is_admin) %}
{% set edit_url = request.urlgen('mediagoblin.edit.edit_media',
user= media.get_uploader.username,
- media= media._id) %}
+ media= media.id) %}
<a class="button_action" href="{{ edit_url }}">{% trans %}Edit{% endtrans %}</a>
{% set delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete',
user= media.get_uploader.username,
- media= media._id) %}
+ media= media.id) %}
<a class="button_action" href="{{ delete_url }}">{% trans %}Delete{% endtrans %}</a>
{% endif %}
{% autoescape False %}
@@ -104,7 +104,7 @@
{% if request.user %}
<form action="{{ request.urlgen('mediagoblin.user_pages.media_post_comment',
user= media.get_uploader.username,
- media=media._id) }}" method="POST" id="form_comment">
+ media=media.id) }}" method="POST" id="form_comment">
<p>
{% trans %}You can use <a href="http://daringfireball.net/projects/markdown/basics">Markdown</a> for formatting.{% endtrans %}
</p>
@@ -117,11 +117,11 @@
{% endif %}
{% for comment in comments %}
{% set comment_author = comment.get_author %}
- {% if pagination.active_id == comment._id %}
- <div class="comment_wrapper comment_active" id="comment-{{ comment._id }}">
+ {% 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 }}">
+ <div class="comment_wrapper" id="comment-{{ comment.id }}">
{% endif %}
<div class="comment_author">
<img src="{{ request.staticdirect('/images/icon_comment.png') }}" />
@@ -131,7 +131,7 @@
</a>
{% trans %}at{% endtrans %}
<a href="{{ request.urlgen('mediagoblin.user_pages.media_home.view_comment',
- comment = comment._id,
+ comment = comment.id,
user = media.get_uploader.username,
media = media.slug_or_id) }}#comment">
{{ comment.created.strftime("%I:%M%p %Y-%m-%d") }}
@@ -181,7 +181,7 @@
{% endif %}
{% if app_config['allow_attachments']
and request.user
- and (media.uploader == request.user._id
+ and (media.uploader == request.user.id
or request.user.is_admin) %}
{% if not media.attachment_files|count %}
<h3>{% trans %}Attachments{% endtrans %}</h3>
@@ -189,7 +189,7 @@
<p>
<a href="{{ request.urlgen('mediagoblin.edit.attachments',
user=media.get_uploader.username,
- media=media._id) }}">{% trans %}Add attachment{% endtrans %}</a>
+ media=media.id) }}">{% trans %}Add attachment{% endtrans %}</a>
</p>
{% endif %}
@@ -197,7 +197,7 @@
<p>
<a type="submit" href="{{ request.urlgen('mediagoblin.user_pages.media_collect',
user=media.get_uploader.username,
- media=media._id) }}"
+ media=media.id) }}"
class="button_action"
title="{% trans %}Add media to collection{% endtrans %}">
<img src="{{ request.staticdirect('/images/icon_collect.png') }}"
diff --git a/mediagoblin/templates/mediagoblin/user_pages/media_collect.html b/mediagoblin/templates/mediagoblin/user_pages/media_collect.html
index cefe638b..4f35dfa3 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/media_collect.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/media_collect.html
@@ -28,7 +28,7 @@
<form action="{{ request.urlgen('mediagoblin.user_pages.media_collect',
user=media.get_uploader.username,
- media=media._id) }}"
+ media=media.id) }}"
method="POST" enctype="multipart/form-data">
<div class="form_box">
<h1>
diff --git a/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html b/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
index a3cf0210..833f500d 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
@@ -23,7 +23,7 @@
<form action="{{ request.urlgen('mediagoblin.user_pages.media_confirm_delete',
user=media.get_uploader.username,
- media=media._id) }}"
+ media=media.id) }}"
method="POST" enctype="multipart/form-data">
<div class="form_box">
<h1>
diff --git a/mediagoblin/templates/mediagoblin/user_pages/processing_panel.html b/mediagoblin/templates/mediagoblin/user_pages/processing_panel.html
index e673902b..2a449d45 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/processing_panel.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/processing_panel.html
@@ -41,7 +41,7 @@
</tr>
{% for media_entry in processing_entries %}
<tr>
- <td>{{ media_entry._id }}</td>
+ <td>{{ media_entry.id }}</td>
<td>{{ media_entry.title }}</td>
<td>{{ media_entry.created.strftime("%F %R") }}</td>
{% if media_entry.transcoding_progress %}
@@ -69,7 +69,7 @@
</tr>
{% for media_entry in failed_entries %}
<tr>
- <td>{{ media_entry._id }}</td>
+ <td>{{ media_entry.id }}</td>
<td>{{ media_entry.title }}</td>
<td>{{ media_entry.created.strftime("%F %R") }}</td>
{% if media_entry.get_fail_exception() %}
@@ -97,7 +97,7 @@
</tr>
{% for entry in processed_entries %}
<tr>
- <td>{{ entry._id }}</td>
+ <td>{{ entry.id }}</td>
<td><a href="{{ entry.url_for_self(request.urlgen) }}">{{ entry.title }}</a></td>
<td>{{ entry.created.strftime("%F %R") }}</td>
</tr>
diff --git a/mediagoblin/templates/mediagoblin/user_pages/user.html b/mediagoblin/templates/mediagoblin/user_pages/user.html
index 4f7b1208..65c636b9 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/user.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/user.html
@@ -90,7 +90,7 @@
</h1>
{% if not user.url and not user.bio %}
- {% if request.user and (request.user._id == user._id) %}
+ {% if request.user and (request.user.id == user.id) %}
<div class="profile_sidebar empty_space">
<p>
{% trans %}Here's a spot to tell others about yourself.{% endtrans %}
@@ -112,7 +112,7 @@
<div class="profile_sidebar">
{% include "mediagoblin/utils/profile.html" %}
{% if request.user and
- (request.user._id == user._id or request.user.is_admin) %}
+ (request.user.id == user.id or request.user.is_admin) %}
<a href="{{ request.urlgen('mediagoblin.edit.profile') }}?username={{
user.username }}">
{%- trans %}Edit profile{% endtrans -%}
@@ -139,7 +139,7 @@
{% include "mediagoblin/utils/feed_link.html" %}
</div>
{% else %}
- {% if request.user and (request.user._id == user._id) %}
+ {% if request.user and (request.user.id == user.id) %}
<div class="profile_showcase empty_space">
<p>
{% trans -%}
diff --git a/mediagoblin/templates/mediagoblin/utils/collection_gallery.html b/mediagoblin/templates/mediagoblin/utils/collection_gallery.html
index ab5e46ea..dcc59244 100644
--- a/mediagoblin/templates/mediagoblin/utils/collection_gallery.html
+++ b/mediagoblin/templates/mediagoblin/utils/collection_gallery.html
@@ -38,7 +38,7 @@
<a href="{{ entry_url }}">{{ item.note }}</a>
{% endif %}
{% if request.user and
- (item.in_collection.creator == request.user._id or
+ (item.in_collection.creator == request.user.id or
request.user.is_admin) %}
{%- set remove_url=request.urlgen(
'mediagoblin.user_pages.collection_item_confirm_remove',
diff --git a/mediagoblin/tests/__init__.py b/mediagoblin/tests/__init__.py
index 4e84914a..5a3235c6 100644
--- a/mediagoblin/tests/__init__.py
+++ b/mediagoblin/tests/__init__.py
@@ -25,6 +25,10 @@ from mediagoblin.tests.tools import (
def setup_package():
suicide_if_bad_celery_environ()
+ import warnings
+ from sqlalchemy.exc import SAWarning
+ warnings.simplefilter("error", SAWarning)
+
def teardown_package():
# Remove and reinstall user_dev directories
diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py
new file mode 100644
index 00000000..188cdadb
--- /dev/null
+++ b/mediagoblin/tests/test_api.py
@@ -0,0 +1,104 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+import logging
+import base64
+
+from pkg_resources import resource_filename
+
+from mediagoblin import mg_globals
+from mediagoblin.tools import template, pluginapi
+from mediagoblin.tests.tools import get_test_app, fixture_add_user
+
+
+_log = logging.getLogger(__name__)
+
+def resource(filename):
+ '''
+ Borrowed from the submission tests
+ '''
+ return resource_filename('mediagoblin.tests', 'test_submission/' + filename)
+
+
+GOOD_JPG = resource('good.jpg')
+GOOD_PNG = resource('good.png')
+EVIL_FILE = resource('evil')
+EVIL_JPG = resource('evil.jpg')
+EVIL_PNG = resource('evil.png')
+BIG_BLUE = resource('bigblue.png')
+
+
+class TestAPI(object):
+ def setUp(self):
+ self.app = get_test_app()
+ self.db = mg_globals.database
+
+ self.user_password = u'4cc355_70k3N'
+ self.user = fixture_add_user(u'joapi', self.user_password)
+
+ def login(self):
+ self.app.post(
+ '/auth/login/', {
+ 'username': self.user.username,
+ 'password': self.user_password})
+
+ def get_context(self, template_name):
+ return template.TEMPLATE_TEST_CONTEXT[template_name]
+
+ def http_auth_headers(self):
+ return {'Authorization': 'Basic {0}'.format(
+ base64.b64encode(':'.join([
+ self.user.username,
+ self.user_password])))}
+
+ def do_post(self, data, **kwargs):
+ url = kwargs.pop('url', '/api/submit')
+ do_follow = kwargs.pop('do_follow', False)
+
+ if not 'headers' in kwargs.keys():
+ kwargs['headers'] = self.http_auth_headers()
+
+ response = self.app.post(url, data, **kwargs)
+
+ if do_follow:
+ response.follow()
+
+ return response
+
+ def upload_data(self, filename):
+ return {'upload_files': [('file', filename)]}
+
+ def test_1_test_test_view(self):
+ self.login()
+
+ response = self.app.get(
+ '/api/test',
+ headers=self.http_auth_headers())
+
+ assert response.body == \
+ '{"username": "joapi", "email": "joapi@example.com"}'
+
+ def test_2_test_submission(self):
+ self.login()
+
+ response = self.do_post(
+ {'title': 'Great JPG!'},
+ **self.upload_data(GOOD_JPG))
+
+ assert response.status_int == 200
+
+ assert self.db.MediaEntry.query.filter_by(title=u'Great JPG!').first()
diff --git a/mediagoblin/tests/test_auth.py b/mediagoblin/tests/test_auth.py
index 1b84b435..169b2309 100644
--- a/mediagoblin/tests/test_auth.py
+++ b/mediagoblin/tests/test_auth.py
@@ -19,9 +19,10 @@ import datetime
from nose.tools import assert_equal
+from mediagoblin import mg_globals
from mediagoblin.auth import lib as auth_lib
+from mediagoblin.db.sql.models import User
from mediagoblin.tests.tools import setup_fresh_app, fixture_add_user
-from mediagoblin import mg_globals
from mediagoblin.tools import template, mail
@@ -124,7 +125,7 @@ def test_register_views(test_app):
u'Invalid email address.']
## At this point there should be no users in the database ;)
- assert not mg_globals.database.User.find().count()
+ assert not User.query.count()
# Successful register
# -------------------
@@ -153,7 +154,7 @@ def test_register_views(test_app):
## Make sure user is logged in
request = template.TEMPLATE_TEST_CONTEXT[
'mediagoblin/user_pages/user.html']['request']
- assert request.session['user_id'] == unicode(new_user._id)
+ assert request.session['user_id'] == unicode(new_user.id)
## Make sure we get email confirmation, and try verifying
assert len(mail.EMAIL_TEST_INBOX) == 1
@@ -170,7 +171,7 @@ def test_register_views(test_app):
### user should have these same parameters
assert parsed_get_params['userid'] == [
- unicode(new_user._id)]
+ unicode(new_user.id)]
assert parsed_get_params['token'] == [
new_user.verification_key]
@@ -178,7 +179,7 @@ def test_register_views(test_app):
template.clear_test_template_context()
response = test_app.get(
"/auth/verify_email/?userid=%s&token=total_bs" % unicode(
- new_user._id))
+ new_user.id))
response.follow()
context = template.TEMPLATE_TEST_CONTEXT[
'mediagoblin/user_pages/user.html']
@@ -253,7 +254,7 @@ def test_register_views(test_app):
# user should have matching parameters
new_user = mg_globals.database.User.find_one({'username': u'happygirl'})
- assert parsed_get_params['userid'] == [unicode(new_user._id)]
+ assert parsed_get_params['userid'] == [unicode(new_user.id)]
assert parsed_get_params['token'] == [new_user.fp_verification_key]
### The forgotten password token should be set to expire in ~ 10 days
@@ -264,8 +265,8 @@ 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=404)
- assert_equal(response.status, '404 Not Found')
+ new_user.id), status=404)
+ assert_equal(response.status.split()[0], u'404') # status="404 NOT FOUND"
## Try using an expired token to change password, shouldn't work
template.clear_test_template_context()
@@ -274,7 +275,7 @@ def test_register_views(test_app):
new_user.fp_token_expire = datetime.datetime.now()
new_user.save()
response = test_app.get("%s?%s" % (path, get_params), status=404)
- assert_equal(response.status, '404 Not Found')
+ assert_equal(response.status.split()[0], u'404') # status="404 NOT FOUND"
new_user.fp_token_expire = real_token_expiration
new_user.save()
@@ -392,7 +393,7 @@ def test_authentication_views(test_app):
# Make sure user is in the session
context = template.TEMPLATE_TEST_CONTEXT['mediagoblin/root.html']
session = context['request'].session
- assert session['user_id'] == unicode(test_user._id)
+ assert session['user_id'] == unicode(test_user.id)
# Successful logout
# -----------------
diff --git a/mediagoblin/tests/test_mgoblin_app.ini b/mediagoblin/tests/test_mgoblin_app.ini
index cde61a70..42d3785a 100644
--- a/mediagoblin/tests/test_mgoblin_app.ini
+++ b/mediagoblin/tests/test_mgoblin_app.ini
@@ -35,3 +35,5 @@ BROKER_HOST = "sqlite:///%(here)s/test_user_dev/kombu.db"
[plugins]
[[mediagoblin.plugins.api]]
[[mediagoblin.plugins.oauth]]
+[[mediagoblin.plugins.httpapiauth]]
+
diff --git a/mediagoblin/tests/test_storage.py b/mediagoblin/tests/test_storage.py
index 6fc2e57c..61326ae9 100644
--- a/mediagoblin/tests/test_storage.py
+++ b/mediagoblin/tests/test_storage.py
@@ -18,7 +18,7 @@
import os
import tempfile
-from nose.tools import assert_raises
+from nose.tools import assert_raises, assert_equal, assert_true
from werkzeug.utils import secure_filename
from mediagoblin import storage
@@ -78,9 +78,10 @@ def test_storage_system_from_config():
'garbage_arg': 'garbage_arg',
'storage_class':
'mediagoblin.tests.test_storage:FakeStorageSystem'})
- assert this_storage.foobie == 'eiboof'
- assert this_storage.blech == 'hcelb'
- assert this_storage.__class__ is FakeStorageSystem
+ assert_equal(this_storage.foobie, 'eiboof')
+ assert_equal(this_storage.blech, 'hcelb')
+ assert_equal(unicode(this_storage.__class__),
+ u'mediagoblin.tests.test_storage.FakeStorageSystem')
##########################
diff --git a/mediagoblin/tests/test_submission.py b/mediagoblin/tests/test_submission.py
index b6fe0015..589ba7ed 100644
--- a/mediagoblin/tests/test_submission.py
+++ b/mediagoblin/tests/test_submission.py
@@ -184,7 +184,7 @@ class TestSubmission:
# ---------------------------------------------------
response, request = self.do_post({'confirm': 'y'}, *REQUEST_CONTEXT,
do_follow=True, url=delete_url)
- self.check_media(request, {'_id': media_id}, 0)
+ self.check_media(request, {'id': media_id}, 0)
self.check_comments(request, media_id, 0)
def test_evil_file(self):
diff --git a/mediagoblin/tests/test_tests.py b/mediagoblin/tests/test_tests.py
index 20832ac7..2228d15a 100644
--- a/mediagoblin/tests/test_tests.py
+++ b/mediagoblin/tests/test_tests.py
@@ -14,9 +14,9 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from mediagoblin.tests.tools import get_test_app
-
from mediagoblin import mg_globals
+from mediagoblin.tests.tools import get_test_app
+from mediagoblin.db.sql.models import User
def test_get_test_app_wipes_db():
@@ -24,15 +24,15 @@ def test_get_test_app_wipes_db():
Make sure we get a fresh database on every wipe :)
"""
get_test_app()
- assert mg_globals.database.User.find().count() == 0
+ assert User.query.count() == 0
new_user = mg_globals.database.User()
new_user.username = u'lolcat'
new_user.email = u'lol@cats.example.org'
new_user.pw_hash = u'pretend_this_is_a_hash'
new_user.save()
- assert mg_globals.database.User.find().count() == 1
+ assert User.query.count() == 1
get_test_app()
- assert mg_globals.database.User.find().count() == 0
+ assert User.query.count() == 0
diff --git a/mediagoblin/tests/tools.py b/mediagoblin/tests/tools.py
index d3369831..0e923aee 100644
--- a/mediagoblin/tests/tools.py
+++ b/mediagoblin/tests/tools.py
@@ -78,7 +78,7 @@ class TestingMeddleware(BaseMeddleware):
def process_response(self, request, response):
# All following tests should be for html only!
- if response.content_type != "text/html":
+ if getattr(response, 'content_type', None) != "text/html":
# Get out early
return
@@ -184,20 +184,20 @@ def assert_db_meets_expected(db, expected):
"""
Assert a database contains the things we expect it to.
- Objects are found via '_id', so you should make sure your document
- has an _id.
+ Objects are found via 'id', so you should make sure your document
+ has an id.
Args:
- db: pymongo or mongokit database connection
- expected: the data we expect. Formatted like:
{'collection_name': [
- {'_id': 'foo',
+ {'id': 'foo',
'some_field': 'some_value'},]}
"""
for collection_name, collection_data in expected.iteritems():
collection = db[collection_name]
for expected_document in collection_data:
- document = collection.find_one({'_id': expected_document['_id']})
+ 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
diff --git a/mediagoblin/tools/pagination.py b/mediagoblin/tools/pagination.py
index 50e59070..af889abd 100644
--- a/mediagoblin/tools/pagination.py
+++ b/mediagoblin/tools/pagination.py
@@ -41,7 +41,7 @@ class Pagination(object):
- per_page: number of objects per page
- cursor: db cursor
- jump_to_id: ObjectId, sets the page to the page containing the
- object with _id == jump_to_id.
+ object with id == jump_to_id.
"""
self.page = page
self.per_page = per_page
@@ -53,7 +53,7 @@ class Pagination(object):
cursor = copy.copy(self.cursor)
for (doc, increment) in izip(cursor, count(0)):
- if doc._id == jump_to_id:
+ if doc.id == jump_to_id:
self.page = 1 + int(floor(increment / self.per_page))
self.active_id = jump_to_id
@@ -63,8 +63,11 @@ class Pagination(object):
"""
Returns slice of objects for the requested page
"""
- return self.cursor.skip(
- (self.page - 1) * self.per_page).limit(self.per_page)
+ # TODO, return None for out of index so templates can
+ # distinguish between empty galleries and out-of-bound pages???
+ return self.cursor.slice(
+ (self.page - 1) * self.per_page,
+ self.page * self.per_page)
@property
def pages(self):
diff --git a/mediagoblin/tools/request.py b/mediagoblin/tools/request.py
index ae372c92..66d7ffa3 100644
--- a/mediagoblin/tools/request.py
+++ b/mediagoblin/tools/request.py
@@ -34,7 +34,7 @@ def setup_user_in_request(request):
except InvalidId:
user = None
else:
- user = request.db.User.find_one({'_id': oid})
+ user = request.db.User.find_one({'id': oid})
if not user:
# Something's wrong... this user doesn't exist? Invalidate
diff --git a/mediagoblin/tools/response.py b/mediagoblin/tools/response.py
index 81939a77..80df1f5a 100644
--- a/mediagoblin/tools/response.py
+++ b/mediagoblin/tools/response.py
@@ -14,11 +14,16 @@
# 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 webob import Response, exc
+import werkzeug.utils
+from werkzeug.wrappers import Response as wz_Response
from mediagoblin.tools.template import render_template
from mediagoblin.tools.translate import (lazy_pass_to_ugettext as _,
pass_to_ugettext)
+class Response(wz_Response):
+ """Set default response mimetype to HTML, otherwise we get text/plain"""
+ default_mimetype = u'text/html'
+
def render_to_response(request, template, context, status=200):
"""Much like Django's shortcut.render()"""
@@ -57,15 +62,40 @@ def render_404(request):
"you're looking for has been moved or deleted.")
return render_error(request, 404, err_msg=err_msg)
+
+def render_http_exception(request, exc, description):
+ """Return Response() given a werkzeug.HTTPException
+
+ :param exc: werkzeug.HTTPException or subclass thereof
+ :description: message describing the error."""
+ # If we were passed the HTTPException stock description on
+ # exceptions where we have localized ones, use those:
+ stock_desc = (description == exc.__class__.description)
+
+ if stock_desc and exc.code == 403:
+ return render_403(request)
+ elif stock_desc and exc.code == 404:
+ return render_404(request)
+
+ return render_error(request, title=exc.args[0],
+ err_msg=description,
+ status=exc.code)
+
+
def redirect(request, *args, **kwargs):
- """Returns a HTTPFound(), takes a request and then urlgen params"""
+ """Redirects to an URL, using urlgen params or location string
+
+ :param querystring: querystring to be appended to the URL
+ :param location: If the location keyword is given, redirect to the URL
+ """
+ querystring = kwargs.pop('querystring', None)
- querystring = None
- if kwargs.get('querystring'):
- querystring = kwargs.get('querystring')
- del kwargs['querystring']
+ # Redirect to URL if given by "location=..."
+ if 'location' in kwargs:
+ location = kwargs.pop('location')
+ else:
+ location = request.urlgen(*args, **kwargs)
- return exc.HTTPFound(
- location=''.join([
- request.urlgen(*args, **kwargs),
- querystring if querystring else '']))
+ if querystring:
+ location += querystring
+ return werkzeug.utils.redirect(location)
diff --git a/mediagoblin/tools/routing.py b/mediagoblin/tools/routing.py
new file mode 100644
index 00000000..791cd1e6
--- /dev/null
+++ b/mediagoblin/tools/routing.py
@@ -0,0 +1,66 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import logging
+
+from werkzeug.routing import Map, Rule
+from mediagoblin.tools.common import import_component
+
+
+_log = logging.getLogger(__name__)
+
+url_map = Map()
+
+
+class MGRoute(Rule):
+ def __init__(self, endpoint, url, controller):
+ Rule.__init__(self, url, endpoint=endpoint)
+ self.gmg_controller = controller
+
+ def empty(self):
+ new_rule = Rule.empty(self)
+ new_rule.gmg_controller = self.gmg_controller
+ return new_rule
+
+
+def endpoint_to_controller(rule):
+ endpoint = rule.endpoint
+ view_func = rule.gmg_controller
+
+ _log.debug('endpoint: {0} view_func: {1}'.format(endpoint, view_func))
+
+ # import the endpoint, or if it's already a callable, call that
+ if isinstance(view_func, basestring):
+ view_func = import_component(view_func)
+ rule.gmg_controller = view_func
+
+ return view_func
+
+
+def add_route(endpoint, url, controller):
+ """
+ Add a route to the url mapping
+ """
+ url_map.add(MGRoute(endpoint, url, controller))
+
+
+def mount(mountpoint, routes):
+ """
+ Mount a bunch of routes to this mountpoint
+ """
+ for endpoint, url, controller in routes:
+ url = "%s/%s" % (mountpoint.rstrip('/'), url.lstrip('/'))
+ add_route(endpoint, url, controller)
diff --git a/mediagoblin/user_pages/lib.py b/mediagoblin/user_pages/lib.py
index a4be14c2..8a064a7c 100644
--- a/mediagoblin/user_pages/lib.py
+++ b/mediagoblin/user_pages/lib.py
@@ -33,7 +33,7 @@ def send_comment_email(user, comment, media, request):
comment_url = request.urlgen(
'mediagoblin.user_pages.media_home.view_comment',
- comment=comment._id,
+ comment=comment.id,
user=media.get_uploader.username,
media=media.slug_or_id,
qualified=True) + '#comment'
diff --git a/mediagoblin/user_pages/routing.py b/mediagoblin/user_pages/routing.py
index 8162e641..63bf5c2a 100644
--- a/mediagoblin/user_pages/routing.py
+++ b/mediagoblin/user_pages/routing.py
@@ -14,7 +14,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from mediagoblin.routing import add_route
+from mediagoblin.tools.routing import add_route
add_route('mediagoblin.user_pages.user_home',
'/u/<string:user>/', 'mediagoblin.user_pages.views:user_home')
@@ -27,6 +27,7 @@ add_route('mediagoblin.user_pages.media_confirm_delete',
'/u/<string:user>/m/<string:media>/confirm-delete/',
'mediagoblin.user_pages.views:media_confirm_delete')
+# Submission handling of new comments. TODO: only allow for POST methods
add_route('mediagoblin.user_pages.media_post_comment',
'/u/<string:user>/m/<string:media>/comment/add/',
'mediagoblin.user_pages.views:media_post_comment')
diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py
index cbf3f15f..28ef90d6 100644
--- a/mediagoblin/user_pages/views.py
+++ b/mediagoblin/user_pages/views.py
@@ -14,13 +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/>.
-from webob import exc
import logging
import datetime
from mediagoblin import messages, mg_globals
from mediagoblin.db.util import DESCENDING, ObjectId
-from mediagoblin.db.sql.models import MediaEntry, Collection, CollectionItem
+from mediagoblin.db.sql.models import (MediaEntry, Collection, CollectionItem,
+ User)
from mediagoblin.tools.response import render_to_response, render_404, redirect
from mediagoblin.tools.translate import pass_to_ugettext as _
from mediagoblin.tools.pagination import Pagination
@@ -42,8 +42,10 @@ _log.setLevel(logging.DEBUG)
@uses_pagination
def user_home(request, page):
"""'Homepage' of a User()"""
- user = request.db.User.find_one({
- 'username': request.matchdict['user']})
+ # TODO: decide if we only want homepages for active users, we can
+ # then use the @get_active_user decorator and also simplify the
+ # template html.
+ user = User.query.filter_by(username=request.matchdict['user']).first()
if not user:
return render_404(request)
elif user.status != u'active':
@@ -52,9 +54,9 @@ def user_home(request, page):
'mediagoblin/user_pages/user.html',
{'user': user})
- cursor = request.db.MediaEntry.find(
- {'uploader': user._id,
- 'state': u'processed'}).sort('created', DESCENDING)
+ cursor = MediaEntry.query.\
+ filter_by(uploader = user.id,
+ state = u'processed').sort('created', DESCENDING)
pagination = Pagination(page, cursor)
media_entries = pagination()
@@ -83,6 +85,7 @@ def user_gallery(request, page, url_user=None):
cursor = MediaEntry.query.filter_by(
uploader=url_user.id,
state=u'processed').order_by(MediaEntry.created.desc())
+
# Paginate gallery
pagination = Pagination(page, cursor)
media_entries = pagination()
@@ -108,7 +111,7 @@ def media_home(request, media, page, **kwargs):
"""
'Homepage' of a MediaEntry()
"""
- if ObjectId(request.matchdict.get('comment')):
+ if request.matchdict.get('comment', None):
pagination = Pagination(
page, media.get_comments(
mg_globals.app_config['comments_ascending']),
@@ -167,106 +170,95 @@ def media_post_comment(request, media):
media_uploader.wants_comment_notification):
send_comment_email(media_uploader, comment, media, request)
- return exc.HTTPFound(
- location=media.url_for_self(request.urlgen))
+ return redirect(request, location=media.url_for_self(request.urlgen))
@get_user_media_entry
@require_active_login
def media_collect(request, media):
+ """Add media to collection submission"""
form = user_forms.MediaCollectForm(request.form)
- filt = (request.db.Collection.creator == request.user.id)
- form.collection.query = request.db.Collection.query.filter(
- filt).order_by(request.db.Collection.title)
-
- if request.method == 'POST':
- if form.validate():
-
- collection = None
- collection_item = request.db.CollectionItem()
-
- # If the user is adding a new collection, use that
- if request.form['collection_title']:
- collection = request.db.Collection()
- collection.id = ObjectId()
-
- collection.title = (
- unicode(request.form['collection_title']))
-
- collection.description = unicode(
- request.form.get('collection_description'))
- collection.creator = request.user._id
- collection.generate_slug()
-
- # Make sure this user isn't duplicating an existing collection
- existing_collection = request.db.Collection.find_one({
- 'creator': request.user._id,
- 'title': collection.title})
-
- if existing_collection:
- messages.add_message(
- request, messages.ERROR,
- _('You already have a collection called "%s"!'
- % collection.title))
-
- return redirect(request, "mediagoblin.user_pages.media_home",
- user=request.user.username,
- media=media.id)
-
- collection.save(validate=True)
-
- collection_item.collection = collection.id
- # Otherwise, use the collection selected from the drop-down
- else:
- collection = request.db.Collection.find_one({
- '_id': request.form.get('collection')})
- collection_item.collection = collection.id
-
- # Make sure the user actually selected a collection
- if not collection:
- messages.add_message(
- request, messages.ERROR,
- _('You have to select or add a collection'))
- # Check whether media already exists in collection
- elif request.db.CollectionItem.find_one({
- 'media_entry': media.id,
- 'collection': collection_item.collection}):
- messages.add_message(
- request, messages.ERROR,
- _('"%s" already in collection "%s"'
- % (media.title, collection.title)))
- else:
- collection_item.media_entry = media.id
- collection_item.author = request.user.id
- collection_item.note = unicode(request.form['note'])
- collection_item.save(validate=True)
-
- collection.items = collection.items + 1
- collection.save(validate=True)
-
- media.collected = media.collected + 1
- media.save()
-
- messages.add_message(
- request, messages.SUCCESS, _('"%s" added to collection "%s"'
- % (media.title, collection.title)))
+ # A user's own collections:
+ form.collection.query = Collection.query.filter_by(
+ creator = request.user.id).order_by(Collection.title)
+
+ if request.method != 'POST' or not form.validate():
+ # No POST submission, or invalid form
+ if not form.validate():
+ messages.add_message(request, messages.ERROR,
+ _('Please check your entries and try again.'))
+ return render_to_response(
+ request,
+ 'mediagoblin/user_pages/media_collect.html',
+ {'media': media,
+ 'form': form})
+
+ # If we are here, method=POST and the form is valid, submit things.
+ # If the user is adding a new collection, use that:
+ if request.form['collection_title']:
+ # Make sure this user isn't duplicating an existing collection
+ existing_collection = Collection.query.filter_by(
+ creator=request.user.id,
+ title=request.form['collection_title']).first()
+ if existing_collection:
+ messages.add_message(request, messages.ERROR,
+ _('You already have a collection called "%s"!'
+ % collection.title))
return redirect(request, "mediagoblin.user_pages.media_home",
- user=media.get_uploader.username,
+ user=request.user.username,
media=media.id)
- else:
- messages.add_message(
- request, messages.ERROR,
- _('Please check your entries and try again.'))
- return render_to_response(
- request,
- 'mediagoblin/user_pages/media_collect.html',
- {'media': media,
- 'form': form})
+ collection = Collection()
+ collection.title = request.form['collection_title']
+ collection.description = request.form.get('collection_description')
+ collection.creator = request.user.id
+ collection.generate_slug()
+ collection.save()
+ # Otherwise, use the collection selected from the drop-down
+ else:
+ collection = Collection.query.filter_by(
+ id=request.form.get('collection')).first()
+ # Make sure the user actually selected a collection
+ if not collection:
+ messages.add_message(
+ request, messages.ERROR,
+ _('You have to select or add a collection'))
+
+ # Check whether media already exists in collection
+ elif CollectionItem.query.filter_by(
+ media_entry=media.id,
+ collection=collection.id).first():
+ messages.add_message(request, messages.ERROR,
+ _('"%s" already in collection "%s"'
+ % (media.title, collection.title)))
+ else: # Add item to collection
+ collection_item = request.db.CollectionItem()
+ collection_item.collection = collection.id
+ collection_item.media_entry = media.id
+ collection_item.author = request.user.id
+ collection_item.note = request.form['note']
+ collection_item.save()
+
+ collection.items = collection.items + 1
+ collection.save()
+
+ media.collected = media.collected + 1
+ media.save()
+
+ messages.add_message(request, messages.SUCCESS,
+ _('"%s" added to collection "%s"'
+ % (media.title, collection.title)))
+
+ return redirect(request, "mediagoblin.user_pages.media_home",
+ user=media.get_uploader.username,
+ media=media.id)
+
+
+#TODO: Why does @user_may_delete_media not implicate @require_active_login?
@get_user_media_entry
@require_active_login
@user_may_delete_media
@@ -302,11 +294,11 @@ def media_confirm_delete(request, media):
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))
+ return redirect(request,
+ location=media.url_for_self(request.urlgen))
if ((request.user.is_admin and
- request.user._id != media.uploader)):
+ request.user.id != media.uploader)):
messages.add_message(
request, messages.WARNING,
_("You are about to delete another user's media. "
@@ -378,7 +370,7 @@ def collection_item_confirm_remove(request, collection_item):
collection=collection.slug)
if ((request.user.is_admin and
- request.user._id != collection_item.in_collection.creator)):
+ request.user.id != collection_item.in_collection.creator)):
messages.add_message(
request, messages.WARNING,
_("You are about to delete an item from another user's collection. "
@@ -428,7 +420,7 @@ def collection_confirm_delete(request, collection):
collection=collection.slug)
if ((request.user.is_admin and
- request.user._id != collection.creator)):
+ request.user.id != collection.creator)):
messages.add_message(
request, messages.WARNING,
_("You are about to delete another user's collection. "
@@ -448,18 +440,17 @@ def atom_feed(request):
"""
generates the atom feed with the newest images
"""
-
- user = request.db.User.find_one({
- 'username': request.matchdict['user'],
- 'status': u'active'})
+ user = User.query.filter_by(
+ username = request.matchdict['user'],
+ status = u'active').first()
if not user:
return render_404(request)
- cursor = request.db.MediaEntry.find({
- 'uploader': user._id,
- 'state': u'processed'}) \
- .sort('created', DESCENDING) \
- .limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS)
+ cursor = MediaEntry.query.filter_by(
+ uploader = user.id,
+ state = u'processed').\
+ sort('created', DESCENDING).\
+ limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS)
"""
ATOM feed id is a tag URI (see http://en.wikipedia.org/wiki/Tag_URI)
@@ -512,20 +503,19 @@ def collection_atom_feed(request):
"""
generates the atom feed with the newest images from a collection
"""
-
- user = request.db.User.find_one({
- 'username': request.matchdict['user'],
- 'status': u'active'})
+ user = User.query.filter_by(
+ username = request.matchdict['user'],
+ status = u'active').first()
if not user:
return render_404(request)
- collection = request.db.Collection.find_one({
- 'creator': user.id,
- 'slug': request.matchdict['collection']})
+ collection = Collection.query.filter_by(
+ creator=user.id,
+ slug=request.matchdict['collection']).first()
- cursor = request.db.CollectionItem.find({
- 'collection': collection._id}) \
- .sort('added', DESCENDING) \
+ cursor = CollectionItem.query.filter_by(
+ collection=collection.id) \
+ .sort(CollectionItem.added.desc()) \
.limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS)
"""
@@ -583,44 +573,34 @@ def processing_panel(request):
Show to the user what media is still in conversion/processing...
and what failed, and why!
"""
- # Get the user
- user = request.db.User.find_one(
- {'username': request.matchdict['user'],
- 'status': u'active'})
-
- # Make sure the user exists and is active
- if not user:
- return render_404(request)
- elif user.status != u'active':
- return render_to_response(
- request,
- 'mediagoblin/user_pages/user.html',
- {'user': user})
-
- # XXX: Should this be a decorator?
+ user = User.query.filter_by(username=request.matchdict['user']).first()
+ # TODO: XXX: Should this be a decorator?
#
# Make sure we have permission to access this user's panel. Only
# admins and this user herself should be able to do so.
- if not (user._id == request.user._id
- or request.user.is_admin):
- # No? Let's simply redirect to this user's homepage then.
+ if not (user.id == request.user.id or request.user.is_admin):
+ # No? Simply redirect to this user's homepage.
return redirect(
request, 'mediagoblin.user_pages.user_home',
- user=request.matchdict['user'])
+ user=user.username)
# Get media entries which are in-processing
- processing_entries = request.db.MediaEntry.find(
- {'uploader': user._id,
- 'state': u'processing'}).sort('created', DESCENDING)
+ processing_entries = MediaEntry.query.\
+ filter_by(uploader = user.id,
+ state = u'processing').\
+ order_by(MediaEntry.created.desc())
# Get media entries which have failed to process
- failed_entries = request.db.MediaEntry.find(
- {'uploader': user._id,
- 'state': u'failed'}).sort('created', DESCENDING)
-
- processed_entries = request.db.MediaEntry.find(
- {'uploader': user._id,
- 'state': u'processed'}).sort('created', DESCENDING).limit(10)
+ failed_entries = MediaEntry.query.\
+ filter_by(uploader = user.id,
+ state = u'failed').\
+ order_by(MediaEntry.created.desc())
+
+ processed_entries = MediaEntry.query.\
+ filter_by(uploader = user.id,
+ state = u'processed').\
+ order_by(MediaEntry.created.desc()).\
+ limit(10)
# Render to response
return render_to_response(
diff --git a/mediagoblin/webfinger/routing.py b/mediagoblin/webfinger/routing.py
index 18f9eb02..eb10509f 100644
--- a/mediagoblin/webfinger/routing.py
+++ b/mediagoblin/webfinger/routing.py
@@ -14,7 +14,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from mediagoblin.routing import add_route
+from mediagoblin.tools.routing import add_route
add_route('mediagoblin.webfinger.host_meta', '/.well-known/host-meta',
'mediagoblin.webfinger.views:host_meta')
diff --git a/setup.py b/setup.py
index e3e56bf2..dc4bd5e6 100644
--- a/setup.py
+++ b/setup.py
@@ -44,7 +44,6 @@ setup(
'setuptools',
'PasteScript',
'beaker',
- 'webob<=1.2a2,>=1.1',
'wtforms',
'py-bcrypt',
'nose',