diff options
120 files changed, 1416 insertions, 1267 deletions
@@ -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 Binary files differindex 06dc2263..d8d02ded 100644 --- a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 09105662..ae6216cf 100644 --- a/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex c511196a..9d9955ce 100644 --- a/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/da/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 793fb975..6374be42 100644 --- a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex b5e6398b..28500ceb 100644 --- a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex bbc0efb0..98dbebdd 100644 --- a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 155ccd22..ba9aad9b 100644 --- a/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/fa/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex fcef90d8..b0106832 100644 --- a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 2db7a9a9..d38d8938 100644 --- a/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/he/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 488d8dd2..32ec1bc2 100644 --- a/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex b2157a19..23f9f1bf 100644 --- a/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/is_IS/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex cd60d011..dad0aec4 100644 --- a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 1b45aff2..1ebdba16 100644 --- a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 5ffc82dd..e7602e15 100644 --- a/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/ko_KR/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex fbe19c51..afa8849c 100644 --- a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 2953d800..206c906c 100644 --- a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo 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!<HAL2000></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 Binary files differindex cbbed538..64a4d00f 100644 --- a/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/pl/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 4a027c1c..2cad018a 100644 --- a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 07bfd9b2..dc64a04b 100644 --- a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 90d2cfda..5cb985ec 100644 --- a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 99394357..d84b09c4 100644 --- a/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 0711332d..1599b039 100644 --- a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 0cca32cf..64880aed 100644 --- a/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/sq/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 8084b3f4..dd67d341 100644 --- a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 435c406b..e4586d50 100644 --- a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 43de15d1..5009e371 100644 --- a/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 854f7b51..7b1c154c 100644 --- a/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/zh_TW.Big5/LC_MESSAGES/mediagoblin.mo 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 Binary files differindex 846b8f70..13346b7c 100644 --- a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo +++ b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo 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') @@ -44,7 +44,6 @@ setup( 'setuptools', 'PasteScript', 'beaker', - 'webob<=1.2a2,>=1.1', 'wtforms', 'py-bcrypt', 'nose', |