diff options
125 files changed, 7566 insertions, 3179 deletions
@@ -4,9 +4,12 @@ [jinja2: mediagoblin/templates/**.html] # Extract jinja templates (html) encoding = utf-8 +extensions = jinja2.ext.autoescape + [jinja2: mediagoblin/templates/**.txt] # Extract jinja templates (text) encoding = utf-8 +extensions = jinja2.ext.autoescape # # Extraction from JavaScript files # [javascript: mediagoblin/static/js/**.js] diff --git a/docs/source/deploying.rst b/docs/source/deploying.rst index b944a3d3..70b1a6af 100644 --- a/docs/source/deploying.rst +++ b/docs/source/deploying.rst @@ -239,26 +239,9 @@ example: :: Visit the site you've set up in your browser by visiting <http://mediagobilin.example.org>. You should see MediaGoblin! -Production MediaGoblin Deployments with Paste -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The instance configured with ``lazyserver`` is not ideal for a -production MediaGoblin deployment. Ideally, you should be able to use -a a control script (i.e. init script.) to launch and restart the -MediaGoblin process. - -Use the following command as the basis for such a script: :: - - CELERY_ALWAYS_EAGER=true \ - /srv/mediagoblin.example.org/mediagoblin/bin/paster serve \ - /srv/mediagoblin.example.org/mediagoblin/paste.ini \ - --pid-file=/tmp/mediagoblin.pid \ - --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543 \ - .. note:: - The above configuration places MediaGoblin in "always eager" mode - with Celery. This is fine for development and smaller - deployments. However, if you're getting into the really large - deployment category, consider reading the section of this manual on - Celery. + The configuration described above is sufficient for development and + smaller deployments. However, for larger production deployments + with larger processing requirements, see the + ":doc:`production-deployments`" documentation. diff --git a/docs/source/index.rst b/docs/source/index.rst index e9f3993e..6ffe0974 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -14,6 +14,7 @@ Table of Contents: foreword about deploying + production-deployments configuration help theming diff --git a/docs/source/production-deployments.rst b/docs/source/production-deployments.rst new file mode 100644 index 00000000..7bf26169 --- /dev/null +++ b/docs/source/production-deployments.rst @@ -0,0 +1,82 @@ +========================================= +Considerations for Production Deployments +========================================= + +This document contains a number of suggestions for deploying +MediaGoblin in actual production environments. Consider +":doc:`deploying`" for a basic overview of how to deploy Media +Goblin. + +Deploy with Paste +----------------- + +The instance configured with ``./lazyserver.sh`` is not ideal for a +production MediaGoblin deployment. Ideally, you should be able to use +an "init" or "control" script to launch and restart the MediaGoblin +process. + +Use the following command as the basis for such a script: :: + + CELERY_ALWAYS_EAGER=true \ + /srv/mediagoblin.example.org/mediagoblin/bin/paster serve \ + /srv/mediagoblin.example.org/mediagoblin/paste.ini \ + --pid-file=/var/run/mediagoblin.pid \ + --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543 \ + +The above configuration places MediaGoblin in "always eager" mode +with Celery, this means that submissions of content will be processed +synchronously, and the user will advance to the next page only after +processing is complete. If we take Celery out of "always eager mode," +the user will be able to immediately return to the MediaGoblin site +while processing is ongoing. In these cases, use the following command +as the basis for your script: :: + + CELERY_ALWAYS_EAGER=false \ + /srv/mediagoblin.example.org/mediagoblin/bin/paster serve \ + /srv/mediagoblin.example.org/mediagoblin/paste.ini \ + --pid-file=/var/run/mediagoblin.pid \ + --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543 \ + +Separate Celery +--------------- + +While the ``./lazyserer.sh`` configuration provides an efficient way to +start using a MediaGoblin instance, it is not suitable for production +deployments for several reasons: + +In nearly every scenario, work on the Celery queue will need to +balance with the demands of other processes, and cannot proceed +synchronously. This is a particularly relevant problem if you use +MediaGoblin to host video content. Processing with Celery ought to be +operationally separate from the MediaGoblin application itself, this +simplifies management and support better workload distribution. + +Basically, if you're doing anything beyond a trivial workload, such as +image hosting for a small set of users, or have limited media types +such as "ASCII art" or icon sharing, you will need to run ``celeryd`` +as a separate process. + +Build an :ref:`init script <init-script>` around the following +command. + + CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd + +Modify your existing MediaGoblin and application init scripts, if +necessary, to prevent them from starting their own ``celeryd`` +processes. + +.. _init-script: + +Use an Init Script +------------------ + +Look in your system's ``/etc/init.d/`` or ``/etc/rc.d/`` directory for +examples of how to build scripts that will start, stop, and restart +MediaGoblin and Celery. These scripts will vary by +distribution/operating system. In the future, MediaGoblin will provide +example scripts as examples. + +.. TODO insert init script here +.. TODO are additional concernts ? + .. Other Concerns + .. -------------- diff --git a/mediagoblin.ini b/mediagoblin.ini index 728ab2f2..dbde6e51 100644 --- a/mediagoblin.ini +++ b/mediagoblin.ini @@ -11,6 +11,9 @@ email_debug_mode = true # Set to false to disable registrations allow_registration = true +## Uncomment this to turn on video or enable other media types +# media_types = mediagoblin.media_types.image, mediagoblin.media_types.video + ## Uncomment this to put some user-overriding templates here #local_templates = %(here)s/user_dev/templates/ diff --git a/mediagoblin/app.py b/mediagoblin/app.py index ce4b0bec..04eb2acc 100644 --- a/mediagoblin/app.py +++ b/mediagoblin/app.py @@ -20,7 +20,7 @@ import urllib import routes from webob import Request, exc -from mediagoblin import routing, middleware +from mediagoblin import routing, meddleware from mediagoblin.tools import common, translate, template from mediagoblin.tools.response import render_404 from mediagoblin.tools import request as mg_request @@ -63,7 +63,7 @@ class MediaGoblinApp(object): # Get the template environment self.template_loader = get_jinja_loader( - app_config.get('user_template_path')) + app_config.get('local_templates')) # Set up storage systems self.public_store, self.queue_store = setup_storage() @@ -100,19 +100,13 @@ class MediaGoblinApp(object): # matters in always eager mode :) setup_workbench() - # instantiate application middleware - self.middleware = [common.import_component(m)(self) - for m in middleware.ENABLED_MIDDLEWARE] + # instantiate application meddleware + self.meddleware = [common.import_component(m)(self) + for m in meddleware.ENABLED_MEDDLEWARE] def __call__(self, environ, start_response): request = Request(environ) - # pass the request through our middleware classes - for m in self.middleware: - response = m.process_request(request) - if response is not None: - return response(environ, start_response) - ## Routing / controller loading stuff path_info = request.path_info route_match = self.routing.match(path_info) @@ -164,13 +158,20 @@ class MediaGoblinApp(object): return render_404(request)(environ, start_response) controller = common.import_component(route_match['controller']) + + # pass the request through our meddleware classes + for m in self.meddleware: + response = m.process_request(request, controller) + if response is not None: + return response(environ, start_response) + request.start_response = start_response # get the response from the controller response = controller(request) - # pass the response through the middleware - for m in self.middleware[::-1]: + # pass the response through the meddleware + for m in self.meddleware[::-1]: m.process_response(request, response) return response(environ, start_response) diff --git a/mediagoblin/auth/views.py b/mediagoblin/auth/views.py index 8412b81c..d01861d1 100644 --- a/mediagoblin/auth/views.py +++ b/mediagoblin/auth/views.py @@ -74,7 +74,7 @@ def register(request): extra_validation_passes = False if users_with_email: register_form.email.errors.append( - _(u'Sorry, that email address has already been taken.')) + _(u'Sorry, a user with that email address already exists.')) extra_validation_passes = False if extra_validation_passes: @@ -195,9 +195,26 @@ def resend_activation(request): Resend the activation email. """ + + if request.user is None: + messages.add_message( + request, + messages.ERROR, + _('You must be logged in so we know who to send the email to!')) + + return redirect(request, 'mediagoblin.auth.login') + + if request.user["email_verified"]: + messages.add_message( + request, + messages.ERROR, + _("You've already verified your email address!")) + + return redirect(request, "mediagoblin.user_pages.user_home", user=request.user['username']) + request.user[u'verification_key'] = unicode(uuid.uuid4()) request.user.save() - + email_debug_message(request) send_verification_email(request.user, request) diff --git a/mediagoblin/config_spec.ini b/mediagoblin/config_spec.ini index eef6f6e0..13ce925e 100644 --- a/mediagoblin/config_spec.ini +++ b/mediagoblin/config_spec.ini @@ -2,16 +2,17 @@ # HTML title of the pages html_title = string(default="GNU MediaGoblin") +# Enabled media types +media_types = string_list(default=list("mediagoblin.media_types.image")) + # database stuff db_host = string() db_name = string(default="mediagoblin") db_port = integer() - # Where temporary files used in processing and etc are kept workbench_path = string(default="%(here)s/user_dev/media/workbench") - # Where mediagoblin-builtin static assets are kept direct_remote_path = string(default="/mgoblin_static/") @@ -27,7 +28,6 @@ email_smtp_pass = string(default=None) allow_registration = boolean(default=True) # tag parsing -tags_delimiter = string(default=",") tags_max_length = integer(default=50) # Whether comments are ascending or descending @@ -50,6 +50,7 @@ allow_attachments = boolean(default=False) # Cookie stuff csrf_cookie_name = string(default='mediagoblin_csrftoken') + [storage:publicstore] storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage") base_dir = string(default="%(here)s/user_dev/media/public") diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py index edaf5630..cfc01287 100644 --- a/mediagoblin/db/migrations.py +++ b/mediagoblin/db/migrations.py @@ -100,3 +100,11 @@ def user_add_forgot_password_token_and_expires(database): """ add_table_field(database, 'users', 'fp_verification_key', None) add_table_field(database, 'users', 'fp_token_expire', None) + + +@RegisterMigration(7) +def media_type_image_to_multimedia_type_image(database): + database['media_entries'].update( + {'media_type': 'image'}, + {'$set': {'media_type': 'mediagoblin.media_types.image'}}, + multi=True) diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index f13a4457..265fe36d 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -263,7 +263,7 @@ class MediaEntry(Document): Use a slug if we have one, else use our '_id'. """ - uploader = self.uploader() + uploader = self.get_uploader() if self.get('slug'): return urlgen( @@ -286,7 +286,7 @@ class MediaEntry(Document): '_id', ASCENDING).limit(1) if cursor.count(): return urlgen('mediagoblin.user_pages.media_home', - user=self.uploader()['username'], + user=self.get_uploader()['username'], media=unicode(cursor[0]['slug'])) def url_to_next(self, urlgen): @@ -300,10 +300,10 @@ class MediaEntry(Document): if cursor.count(): return urlgen('mediagoblin.user_pages.media_home', - user=self.uploader()['username'], + user=self.get_uploader()['username'], media=unicode(cursor[0]['slug'])) - def uploader(self): + def get_uploader(self): return self.db.User.find_one({'_id': self['uploader']}) def get_fail_exception(self): diff --git a/mediagoblin/decorators.py b/mediagoblin/decorators.py index 9cac1cfa..56dddb44 100644 --- a/mediagoblin/decorators.py +++ b/mediagoblin/decorators.py @@ -58,7 +58,7 @@ def user_may_delete_media(controller): """ def wrapper(request, *args, **kwargs): uploader = request.db.MediaEntry.find_one( - {'slug': request.matchdict['media'] }).uploader() + {'slug': request.matchdict['media']}).get_uploader() if not (request.user['is_admin'] or request.user._id == uploader._id): return exc.HTTPForbidden() diff --git a/mediagoblin/edit/forms.py b/mediagoblin/edit/forms.py index 7e71722c..dd339e08 100644 --- a/mediagoblin/edit/forms.py +++ b/mediagoblin/edit/forms.py @@ -26,7 +26,9 @@ class EditForm(wtforms.Form): description = wtforms.TextAreaField('Description of this work') tags = wtforms.TextField( _('Tags'), - [tag_length_validator]) + [tag_length_validator], + description=_( + "Seperate tags by commas.")) slug = wtforms.TextField( _('Slug'), [wtforms.validators.Required(message=_("The slug can't be empty"))], @@ -43,6 +45,19 @@ class EditProfileForm(wtforms.Form): _('Website'), [wtforms.validators.Optional(), wtforms.validators.URL(message='Improperly formed URL')]) + old_password = wtforms.PasswordField( + _('Old password'), + [wtforms.validators.Optional()]) + new_password = wtforms.PasswordField( + _('New Password'), + [wtforms.validators.Optional(), + wtforms.validators.Length(min=6, max=30), + wtforms.validators.EqualTo( + 'confirm_password', + 'Passwords must match.')]) + confirm_password = wtforms.PasswordField( + 'Confirm password', + [wtforms.validators.Optional()]) class EditAttachmentsForm(wtforms.Form): diff --git a/mediagoblin/edit/views.py b/mediagoblin/edit/views.py index 5f781552..673409bd 100644 --- a/mediagoblin/edit/views.py +++ b/mediagoblin/edit/views.py @@ -26,6 +26,7 @@ from werkzeug.utils import secure_filename from mediagoblin import messages from mediagoblin import mg_globals +from mediagoblin.auth import lib as auth_lib from mediagoblin.edit import forms from mediagoblin.edit.lib import may_edit_media from mediagoblin.decorators import require_active_login, get_user_media_entry @@ -161,19 +162,37 @@ def edit_profile(request): bio=user.get('bio')) if request.method == 'POST' and form.validate(): - user['url'] = unicode(request.POST['url']) - user['bio'] = unicode(request.POST['bio']) + password_matches = auth_lib.bcrypt_check_password( + request.POST['old_password'], + user['pw_hash']) - user['bio_html'] = cleaned_markdown_conversion(user['bio']) + if (request.POST['old_password'] or request.POST['new_password']) and not \ + password_matches: + form.old_password.errors.append(_('Wrong password')) - user.save() + return render_to_response( + request, + 'mediagoblin/edit/edit_profile.html', + {'user': user, + 'form': form}) - messages.add_message(request, - messages.SUCCESS, - _("Profile edited!")) - return redirect(request, - 'mediagoblin.user_pages.user_home', - user=edit_username) + user['url'] = unicode(request.POST['url']) + user['bio'] = unicode(request.POST['bio']) + + if password_matches: + user['pw_hash'] = auth_lib.bcrypt_gen_password_hash( + request.POST['new_password']) + + user['bio_html'] = cleaned_markdown_conversion(user['bio']) + + user.save() + + messages.add_message(request, + messages.SUCCESS, + _("Profile edited!")) + return redirect(request, + 'mediagoblin.user_pages.user_home', + user=user['username']) return render_to_response( request, diff --git a/mediagoblin/gmg_commands/import_export.py b/mediagoblin/gmg_commands/import_export.py index 30112969..4ec17d47 100644 --- a/mediagoblin/gmg_commands/import_export.py +++ b/mediagoblin/gmg_commands/import_export.py @@ -211,10 +211,12 @@ def _export_media(db, args): _log.info(u'Exporting {0} - {1}'.format( entry['title'], name)) - - mc_file = media_cache.get_file(path, mode='wb') - mc_file.write( - mg_globals.public_store.get_file(path, mode='rb').read()) + try: + mc_file = media_cache.get_file(path, mode='wb') + mc_file.write( + mg_globals.public_store.get_file(path, mode='rb').read()) + except e: + _log.error('Failed: {0}'.format(e)) _log.info('...Media exported') diff --git a/mediagoblin/gmg_commands/migrate.py b/mediagoblin/gmg_commands/migrate.py index beea109d..bd3bcb20 100644 --- a/mediagoblin/gmg_commands/migrate.py +++ b/mediagoblin/gmg_commands/migrate.py @@ -18,7 +18,7 @@ import sys from mediagoblin.db import util as db_util from mediagoblin.db.open import setup_connection_and_db_from_config -from mediagoblin.init.config import read_mediagoblin_config +from mediagoblin.init import setup_global_and_app_config # This MUST be imported so as to set up the appropriate migrations! from mediagoblin.db import migrations @@ -41,9 +41,9 @@ def _print_finished_migration(migration_number, migration_func): def migrate(args): - config, validation_result = read_mediagoblin_config(args.conf_file) + global_config, app_config = setup_global_and_app_config(args.conf_file) connection, db = setup_connection_and_db_from_config( - config['mediagoblin'], use_pymongo=True) + app_config, use_pymongo=True) migration_manager = db_util.MigrationManager(db) # Clear old indexes diff --git a/mediagoblin/gmg_commands/users.py b/mediagoblin/gmg_commands/users.py index 4c4b0c1b..b437e839 100644 --- a/mediagoblin/gmg_commands/users.py +++ b/mediagoblin/gmg_commands/users.py @@ -18,23 +18,26 @@ from mediagoblin.gmg_commands import util as commands_util from mediagoblin.auth import lib as auth_lib from mediagoblin import mg_globals - def adduser_parser_setup(subparser): subparser.add_argument( - 'username', + '--username','-u', help="Username used to login") subparser.add_argument( - 'password', - help="Your supersecret word to login") + '--password','-p', + help="Your supersecret word to login, beware of storing it in bash history") subparser.add_argument( - 'email', - help="Email to recieve notifications") + '--email','-e', + help="Email to receive notifications") def adduser(args): #TODO: Lets trust admins this do not validate Emails :) commands_util.setup_app(args) + args.username = commands_util.prompt_if_not_set(args.username, "Username:") + args.password = commands_util.prompt_if_not_set(args.password, "Password:",True) + args.email = commands_util.prompt_if_not_set(args.email, "Email:") + db = mg_globals.database users_with_username = \ db.User.find({ diff --git a/mediagoblin/gmg_commands/util.py b/mediagoblin/gmg_commands/util.py index 168a0760..3e26c53f 100644 --- a/mediagoblin/gmg_commands/util.py +++ b/mediagoblin/gmg_commands/util.py @@ -16,6 +16,7 @@ from mediagoblin import app +import getpass def setup_app(args): @@ -25,3 +26,15 @@ def setup_app(args): mgoblin_app = app.MediaGoblinApp(args.conf_file) return mgoblin_app + +def prompt_if_not_set(variable, text, password=False): + """ + Checks if the variable is None and prompt for a value if it is + """ + if variable is None: + if not password: + variable=raw_input(text + u' ') + else: + variable=getpass.getpass(text + u' ') + + return variable diff --git a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo Binary files differindex 4e4e8863..02dfa29a 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 548e971f..61abc63f 100644 --- a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -21,6 +21,10 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "" + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "اسم المستخدم" @@ -54,8 +58,8 @@ msgid "Sorry, a user with that name already exists." msgstr "عذرًا، لقد اختار مستخدم آخر هذا الاسم." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "عÙوًا، هذا العنوان البريدي مستخدم." +msgid "Sorry, a user with that email address already exists." +msgstr "" #: mediagoblin/auth/views.py:179 msgid "" @@ -69,11 +73,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "Ù…ÙØªØ§Ø التØÙ‚Ù‚ أو معر٠المستخدم خاطئ" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "أعدنا إرسال رسالة التØÙ‚Ù‚." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -89,43 +101,63 @@ msgstr "العنوان" msgid "Tags" msgstr "الوسوم" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "المسار" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "لا يمكن ترك المسار ÙØ§Ø±ØºÙ‹Ø§" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" "الجزء الذي يمثل عنوان المل٠ÙÙŠ المسار. لا ØØ§Ø¬Ø© إلى تغيير Ù…ØØªÙˆÙ‰ هذه الخانة " "عادةً." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "السيرة" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "الموقع الإلكتروني" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "يوجد مل٠آخر بهذا المسار لدى هذى المستخدم." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "أنت ØªØØ±Ù‘ر وسائط مستخدم آخر. كن ØØ°Ø±Ù‹Ø§ أثناء العملية." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "أنت ØªØØ±Ù‘ر مل٠مستخدم آخر. كن ØØ°Ø±Ù‹Ø§ أثناء العملية." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" msgstr "" #: mediagoblin/submit/forms.py:25 @@ -136,18 +168,18 @@ msgstr "الملÙ" msgid "Description of this work" msgstr "وص٠هذا العمل." -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "يجب أن تضع ملÙًا." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "لا يبدو أن هذا المل٠صورة!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "يا سلام! Ù†ÙØ´Ø±ÙŽØª!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "ويØÙŠ!" @@ -167,29 +199,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "صورة قزم مرتبك" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "غنو ميدياغوبلن" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "شعار ميدياغوبلن" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "أرسل وسائط" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "أكّد بريدك" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Ù„ÙØ¬" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -200,61 +232,34 @@ msgid "Explore" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Ù…Ø±ØØ¨Ù‹Ø§ بكم يا Ù…ØØ¨ÙŠ Ø§Ù„ÙˆØ³Ø§Ø¦Ø·! ميدياغوبلن هو..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "المكان الأنسب لوسائطك!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "مكان يجتمع Ùيه الناس ليتعاونوا ويعرضوا إبداعاتهم الأصلية والمقتبسة!" - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" -msgstr "مشروع ØØ±ØŒ ÙÙ†ØÙ† Ø£ØØ¯ مشاريع <a href=\"http://gnu.org\">غنو</a>." - -#: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "مشروع ÙŠØØ§ÙˆÙ„ جعل عالمنا Ø£ÙØ¶Ù„ عن طريق اللامركزية (قريبًا!)." +msgid "Hi there, welcome to this MediaGoblin site!" +msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:33 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"جاهز للتمدد. (Ø³ÙŠÙØ¶Ø§Ù دعم أنساق كثيرة من الوسائط قريبًا، كما سندعم الÙيديو!)." -#: mediagoblin/templates/mediagoblin/root.html:34 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">أنشئ ØØ³Ø§Ø¨Ù‹Ø§ مجانيًا</a>\n" -" أو\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">ركّب ميدياغوبلن على خادومك الخاص</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "Ø£ØØ¯Ø« الوسائط" @@ -262,9 +267,18 @@ msgstr "Ø£ØØ¯Ø« الوسائط" msgid "Enter your new password" msgstr "أدخل كلمة سرك الجديدة" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "أدخل اسم المستخدم أو بريدك الإلكتروني" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "أرسل" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -300,22 +314,18 @@ msgstr "" msgid "Logging in failed!" msgstr "ÙØ´Ù„ الولوج!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "ألا تملك ØØ³Ø§Ø¨Ù‹Ø§ بعد؟" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "أنشئ ØØ³Ø§Ø¨Ù‹Ø§ هنا!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "أنسيت كلمة سرك؟" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "غيّرها!" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "أنشئ ØØ³Ø§Ø¨Ù‹Ø§!" @@ -361,27 +371,54 @@ msgstr "اØÙظ التغييرات" msgid "Editing %(username)s's profile" msgstr "ØªØØ±ÙŠØ± مل٠%(username)s الشخصي" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "الوسائط الموسومة بâ€" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "انشر وسائطك" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "أرسل" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "وسائط <a href=\"%(user_url)s\">%(username)s</a>" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "عذرًا، تعذر العثور على مستخدم بهذا الاسم." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -413,35 +450,45 @@ msgstr "لا توجد وسائط ØªØØª المعالجة" msgid "These uploads failed to process:" msgstr "ÙØ´Ù„ت معالجة هذه Ø§Ù„Ù…Ù„ÙØ§Øª:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "مل٠%(username)s الشخصي" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "عذرًا، تعذر العثور على مستخدم بهذا الاسم." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "يجب التØÙ‚Ù‚ من البريد الإلكتروني" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "أوشكنا على الانتهاء! ما زال ØØ³Ø§Ø¨Ùƒ Ø¨ØØ§Ø¬Ø© إلى Ø§Ù„ØªÙØ¹ÙŠÙ„." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "ستصلك رسالة إلكترونية خلال Ù„ØØ¸Ø§Øª بها التعليمات." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "إن لم تصل." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "أعد إرسال رسالة التØÙ‚Ù‚" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "سجّل Ø£ØØ¯Ù‡Ù… ØØ³Ø§Ø¨Ù‹Ø§ بهذا الاسم، ولكننا بانتظار Ø§Ù„ØªÙØ¹ÙŠÙ„ ØØªÙ‰ الآن." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -450,40 +497,35 @@ msgstr "" "إن كنت أنت ذلك الشخص لكنك Ùقدت رسالة التØÙ‚Ù‚ØŒ يمكنك <a " "href=\"%(login_url)s\">الولوج</a> وإعادة إرسالها." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "مل٠%(username)s الشخصي" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "هذه زاوية لتخبر الآخرين Ùيها عن Ù†ÙØ³Ùƒ." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "ØØ±Ù‘ÙØ± المل٠الشخصي" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "لم يعبئ هذا العضو بيانات ملÙÙ‡ بعد." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Ø£Ø¸Ù‡ÙØ± كل وسائط %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "هنا ستظهر وسائطك، ولكن يبدو أنك لم تض٠شيئًا بعد." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "أض٠وسائط" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "لا يبدو أنه توجد أي وسائط هنا ØØªÙ‰ الآن..." @@ -503,6 +545,18 @@ msgstr "Ø§Ù„Ø£ØØ¯Ø«" msgid "Older" msgstr "الأقدم" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "علّÙÙ‚" @@ -511,15 +565,23 @@ msgstr "علّÙÙ‚" msgid "I am sure I want to delete this" msgstr "أنا متأكد من رغبتي Ø¨ØØ°Ù هذا العمل" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "أنت على وشك ØØ°Ù وسائط مستخدم آخر. كن ØØ°Ø±Ù‹Ø§ أثناء العملية." diff --git a/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.mo Binary files differindex 9b9e7e3b..34179a53 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 e2cd8342..9609cb34 100644 --- a/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/ca/LC_MESSAGES/mediagoblin.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PROJECT project. # # Translators: +# Al fred <devaleitzer@aim.com>, 2011. # <devaleitzer@aim.com>, 2011. msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +20,10 @@ msgstr "" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Aquest tipus de fitxer no és và lid." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Nom d'usuari" @@ -52,8 +57,8 @@ msgid "Sorry, a user with that name already exists." msgstr "Lamentablement aquest usuari ja existeix." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Disculpeu, aquesta adreça electrònica ja s'està utilitzant." +msgid "Sorry, a user with that email address already exists." +msgstr "" #: mediagoblin/auth/views.py:179 msgid "" @@ -68,11 +73,19 @@ msgid "The verification key or user id is incorrect" msgstr "" "La clau de verificació o la identificació de l'usuari no són correctes." -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "Torna'm a enviar el correu de verificació" -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -86,42 +99,62 @@ msgstr "TÃtol" msgid "Tags" msgstr "Etiquetes" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Biografia" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Lloc web" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "Esteu editant fitxers d'un altre usuari. Aneu amb compte." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Esteu editant el perfil d'un usuari. Aneu amb compte" -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Aquest tipus de fitxer no és và lid." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -131,18 +164,18 @@ msgstr "Fitxer" msgid "Description of this work" msgstr "" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Heu d'escollir un fitxer." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "El fitxer no és una imatge" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Visca! S'ha enviat!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Ups!" @@ -161,31 +194,31 @@ msgstr "" #: mediagoblin/templates/mediagoblin/404.html:32 msgid "Image of 404 goblin stressing out" -msgstr "" - -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" +msgstr "Imatge de la pantalla 404, el goblin no sap què fer..." -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "Logo de mediagoblin" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Envia fitxers" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "verifiqueu el correu electrònic" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Entra" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -196,66 +229,34 @@ msgid "Explore" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Ei, fanà tic multimèdia! MediaGoblin és..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "El lloc fitxer pels teus fitxers!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"Un lloc en el qual les persones poden col·laborar i mostrar les seves " -"creacions originals o obres derivades." - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" -"Amb l'objectiu de fer del món un lloc millor a través de la " -"descentralització i (eventualment, aviat disponible!) La federació!" - -#: mediagoblin/templates/mediagoblin/root.html:33 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Construït per l'ampliació. (Múltiples tipus de fitxers en breu amb el " -"programari, incloent el suport de vÃdeo!)" -#: mediagoblin/templates/mediagoblin/root.html:34 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Desenvolupat per persones com vostè. ( <a " -"href=\"http://mediagoblin.org/pages/join.html\"> Podeu ajudar a millorar " -"aquest programari!</a> )" -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "" @@ -263,8 +264,17 @@ msgstr "" msgid "Enter your new password" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Envia" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 @@ -294,22 +304,18 @@ msgstr "" msgid "Logging in failed!" msgstr "Inici de sessió ha fallat!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Encara no teniu un compte?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Creeu-ne un aquÃ!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Creeu un compte!" @@ -355,27 +361,54 @@ msgstr "Desa els canvis" msgid "Editing %(username)s's profile" msgstr "" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Etiquetat amb:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Envieu els vostres fitxers" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Envia" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "<a href=\"%(user_url)s\">%(username)s</a>'s media" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Lamentablement no s'ha trobat l'usuari que cercà veu." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -397,7 +430,7 @@ msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28 msgid "Media in-processing" -msgstr "" +msgstr "S'està processant el fitxer" #: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46 msgid "No media in-processing" @@ -405,37 +438,49 @@ msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50 msgid "These uploads failed to process:" +msgstr "No s'han pogut penjar els següents fitxers:" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Lamentablement no s'ha trobat l'usuari que cercà veu." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" -msgstr "" +msgstr "Cal que verifiqueu l'adreça electrònica" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." -msgstr "" +msgstr "Gairebé esteu! Tan sols falta que activeu el vostre compte" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "Us hauria d'arribar un correu amb les instruccions per a fer-ho." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" -msgstr "" +msgstr "Per si no hi fos:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Torna'm a enviar el correu de verificació" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "" +"Algú ja ha registrat un compte amb aquest nom d'usuari, però encara l'ha " +"d'activar." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -444,46 +489,41 @@ msgstr "" "Si siu aqeust usuari però heu perdut el correu de verificació, podeu <a " "href=\"%(login_url)s\">entrar</a> i tornar-lo a enviar." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Edita el perfil" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." -msgstr "" +msgstr "Aquest usuari encara no ha escrit res al seu perfil." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "View all of %(username)s's media" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" -msgstr "" +msgstr "Tots els fitxers" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "" #: mediagoblin/templates/mediagoblin/utils/feed_link.html:21 msgid "feed icon" -msgstr "" +msgstr "Icona RSS" #: mediagoblin/templates/mediagoblin/utils/feed_link.html:23 msgid "Atom feed" @@ -497,6 +537,18 @@ msgstr "" msgid "Older" msgstr "" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Comentari" @@ -505,15 +557,23 @@ msgstr "Comentari" msgid "I am sure I want to delete this" msgstr "" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" diff --git a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo Binary files differindex 056e3eca..f7562eaa 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 5c4ef0d0..7d7e0ee9 100644 --- a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po @@ -6,6 +6,7 @@ # <benjamin@lebsanft.org>, 2011. # <cwebber@dustycloud.org>, 2011. # Elrond <elrond+mediagoblin.org@samba-tng.org>, 2011. +# <jakob.kramer@gmx.de>, 2011. # Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011. # <kyoo@kyoo.ch>, 2011. # <mediagoblin.org@samba-tng.org>, 2011. @@ -15,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 15:18+0000\n" -"Last-Translator: piratenpanda <benjamin@lebsanft.org>\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:26+0000\n" +"Last-Translator: elrond <elrond+mediagoblin.org@samba-tng.org>\n" "Language-Team: German (http://www.transifex.net/projects/p/mediagoblin/team/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,6 +27,10 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Die Datei stimmt nicht mit dem gewählten Medientyp überein." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Benutzername" @@ -48,43 +53,52 @@ msgstr "Hier nochmal eintragen, um Tippfehler zu verhindern." #: mediagoblin/auth/forms.py:42 msgid "Email address" -msgstr "Email-Adresse" +msgstr "E-Mail-Adresse" #: mediagoblin/auth/views.py:55 msgid "Sorry, registration is disabled on this instance." -msgstr "Registrierung ist auf dieser Instanz leider deaktiviert." +msgstr "Das Registrieren ist auf dieser Instanz leider deaktiviert." #: mediagoblin/auth/views.py:73 msgid "Sorry, a user with that name already exists." msgstr "Leider gibt es bereits einen Benutzer mit diesem Namen." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Tut und Leid, aber diese Email-Adresse wird bereits verwendet." +msgid "Sorry, a user with that email address already exists." +msgstr "Leider gibt es bereits einen Benutzer mit dieser E-Mail-Adresse." #: mediagoblin/auth/views.py:179 msgid "" "Your email address has been verified. You may now login, edit your profile, " "and submit images!" msgstr "" -"Deine Email-Adresse wurde bestätigt. Du kannst dich nun anmelden, Dein " +"Deine E-Mail-Adresse wurde bestätigt. Du kannst dich nun anmelden, Dein " "Profil bearbeiten und Bilder hochladen!" #: mediagoblin/auth/views.py:185 msgid "The verification key or user id is incorrect" -msgstr "Der Bestätigungssschlüssel oder die Nutzernummer ist falsch." +msgstr "Der Bestätigungsschlüssel oder die Nutzernummer ist falsch." + +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "Deine E-Mail-Adresse wurde bereits bestätigt." -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." -msgstr "Bestätigungs-Email wurde erneut versandt." +msgstr "Bestätigungs-E-Mail wurde erneut versandt." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." msgstr "" -"Konnte Email zur Wiederherstellung des Passworts nicht senden, weil dein " -"Benutzername inaktiv oder deine Email-Adresse noch nicht verifiziert ist." +"E-Mail zur Wiederherstellung des Passworts konnte nicht gesendet werden, " +"weil dein Benutzername inaktiv oder deine E-Mail-Adresse noch nicht " +"verifiziert ist." #: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27 msgid "Title" @@ -94,44 +108,64 @@ msgstr "Titel" msgid "Tags" msgstr "Markierungen" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "Kurztitel" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "Bitte gib einen Kurztitel ein" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" "Der Titelteil der Medienadresse. Normalerweise muss hier nichts geändert " "werden." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Biographie" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Webseite" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "Altes Passwort" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "Neues Passwort" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "Diesen Kurztitel hast du bereits vergeben." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "Du bearbeitest die Medien eines Anderen. Bitte sei vorsichtig." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Du bearbeitest das Profil eines Anderen. Bitte sei vorsichtig." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Die Datei stimmt nicht mit dem gewählten Medientyp überein." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "Falsches Passwort" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "Das Profil wurde aktualisiert" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -141,18 +175,18 @@ msgstr "Datei" msgid "Description of this work" msgstr "Beschreibung des Werkes" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Du musst eine Datei angeben." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "Diese Datei scheint kein Bild zu sein!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Yeeeaaah! Geschafft!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Hoppla!" @@ -173,29 +207,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Bild eines angespannten Goblins" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "MediaGoblin-Logo" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Medien hochladen" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "Bitte bestätige deine Email-Adresse!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "Bitte bestätige deine E-Mail-Adresse!" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "Abmelden" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Anmelden" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -208,71 +242,34 @@ msgid "Explore" msgstr "Entdecke" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Hallo Medien-Liebhaber! MediaGoblin ist …" - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "Der perfekte Platz für deine Medien!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -"Ein Platz für Zusammenarbeit und um Originale und abgeleitete Werke zu " -"präsentieren!" -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" -msgstr "" -"Frei, wie in Freiheit. (Wir sind schließlich ein <a " -"href=\"http://gnu.org\">GNU</a>-Projekt.)" - -#: mediagoblin/templates/mediagoblin/root.html:32 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Weltverbesserer durch Dezentralisierung und (hoffentlich bald!) unabhängige " -"Kommunikation!" -#: mediagoblin/templates/mediagoblin/root.html:33 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Gebaut für Erweiterungen. (Bald mit Unterstützung für verschiedene " -"Medientypen inklusive Videos!)" -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" msgstr "" -"Betrieben von Leuten wie dir. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">Du kannst uns dabei helfen, " -"die Software zu verbessern!</a>)" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Neugierig dich uns anzuschließen?" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Gratis ein Konto einrichten</a>\n" -" or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">MediaGoblin auf deinem eigenen Server einrichten</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "Neuste Medien" @@ -280,9 +277,18 @@ msgstr "Neuste Medien" msgid "Enter your new password" msgstr "Neues Passwort eingeben" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Benutzername oder Email-Adresse eingeben" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Bestätigen" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -292,8 +298,8 @@ msgstr "Dein Passwort wurde geändert. Versuche dich jetzt einzuloggen." msgid "" "Check your inbox. We sent an email with a URL for changing your password." msgstr "" -"Prüfe deinen Posteingang. Wir haben dir eine Email mit einem Link geschickt," -" mit dem du dein Passwort ändern kannst." +"Überprüfe deinen Posteingang. Wir haben dir eine E-Mail mit einem Link " +"geschickt, mit dem du dein Passwort ändern kannst." #: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19 #, python-format @@ -314,28 +320,24 @@ msgstr "" "\n" "%(verification_url)s\n" "\n" -"Wenn du denkst, dass das ein Fehler ist, ignoriere einfach diese Email und bleib ein glücklicher Goblin!" +"Wenn du denkst, dass das ein Fehler ist, ignoriere einfach diese E-Mail und bleib ein glücklicher Goblin!" #: mediagoblin/templates/mediagoblin/auth/login.html:30 msgid "Logging in failed!" msgstr "Anmeldevorgang fehlgeschlagen!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Hast du noch kein Konto?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Registriere dich hier!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Passwort vergessen?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "Wechsle es!" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Neues Konto registrieren!" @@ -356,7 +358,7 @@ msgid "" msgstr "" "Hallo %(username)s,\n" "\n" -"um dein Konto bei GNU MediaGoblin zu aktivieren, musst du folgende Adresse in einem Webbrowser öffnen:\n" +"um dein Konto bei GNU MediaGoblin zu aktivieren, musst du folgende Adresse in deinem Webbrowser öffnen:\n" "\n" "%(verification_url)s" @@ -380,27 +382,54 @@ msgstr "Änderungen speichern" msgid "Editing %(username)s's profile" msgstr "%(username)ss Profil bearbeiten" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Medien markiert mit:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr ": %(tag_name)s" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Medien hochladen" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Bestätigen" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "%(username)ss Medien" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "<a href=\"%(user_url)s\">%(username)s</a>s Medien" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Dieser Benutzer wurde leider nicht gefunden." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "Bearbeiten" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "Löschen" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -434,31 +463,41 @@ msgstr "Keine Medien in Bearbeitung" msgid "These uploads failed to process:" msgstr "Die folgenden Uploads sind fehlgeschlagen:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "%(username)ss Profil" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Dieser Benutzer konnte leider nicht gefunden werden." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" -msgstr "Email-Bestätigung benötigt" +msgstr "E-Mail-Bestätigung benötigt" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Fast fertig! Dein Konto muss noch freigeschaltet werden." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" -"Gleich solltest du eine Email bekommen, die dir sagt, was du noch machen " -"musst." +"Gleich solltest du eine E-Mail erhalten, die dir erklärt, was du noch machen" +" musst." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "Wenn sie nicht ankommt:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Bestätigung erneut senden" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -466,7 +505,7 @@ msgstr "" "Jemand hat bereits ein Konto mit diesem Benutzernamen registriert, aber es " "muss noch aktiviert werden." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -476,40 +515,35 @@ msgstr "" " kannst du dich <a href=\"%(login_url)s\">anmelden</a> und sie erneut " "senden." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "%(username)ss Profil" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Hier kannst du Anderen etwas über dich erzählen." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Profil bearbeiten" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Dieser Benutzer hat (noch) keine Daten in seinem Profil." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Alle Medien von %(username)s anschauen" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "Hier erscheinen deine Medien. Sobald du etwas hochgeladen hast." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Medien hinzufügen" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Scheinbar gibt es hier noch nichts …" @@ -529,6 +563,18 @@ msgstr "Neuere" msgid "Older" msgstr "Ältere" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "Markiert mit" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "und" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Kommentar" @@ -537,15 +583,23 @@ msgstr "Kommentar" msgid "I am sure I want to delete this" msgstr "Ja, wirklich löschen" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." -msgstr "Leere Kommentare sind nicht erlaubt." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" -msgstr "Kommentar hinzugefügt!" +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." +msgstr "" + +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." +msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "Du versuchst Medien eines anderen Nutzers zu löschen. Sei vorsichtig." diff --git a/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po index 5e1401f6..17e6873c 100644 --- a/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,6 +17,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "" + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "" @@ -50,7 +54,7 @@ msgid "Sorry, a user with that name already exists." msgstr "" #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." +msgid "Sorry, a user with that email address already exists." msgstr "" #: mediagoblin/auth/views.py:179 @@ -63,11 +67,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "" -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or " "your account's email address has not been verified." @@ -81,40 +93,60 @@ msgstr "" msgid "Tags" msgstr "" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "The title part of this media's URL. You usually don't need to change this." msgstr "" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "" -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "" -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" msgstr "" #: mediagoblin/submit/forms.py:25 @@ -125,16 +157,16 @@ msgstr "" msgid "Description of this work" msgstr "" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "" -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" +#: mediagoblin/submit/views.py:127 +msgid "Woohoo! Submitted!" msgstr "" -#: mediagoblin/submit/views.py:121 -msgid "Woohoo! Submitted!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." msgstr "" #: mediagoblin/templates/mediagoblin/404.html:21 @@ -155,29 +187,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -188,60 +220,37 @@ msgid "Explore" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" +#: mediagoblin/templates/mediagoblin/root.html:28 +msgid "" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, " +"an extraordinarily great piece of media hosting software." msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:30 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" +"To add your own media, place comments, save your favourites and more, you" +" can log in with your MediaGoblin account." msgstr "" #: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project," -" after all.)" +msgid "Don't have one yet? It's easy!" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the " -"software, including video support!)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve " -"this software!</a>)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:39 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a " -"free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an " +"account at this site</a>\n" " or\n" -" <a class=\"header_submit\" " +" <a class=\"button_action\" " "href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on " "your own server</a>" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "" @@ -249,8 +258,17 @@ msgstr "" msgid "Enter your new password" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 @@ -279,22 +297,18 @@ msgstr "" msgid "Logging in failed!" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "" @@ -334,26 +348,53 @@ msgstr "" msgid "Editing %(username)s's profile" msgstr "" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 @@ -385,74 +426,79 @@ msgstr "" msgid "These uploads failed to process:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "An email should arrive in a few moments with instructions on how to do so." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to" " be activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can " "<a href=\"%(login_url)s\">log in</a> and resend it." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "" @@ -472,6 +518,18 @@ msgstr "" msgid "Older" msgstr "" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "" @@ -480,15 +538,23 @@ msgstr "" msgid "I am sure I want to delete this" msgstr "" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" diff --git a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo Binary files differindex c537c65e..8f37922f 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 f6bb1cce..e5c6356e 100644 --- a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" -"Last-Translator: cwebber <cwebber@dustycloud.org>\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 19:15+0000\n" +"Last-Translator: aleksejrs <deletesoftware@yandex.ru>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,6 +21,10 @@ msgstr "" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "La provizita dosiero ne konformas al la informtipo." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Uzantnomo" @@ -54,8 +58,8 @@ msgid "Sorry, a user with that name already exists." msgstr "BedaÅrinde, uzanto kun tiu nomo jam ekzistas." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Tiu retpoÅtadreso jam estas uzata." +msgid "Sorry, a user with that email address already exists." +msgstr "Ni bedaÅras, sed konto kun tiu retpoÅtadreso jam ekzistas." #: mediagoblin/auth/views.py:179 msgid "" @@ -69,11 +73,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "La kontrol-kodo aÅ la uzantonomo ne estas korekta" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "Vi devas esti ensalutita, por ke ni sciu, al kiu sendi la retleteron!" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "Vi jam konfirmis vian retpoÅtadreson!" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "Resendi vian kontrol-mesaÄon." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -89,44 +101,64 @@ msgstr "Titolo" msgid "Tags" msgstr "Etikedoj" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "Dividu la etikedojn per komoj." + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "La distingiga adresparto" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "La distingiga adresparto ne povas esti malplena" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" "La parto de la dosieradreso, bazita sur la dosiertitolo. Ordinare ne necesas" " Äin ÅanÄi." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Bio" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Retejo" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "La malnova pasvorto" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "La nova pasvorto" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "Ĉi tiu uzanto jam havas dosieron kun tiu distingiga adresparto." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "Vi priredaktas dosieron de alia uzanto. Agu singardeme." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Vi redaktas profilon de alia uzanto. Agu singardeme." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "La provizita dosiero ne konformas al la informtipo." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "MalÄusta pasvorto" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "La profilÅanÄo faritas!" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "Åœajnas, ke en «{filename}» mankas dosiernoma finaĵo" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -136,18 +168,18 @@ msgstr "Dosiero" msgid "Description of this work" msgstr "Priskribo de ĉi tiu verko" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Vi devas provizi dosieron." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "La dosiero Åajnas ne esti bildo!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Hura! AlÅutitas!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "NetaÅga dosiertipo." + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Oj!" @@ -168,29 +200,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Bildo de 404-koboldo penÅvitanta." -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "Emblemo de MediaGoblin" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "AlÅuti aÅd-vid-dosieron" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "konfirmu vian retpoÅtadreson! " +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "Konfirmu viecon de la retpoÅtadreso!" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "elsaluti" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Ensaluti" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -200,72 +232,45 @@ msgstr "" #: mediagoblin/templates/mediagoblin/root.html:24 msgid "Explore" -msgstr "" +msgstr "ĈirkaÅrigardi" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Saluton, artemulo! MediaGoblin estas…" - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "La perfekta loko por viaj aÅd-vid-dosieroj!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"Loko, kie homoj povas kunlabori, kaj elmeti originalajn kreaĵojn kaj " -"derivaĵojn!" - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" -msgstr "" -"Libera verko. (Ni ja estas projekto de <a href=\"http://gnu.org\">GNU</a>.)" - -#: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" -"Celanta plibonigi la mondon per sencentreco kaj (iam, baldaÅ!) federateco!" +msgid "Hi there, welcome to this MediaGoblin site!" +msgstr "Saluton, kaj bonvenon al ĉi tiu MediaGoblina retpaÄaro!" -#: mediagoblin/templates/mediagoblin/root.html:33 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Kreita por etendado. (BaldaÅ en la programo aperos subteno de pluraj " -"informspecoj, inkluzive de filmoj!)" +"Ĉi tiu retpaÄaro funkcias per <a " +"href=\"http://mediagoblin.org\">MediaGoblin</a>, eksterordinare bonega " +"programaro por gastigado de aÅdâ€vidâ€dosieroj." -#: mediagoblin/templates/mediagoblin/root.html:34 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Vivanta per homoj kiel vi. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">Vi povas helpi al ni " -"plibonigi la programon!</a>)" +"Por aldoni viajn proprajn dosierojn, fari liston de plej plaĉantaj por vi, " +"ks, vi povas ensaluti je via MediaGoblina konto." -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Ĉu vi deziregas aliÄi nin?" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" +msgstr "Ĉu vi ankoraÅ ne havas tian? Ne malÄoju!" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Kreu senpagan" -" konton</a>⎠aÅ⎠<a class=\"header_submit\" " -"href=\"http://wiki.mediagoblin.org/HackingHowto\">Kreu senpagan konton</a>" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Kreu konton en ĉi tiu retejo</a>\n" +" aÅ\n" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Ekfunkciigu MediaGoblin’on en via propra servilo</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "Plej nove aldonitaj dosieroj" @@ -273,9 +278,18 @@ msgstr "Plej nove aldonitaj dosieroj" msgid "Enter your new password" msgstr "Enigu vian novan pasvorton" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Enigu vian salutnomon aÅ retpoÅtadreson" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "AlÅuti" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "Ekhavo de nova pasvorto" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "Sendi instrukcion" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -313,22 +327,18 @@ msgstr "" msgid "Logging in failed!" msgstr "Ensaluto malsukcesis!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Ĉu ankoraÅ sen konto?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Kreu Äin ĉi tie!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Ĉu vi forgesis vian pasvorton?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "ÅœanÄu Äin!" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Kreu konton!" @@ -373,27 +383,54 @@ msgstr "Konservi ÅanÄojn" msgid "Editing %(username)s's profile" msgstr "Redaktado de l’profilo de %(username)s'" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Dosieroj markitaj per:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "Dosieroj kun etikedo: %(tag_name)s" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "Originalo" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "AlÅutu vian aÅd-vid-dosieron" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "AlÅuti" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "Dosieroj de %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "Dosieroj de <a href=\"%(user_url)s\">%(username)s</a>" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Uzanto ne trovita." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "AfiÅita de <a href=\"%(user_url)s\">%(username)s</a> je %(date)s" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "AfiÅi komenton" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "je" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "AfiÅi la komenton!" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "ÅœanÄi" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "Forigi" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -427,30 +464,40 @@ msgstr "Neniu dosieroj preparatas" msgid "These uploads failed to process:" msgstr "Preparado de ĉi tiuj alÅutaĵoj malsukcesis:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "Profilo de %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Uzanto ne trovita." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "Necesas konfirmo de retpoÅtadreso" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "PreskaÅ finite! Restas nur validigi vian konton." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" "Post kelkaj momentoj devas veni retletero kun instrukcio pri kiel tion fari." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "Se tio ne okazas:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Resendi kontrolmesaÄon" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -458,7 +505,7 @@ msgstr "" "Iu registris konton kun tiu ĉi uzantonomo, sed Äi devas ankoraÅ esti " "aktivigita." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -467,41 +514,36 @@ msgstr "" "Se vi estas tiu sed vi perdis vian kontrolmesaÄon, vi povas <a " "href=\"%(login_url)s\">ensaluti</a> kaj resendi Äin." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "Profilo de %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Jen estas spaceto por rakonti pri vi al aliaj." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Redakti profilon" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Ĉi tiu uzanto ne jam aldonis informojn pri si." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Rigardi ĉiujn dosierojn de %(username)s'" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" "Äœuste ĉi tie aperos viaj dosieroj, sed vi Åajne ankoraÅ nenion alÅutis." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Aldoni dosieron" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Ĉi tie Åajne estas ankoraÅ neniuj dosieroj…" @@ -521,6 +563,18 @@ msgstr "Plinovaj" msgid "Older" msgstr "Malplinovaj" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "Iri al paÄo:" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "Markita per: " + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "kaj" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Komento" @@ -529,15 +583,25 @@ msgstr "Komento" msgid "I am sure I want to delete this" msgstr "Mi estas certa, ke mi volas forigi ĉi tion" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." -msgstr "" +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "Oj, via komento estis malplena." + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "Via komento estis afiÅita!" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." +msgstr "Vi forigis la dosieron." -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" +"La dosiero ne estis forigita, ĉar vi ne konfirmis vian certecon per la " +"markilo." -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "Vi estas forigonta dosieron de alia uzanto. Estu singardema." diff --git a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo Binary files differindex 2d2b9243..bed6aab8 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 a3c9939b..460c074c 100644 --- a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po @@ -10,13 +10,14 @@ # <juangsub@gmail.com>, 2011. # <juanma@kde.org.ar>, 2011. # Mario Rodriguez <msrodriguez00@gmail.com>, 2011. +# <mu@member.fsf.org>, 2011. msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" -"Last-Translator: cwebber <cwebber@dustycloud.org>\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:49+0000\n" +"Last-Translator: manolinux <mu@member.fsf.org>\n" "Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mediagoblin/team/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,6 +26,10 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Archivo inválido para el formato seleccionado." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Nombre de usuario" @@ -59,8 +64,8 @@ msgid "Sorry, a user with that name already exists." msgstr "Lo sentimos, ya existe un usuario con ese nombre." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Lo sentimos, esa dirección de correo electrónico ya ha sido tomada." +msgid "Sorry, a user with that email address already exists." +msgstr "Lo sentimos, ya existe un usuario con esa dirección de email." #: mediagoblin/auth/views.py:179 msgid "" @@ -75,11 +80,21 @@ msgid "The verification key or user id is incorrect" msgstr "" "La clave de verificación o la identificación de usuario son incorrectas" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" +"Debes iniciar sesión para que podamos saber a quién le enviamos el correo " +"electrónico!" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "Ya haz verificado tu dirección de email!" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "Se reenvió tu correo electrónico de verificación." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -96,44 +111,64 @@ msgstr "TÃtulo" msgid "Tags" msgstr "Etiquetas" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "Separar etiquetas por comas." + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "Ficha" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "La ficha no puede estar vacÃa" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" "La parte del tÃtulo de la URL de este contenido. Normalmente no necesitas " "cambiar esto." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Bio" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Sitio web" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "Vieja contraseña" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "Nueva contraseña" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "Una entrada con esa ficha ya existe para este usuario." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "Estás editando el contenido de otro usuario. Proceder con precaución." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Estás editando un perfil de usuario. Proceder con precaución." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Archivo inválido para el formato seleccionado." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "Contraseña incorrecta" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "Perfil editado!" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "No se pudo encontrar la extensión del archivo en \"{filename}\"" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -143,18 +178,18 @@ msgstr "Archivo" msgid "Description of this work" msgstr "Descripción de esta obra" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Debes proporcionar un archivo." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "¡El archivo no parece ser una imagen!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "¡Woohoo! ¡Enviado!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "Tipo de archivo inválido." + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Ups!" @@ -175,29 +210,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Imagen de 404 goblin estresándose" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "Logo de MediaGoblin" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Enviar contenido" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "¡Verifica tu correo electrónico!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "Verifica tu email!" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "Cerrar sesión" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Conectarse" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -210,71 +245,42 @@ msgid "Explore" msgstr "Explorar" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "¡Hola, amante de los contenidos! MediaGoblin es ..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "¡El lugar ideal para tus contenidos!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"¡Un lugar para colaborar y exhibir tus creaciones originales y derivadas!" - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" -msgstr "" -"Libre, como en la libertad. (Somos parte del proyecto <a " -"href=\"http://gnu.org\">GNU</a> después de todo.)" +msgid "Hi there, welcome to this MediaGoblin site!" +msgstr "Hola, bienvenido a este sitio de MediaGoblin!" -#: mediagoblin/templates/mediagoblin/root.html:32 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Queriendo hacer del mundo un mejor lugar a través de la descentralización y " -"(eventualmente, muy pronto!) la federalización!" +"Este sitio está montado con <a " +"href=\"http://mediagoblin.org\">MediaGoblin</a>, un programa libre buenÃsimo" +" para gestionar contenido multimedia." -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "" -"Pensado para ser extensible. (Prontamente soporte para multiples formatos, " -"incluyendo video!)" - -#: mediagoblin/templates/mediagoblin/root.html:34 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Impulsado por gente como vos. (<a " -"href=\"http://mediagoblin.org/pages/join.html\"> Vos podés ayudarnos a " -"mejorar este programa</a>)" +"Para añadir tus propios contenidos, dejar comentarios, guardar tus favoritos" +" y más, puedes iniciar sesión con tu cuenta de MediaGoblin." -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Te gustarÃa unirte a nosotros?" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" +msgstr "Aún no tienes una? Es fácil!" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Crea una " -"cuenta gratuita</a> o <a class=\"header_submit\" " -"href=\"http://wiki.mediagoblin.org/HackingHowto\">Establece MediaGoblin en " -"tu propio servidor</a>" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Crea una cuenta en este sitio</a>\n" +" o\n" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Instala MediaGoblin en tu propio servidor</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "El contenido más reciente" @@ -282,9 +288,18 @@ msgstr "El contenido más reciente" msgid "Enter your new password" msgstr "Ingrese su nueva contraseña" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Introduzca su nombre de usuario o correo electrónico" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Enviar" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "Recuperar contraseña" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "Enviar instrucciones" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -319,22 +334,18 @@ msgstr "" msgid "Logging in failed!" msgstr "¡Falló el inicio de sesión!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "¿No tienes una cuenta?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "¡Crea una aquÃ!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "¿Olvidaste tu contraseña?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "Cambiarlo!" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "¡Crea una cuenta!" @@ -379,27 +390,54 @@ msgstr "Guardar cambios" msgid "Editing %(username)s's profile" msgstr "Editando el perfil de %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Contenido etiquetado con:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "Contenido etiquetado con: %(tag_name)s" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "Original" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "EnvÃa tu contenido" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Enviar" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "Contenidos de %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "Contenido de <a href=\"%(user_url)s\">%(username)s</a>'s" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Lo sentimos, no se encontró ese usuario." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "Por <a href=\"%(user_url)s\">%(username)s</a> en %(date)s" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "Pon un comentario." + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "en" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "¡Pon un comentario!" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "Editar" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "Borrar" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -433,31 +471,41 @@ msgstr "No hay contenido siendo procesado." msgid "These uploads failed to process:" msgstr "Estos archivos no pudieron ser procesados:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "Perfil de %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Lo sentimos, no se encontró ese usuario." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "Es necesario un correo electrónico de verificación" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Casi terminas! Solo falta activar la cuenta." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" "En unos momentos te deberÃa llegar un correo electrónico con las " "instrucciones para hacerlo." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "En caso de que no:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Reenviar correo electrónico de verificación" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -465,7 +513,7 @@ msgstr "" "Alguien ya registró una cuenta con ese nombre de usuario, pero todavÃa no " "fue activada." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -474,41 +522,36 @@ msgstr "" "Si tú eres esa persona, pero has perdido tu correo electrónico de " "verificación, puedes <a href=\"%(login_url)s\">acceder</a> y reenviarlo." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "Perfil de %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Aquà hay un lugar para que le cuentes a los demás sobre tÃ." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Editar perfil" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Este usuario (todavia) no ha completado su perfil." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Ver todo el contenido de %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" "Aquà es donde tú contenido estará, pero parece que aún no has agregado nada." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Añadir contenido" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Parece que aún no hay ningún contenido aquÃ..." @@ -528,6 +571,18 @@ msgstr "Recientes" msgid "Older" msgstr "Antiguas" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "Ir a la página:" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "Etiquetado con" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "y" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Comentario" @@ -536,15 +591,23 @@ msgstr "Comentario" msgid "I am sure I want to delete this" msgstr "Estoy seguro de que quiero borrar esto" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." -msgstr "" +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "Ups, tu comentario estaba vacÃo." -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" -msgstr "" +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "¡Tu comentario ha sido publicado!" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." +msgstr "Eliminaste el contenido" + +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." +msgstr "El contenido no se eliminó porque no marcaste que estabas seguro." -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" "Estás a punto de eliminar un contenido de otro usuario. Proceder con " diff --git a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo Binary files differindex 90e83303..ed1ea35d 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 0a6a5a40..8d1e2711 100644 --- a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-04 10:05+0000\n" -"Last-Translator: chesuidayeur <chesuidayeur@yahoo.fr>\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" +"Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,6 +24,10 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Le fichier envoyé ne correspond pas au type de média." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Nom d'utilisateur" @@ -59,8 +63,8 @@ msgid "Sorry, a user with that name already exists." msgstr "Un utilisateur existe déjà avec ce nom, désolé." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Désolé, cette adresse courriel a déjà été prise." +msgid "Sorry, a user with that email address already exists." +msgstr "Désolé, il existe déjà un utilisateur ayant cette adresse e-mail." #: mediagoblin/auth/views.py:179 msgid "" @@ -74,11 +78,20 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "La clé de vérification ou le nom d'utilisateur est incorrect." -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" +"Vous devez être authentifié afin que nous sachions à qui envoyer l'e-mail !" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "Votre adresse e-mail a déjà été vérifiée !" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "E-mail de vérification renvoyé." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -94,48 +107,68 @@ msgstr "Titre" msgid "Tags" msgstr "Tags" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "Légende" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "La légende ne peut pas être laissée vide." -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" "Le nom de ce media dans l'URL. Vous n'avez normalement pas besoin de le " "changer" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Bio" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Site web" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "Ancien mot de passe." + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "Nouveau mot de passe" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "Une entrée existe déjà pour cet utilisateur avec la même légende." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "" "Vous vous apprêtez à modifier le média d'un autre utilisateur. Veuillez " "prendre garde." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "" "Vous vous apprêtez à modifier le profil d'un utilisateur. Veuillez prendre " "garde." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Le fichier envoyé ne correspond pas au type de média." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "Mauvais mot de passe" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "Profile mis à jour !" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "Impossible d'extraire une extension de fichier de \"{nomfichier}\"" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -145,21 +178,21 @@ msgstr "Fichier" msgid "Description of this work" msgstr "Descriptif pour ce travail" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Il vous faut fournir un fichier." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "Ce fichier ne semble pas être une image !" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Youhou, c'est envoyé !" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "Type de fichier invalide." + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" -msgstr "Zut!" +msgstr "Zut !" #: mediagoblin/templates/mediagoblin/404.html:24 msgid "There doesn't seem to be a page at this address. Sorry!" @@ -177,29 +210,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Image de 404 gobelin angoissé" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "Logo MediaGoblin" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Soumettre un média" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "vérifiez votre adresse e-mail !" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "Vérifiez votre adresse e-mail !" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "déconnexion" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "S'identifier" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -212,71 +245,39 @@ msgid "Explore" msgstr "Explorer" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Salut à tous, amateur de médias! MediaGoblin est ..." +msgid "Hi there, welcome to this MediaGoblin site!" +msgstr "Bonjour, et bienvenu sur ce site MediaGoblin !" -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "L'endroit idéal pour vos médias!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"Un espace de création collaboratif : montrez vos Å“uvres, originales ou " -"dérivées !" - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" -msgstr "" -"Logiciel libre. (Nous sommes un projet <a href=\"http://gnu.org\">GNU</a> " -"après tout.)" - -#: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" -"Une tentative de rendre le monde meilleur grâce à la décentralisation et (à " -"terme, et pour bientôt !) la fédération !" - -#: mediagoblin/templates/mediagoblin/root.html:33 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Construit pour l'extensibilité. (Plusieurs types de médias à venir au " -"logiciel, y compris le support vidéo!)" -#: mediagoblin/templates/mediagoblin/root.html:34 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Propulsé par des gens comme vous. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">Vous pouvez nous aider à " -"améliorer ce logiciel!</a>)" +"Ajoutez vos propres medias, commentez ceux des autres, sauvegardez vos " +"préférés et plus encore ! Faites tout cela depuis votre compte MediaGoblin." -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Envi de vous joindre à nous ?" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" +msgstr "Vous n'en avez pas ? C'est facile !" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Créez gratuitement en compte</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Créez un compte sur ce site</a>\n" " ou\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Installez MediaGoblin sur votre propre serveur</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Déployez MediaGoblin sur votre propre serveur</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "Tout derniers media" @@ -284,9 +285,18 @@ msgstr "Tout derniers media" msgid "Enter your new password" msgstr "Entrez un nouveau mot de passe" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Entrez votre nom d'utilisateur ou votre email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Soumettre" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "Récupérer le mot de passe" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "Envoyer les instructions" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -327,25 +337,21 @@ msgstr "" msgid "Logging in failed!" msgstr "La connexion a échoué!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" -msgstr "Pas encore de compte?" +msgstr "Pas encore de compte ?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" -msgstr "Créez-en un ici!" +msgstr "Créez-en un ici !" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Vous avez oublié votre mot de passe ?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "Changez-le !" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" -msgstr "Créer un compte!" +msgstr "Créer un compte !" #: mediagoblin/templates/mediagoblin/auth/register.html:31 msgid "Create" @@ -387,27 +393,54 @@ msgstr "Enregistrer les modifications" msgid "Editing %(username)s's profile" msgstr "Modification du profil de %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Média comportant les tags suivants :" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "Médias taggés avec : %(tag_name)s " + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "Original" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Soumettez ce média" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Soumettre" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "Medias de %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "Médias de <a href=\"%(user_url)s\">%(username)s</a>" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Impossible de trouver cet utilisateur, désolé." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -441,31 +474,41 @@ msgstr "Aucun média en transformation" msgid "These uploads failed to process:" msgstr "Le traitement de ces ajouts a échoué :" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "profil de %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Impossible de trouver cet utilisateur, désolé." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "Vérification d'email nécessaire" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Presque fini ! Votre compte a encore besoin d'être activé." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" "Un e-mail devrait vous parvenir dans quelques instants ; il vous indiquera " "comment procéder." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "Si la vérification n'est pas arrivée à bon port :" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Renvoyer l'e-mail de vérification" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -473,7 +516,7 @@ msgstr "" "Quelqu'un a enregistré un compte avec ce nom, mais il doit encore être " "activé." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -483,30 +526,25 @@ msgstr "" "vérification, vous pouvez vous <a href=\"%(login_url)s\">identifier</a> et " "le renvoyer." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "profil de %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Voici un endroit pour parler aux autres de vous-même." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Modifier le profil" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Cet utilisateur n'a pas (encore) rempli son profil." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Voir tous les médias de %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." @@ -514,11 +552,11 @@ msgstr "" "C'est là où vos médias apparaîssent, mais vous ne semblez pas avoir encore " "ajouté quoi que ce soit." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Ajouter des médias" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Il ne semble pas y avoir de média là , pour l'instant ..." @@ -538,6 +576,18 @@ msgstr "Nouveaux" msgid "Older" msgstr "Anciens" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "Taggé avec" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "et" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Commentaire" @@ -546,15 +596,25 @@ msgstr "Commentaire" msgid "I am sure I want to delete this" msgstr "Je suis sûr de vouloir supprimer cela" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." -msgstr "Les commentaires vides ne sont pas autorisés." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" -msgstr "Votre commentaire a été posté !" +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." +msgstr "Vous avez supprimé le media." + +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." +msgstr "" +"Ce media n'a pas été supprimé car vous n'avez pas confirmer que vous étiez " +"sur." -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" "Vous êtes sur le point de supprimer des médias d'un autre utilisateur. " diff --git a/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.mo Binary files differindex feb156ff..c0a1ecb6 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 d9fdf8d6..512635e3 100644 --- a/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/ia/LC_MESSAGES/mediagoblin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +19,10 @@ msgstr "" "Language: ia\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "" + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Nomine de usator" @@ -52,7 +56,7 @@ msgid "Sorry, a user with that name already exists." msgstr "" #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." +msgid "Sorry, a user with that email address already exists." msgstr "" #: mediagoblin/auth/views.py:179 @@ -65,11 +69,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "" -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -83,41 +95,61 @@ msgstr "Titulo" msgid "Tags" msgstr "" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Sito web" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "" -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "" -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" msgstr "" #: mediagoblin/submit/forms.py:25 @@ -128,16 +160,16 @@ msgstr "" msgid "Description of this work" msgstr "" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "" -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" +#: mediagoblin/submit/views.py:127 +msgid "Woohoo! Submitted!" msgstr "" -#: mediagoblin/submit/views.py:121 -msgid "Woohoo! Submitted!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." msgstr "" #: mediagoblin/templates/mediagoblin/404.html:21 @@ -158,29 +190,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Initiar session" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -191,57 +223,34 @@ msgid "Explore" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" +#: mediagoblin/templates/mediagoblin/root.html:28 +msgid "" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:30 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" #: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Don't have one yet? It's easy!" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:39 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "" @@ -249,8 +258,17 @@ msgstr "" msgid "Enter your new password" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 @@ -280,22 +298,18 @@ msgstr "" msgid "Logging in failed!" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Crear un conto!" @@ -335,26 +349,53 @@ msgstr "" msgid "Editing %(username)s's profile" msgstr "" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 @@ -387,75 +428,80 @@ msgstr "" msgid "These uploads failed to process:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "Profilo de %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " "href=\"%(login_url)s\">log in</a> and resend it." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "Profilo de %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "" @@ -475,6 +521,18 @@ msgstr "" msgid "Older" msgstr "" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Commento" @@ -483,15 +541,23 @@ msgstr "Commento" msgid "I am sure I want to delete this" msgstr "" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" diff --git a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo Binary files differindex cc0ccbfa..1319a605 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 183d09ed..96d1f0a2 100644 --- a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +19,10 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "documento non valido come tipo multimediale." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Nome utente" @@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists." msgstr "Spiacente, esiste già un utente con quel nome" #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Spiacente, quell'indirizzo email è già stato preso." +msgid "Sorry, a user with that email address already exists." +msgstr "" #: mediagoblin/auth/views.py:179 msgid "" @@ -67,11 +71,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "La chiave di verifica o l'id utente è sbagliato" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "Rispedisci email di verifica" -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -85,44 +97,64 @@ msgstr "Titolo" msgid "Tags" msgstr "Tags" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Bio" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Sito web" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "" "Stai modificando documenti multimediale di un altro utente. Procedi con " "attenzione." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Stai modificando il profilo di un utente. Procedi con attenzione." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "documento non valido come tipo multimediale." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -132,18 +164,18 @@ msgstr "Documento" msgid "Description of this work" msgstr "Descrizione di questo lavoro" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Devi specificare un documento." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "Il documento non sembra essere un'immagine!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Evviva! " +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Oops!" @@ -164,29 +196,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Immagine di 404 folletti che stressano" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "MediaGoblin logo" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Inoltra file multimediale" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "verifica il tuo indirizzo email!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Accedi" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -199,65 +231,34 @@ msgid "Explore" msgstr "Esplora" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Ciao, amante del multimedia! MediaGoblin è..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "Il posto perfetto per i tuoi documenti multimediali!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"Un posto per collaborare con altri e mostrare le proprie creazioni originali" -" e derivate!" - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -"Libero, come in libertà . (Siamo un progetto <a " -"href=\"http://gnu.org\">GNU</a>, dopotutto.)" -#: mediagoblin/templates/mediagoblin/root.html:32 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Con l'obbiettivo di rendere il mondo un posto migliore attraverso la " -"decentrelizzazione e (finalmente, presto!) federazione!" -#: mediagoblin/templates/mediagoblin/root.html:33 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Fatto per estensibilità . (Numerosi tipi multimediali saranno presto aggiunti" -" al programma, incluso il supporto video!)" -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Eccitato di unirti a noi?" - -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "Documenti multimediali più recenti" @@ -265,9 +266,18 @@ msgstr "Documenti multimediali più recenti" msgid "Enter your new password" msgstr "Inserisci la tua nuova password" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Inserisci il tuo nome utente o email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Conferma" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -296,22 +306,18 @@ msgstr "" msgid "Logging in failed!" msgstr "Accesso fallito!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Non hai ancora un account?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Creane uno qui!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Hai dimenticato la password?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Crea un account!" @@ -356,27 +362,54 @@ msgstr "Salva i cambiamenti" msgid "Editing %(username)s's profile" msgstr "Stai modificando il profilo di %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Media taggata con:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Inoltra documento multimediale" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Conferma" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "Documenti multimediali di <a href=\"%(user_url)s\">%(username)s</a>" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Mi dispiace, utente non trovato" +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -408,30 +441,40 @@ msgstr "Nessun documento multimediale in elaborazione" msgid "These uploads failed to process:" msgstr "L'elaborazione di questi upload è fallita:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "profilo di %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Mi dispiace, utente non trovato" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "è necessario verificare email" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Quasi finito! Il tuo account deve ancora essere attivato." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" "In breve dovresti ricevere un email contenente istruzioni su come fare." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "Nel caso non fosse:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Rispedisci email di verifica" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -439,7 +482,7 @@ msgstr "" "Qualcuno ha registrato un account con questo nome utente, ma deve ancora " "essere attivato." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -448,30 +491,25 @@ msgstr "" "Se sei quella persona ma hai perso l'email di verifica, puoi <a " "href=\"%(login_url)s\">accedere</a> e rispedirlo." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "profilo di %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Ecco un posto dove raccontare agli altri di te." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Modifica profilo" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Questo utente non ha (ancora) compilato il proprio profilo." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Visualizza tutti i file multimediali di %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." @@ -479,11 +517,11 @@ msgstr "" "Questo è dove i tuoi documenti multimediali appariranno, ma sembra che tu " "non abbia ancora aggiunto niente." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Aggiungi documenti multimediali" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Non sembra ci sia ancora nessun documento multimediali qui.." @@ -503,6 +541,18 @@ msgstr "Più nuovo" msgid "Older" msgstr "Più vecchio" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Commento" @@ -511,15 +561,23 @@ msgstr "Commento" msgid "I am sure I want to delete this" msgstr "Sono sicuro di volerlo cancellare" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" "Stai cancellando un documento multimediale di un altro utente. Procedi con " diff --git a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo Binary files differindex 5267eddc..39f3595b 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 59262d82..3198eed9 100644 --- a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +19,10 @@ msgstr "" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "" + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "ユーザãƒãƒ¼ãƒ " @@ -52,7 +56,7 @@ msgid "Sorry, a user with that name already exists." msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€ãã®åå‰ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã™ã§ã«å˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." +msgid "Sorry, a user with that email address already exists." msgstr "" #: mediagoblin/auth/views.py:179 @@ -65,11 +69,19 @@ msgstr "メアドãŒç¢ºèªã•れã¦ã„ã¾ã™ã€‚ã“れã§ã€ãƒã‚°ã‚¤ãƒ³ã—ã¦ãƒ— msgid "The verification key or user id is incorrect" msgstr "検証ã‚ーã¾ãŸã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼IDãŒé–“é•ã£ã¦ã„ã¾ã™" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "検証メールをå†é€ã—ã¾ã—ãŸã€‚" -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -83,41 +95,61 @@ msgstr "タイトル" msgid "Tags" msgstr "ã‚¿ã‚°" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "スラグ" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "スラグã¯å¿…è¦ã§ã™ã€‚" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "自己紹介" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "URL" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "ãã®ã‚¹ãƒ©ã‚°ã‚’æŒã¤ã‚¨ãƒ³ãƒˆãƒªã¯ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯æ—¢ã«å˜åœ¨ã—ã¾ã™ã€‚" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "ã‚ãªãŸã¯ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’編集ã—ã¦ã„ã¾ã™ã€‚ã”æ³¨æ„ãã ã•ã„。" -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "ã‚ãªãŸã¯ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ—ãƒãƒ•ァイルを編集ã—ã¦ã„ã¾ã™ã€‚ã”æ³¨æ„ãã ã•ã„。" -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" msgstr "" #: mediagoblin/submit/forms.py:25 @@ -128,18 +160,18 @@ msgstr "ファイル" msgid "Description of this work" msgstr "" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "ファイルをæä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "ファイルãŒç”»åƒã§ã¯ãªã„よã†ã§ã™ï¼" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "投稿終了ï¼" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "" @@ -158,29 +190,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "コンテンツを投稿" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "メアドを確èªã—ã¦ãã ã•ã„ï¼" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "ãƒã‚°ã‚¤ãƒ³" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -191,57 +223,34 @@ msgid "Explore" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" +#: mediagoblin/templates/mediagoblin/root.html:28 +msgid "" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:30 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" #: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Don't have one yet? It's easy!" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:39 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "" @@ -249,8 +258,17 @@ msgstr "" msgid "Enter your new password" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "é€ä¿¡" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 @@ -280,22 +298,18 @@ msgstr "" msgid "Logging in failed!" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "ã¾ã アカウントをæŒã£ã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "ã“ã“ã§ä½œæˆï¼" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "アカウントを作æˆï¼" @@ -340,27 +354,54 @@ msgstr "投稿ã™ã‚‹" msgid "Editing %(username)s's profile" msgstr "%(username)sã•ã‚“ã®ãƒ—ãƒãƒ•ィールを編集ä¸" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "タグ付ã‘ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "コンテンツを投稿" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "é€ä¿¡" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "<a href=\"%(user_url)s\">%(username)s</a>ã•ã‚“ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -392,75 +433,80 @@ msgstr "" msgid "These uploads failed to process:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "%(username)sã•ã‚“ã®ãƒ—ãƒãƒ•ィール" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "メールã¯ã€ãã®æ–¹æ³•ã®æŒ‡ç¤ºã§ã„ãã¤ã‹ã®çž¬é–“ã«åˆ°ç€ã—ã¾ã™ã€‚" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "到ç€ã—ãªã„å ´åˆã¯ã€" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "確èªãƒ¡ãƒ¼ãƒ«ã‚’å†é€ä¿¡" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " "href=\"%(login_url)s\">log in</a> and resend it." msgstr "ã‚ãªãŸã®ç¢ºèªãƒ¡ãƒ¼ãƒ«ã‚’紛失ã—ãŸå ´åˆã€<a href=\"%(login_url)s\">ãƒã‚°ã‚¤ãƒ³</a>ã—ã¦å†é€ã§ãã¾ã™ã€‚" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "%(username)sã•ã‚“ã®ãƒ—ãƒãƒ•ィール" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "プãƒãƒ•ィールを編集" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "%(username)sã•ã‚“ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ã™ã¹ã¦è¦‹ã‚‹" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "" @@ -480,6 +526,18 @@ msgstr "" msgid "Older" msgstr "" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "" @@ -488,15 +546,23 @@ msgstr "" msgid "I am sure I want to delete this" msgstr "" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" diff --git a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo Binary files differindex e6d1976b..842bfb9b 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 618daf6f..c1778676 100644 --- a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +19,10 @@ msgstr "" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "" + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Gebruikersnaam" @@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists." msgstr "Sorry, er bestaat al een gebruiker met die naam." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Sorry, dat e-mailadres is al ingenomen." +msgid "Sorry, a user with that email address already exists." +msgstr "" #: mediagoblin/auth/views.py:179 msgid "" @@ -67,11 +71,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "De verificatie sleutel of gebruikers-ID is onjuist" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "Verificatie e-mail opnieuw opgestuurd." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -85,44 +97,64 @@ msgstr "Titel" msgid "Tags" msgstr "Etiket" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Bio" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Website" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "" "U bent de media van een andere gebruiker aan het aanpassen. Ga voorzichtig " "te werk." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "" "U bent een gebruikersprofiel aan het aanpassen. Ga voorzichtig te werk." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" msgstr "" #: mediagoblin/submit/forms.py:25 @@ -133,18 +165,18 @@ msgstr "Bestand" msgid "Description of this work" msgstr "" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "U moet een bestand aangeven." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "Het lijkt erop dat dit bestand geen afbeelding is!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Mooizo! Toegevoegd!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "" @@ -163,29 +195,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Voeg media toe" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "Controleer uw e-mail!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Inloggen" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -196,57 +228,34 @@ msgid "Explore" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" +#: mediagoblin/templates/mediagoblin/root.html:28 +msgid "" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:30 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" #: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Don't have one yet? It's easy!" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:39 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "" @@ -254,8 +263,17 @@ msgstr "" msgid "Enter your new password" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Voeg toe" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 @@ -285,22 +303,18 @@ msgstr "" msgid "Logging in failed!" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Heeft u nog geen account?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Maak er hier een!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Maak een account aan!" @@ -342,27 +356,54 @@ msgstr "Wijzigingen opslaan" msgid "Editing %(username)s's profile" msgstr "Het profiel aanpassen van %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Media met het etiket:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Voeg media toe" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Voeg toe" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "Media van <a href=\"%(user_url)s\"> %(username)s </a>" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Sorry, die gebruiker kon niet worden gevonden." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -394,37 +435,47 @@ msgstr "" msgid "These uploads failed to process:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "Profiel van %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Sorry, die gebruiker kon niet worden gevonden." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" "Een e-mail zou in een paar ogenblikken aan moeten komen met instructies " "hiertoe." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "Zoniet:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Stuur de verificatie e-mail opnieuw op." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -433,40 +484,35 @@ msgstr "" "Als u die persoon bent, maar de verificatie e-mail verloren hebt, kunt u <a " "href=\"%(login_url)s\">inloggen</a> en hem nogmaals verzenden." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "Profiel van %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Profiel aanpassen." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Bekijk alle media van %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "" @@ -486,6 +532,18 @@ msgstr "" msgid "Older" msgstr "" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Commentaar" @@ -494,15 +552,23 @@ msgstr "Commentaar" msgid "I am sure I want to delete this" msgstr "" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" diff --git a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo Binary files differindex ba427c29..c07f42be 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 c74e1dd0..0b0c2a27 100644 --- a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +19,10 @@ msgstr "" "Language: nn_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Ugyldig fil for mediatypen." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Brukarnamn" @@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists." msgstr "Ein konto med dette brukarnamnet finst allereide." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Den epostadressa er allereide teken." +msgid "Sorry, a user with that email address already exists." +msgstr "" #: mediagoblin/auth/views.py:179 msgid "" @@ -67,11 +71,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "Stadfestingsnykelen eller brukar-ID-en din er feil." -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "Send ein ny stadfestingsepost." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -86,42 +98,62 @@ msgstr "Tittel" msgid "Tags" msgstr "Merkelappar" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "Nettnamn" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "Nettnamnet kan ikkje vera tomt" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "Nettnamnet (adressetittel) for mediefila di. Trengst ikkje endrast." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Presentasjon" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Heimeside" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "Eit innlegg med denne adressetittelen finst allereie." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "TrÃ¥ varsamt, du endrar nokon andre sine mediefiler." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "TrÃ¥ varsamt, du endrar nokon andre sin profil." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Ugyldig fil for mediatypen." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -131,18 +163,18 @@ msgstr "Fil" msgid "Description of this work" msgstr "Skildring av mediefila" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Du mÃ¥ velja ei fil." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "Fila verkar ikkje Ã¥ vera ei gyldig biletefil." - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Johoo! Opplasta!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Oops." @@ -163,29 +195,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Bilete av stressa 404-tusse." -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "MediaGoblin" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Last opp" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "Stadfest epostadressa di" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Logg inn" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -198,69 +230,34 @@ msgid "Explore" msgstr "Utforsk" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Hei der mediaentusiast, MediaGoblin..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "Er ein perfekt plass for mediet ditt!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -"Er ein plass for folk Ã¥ samarbeida og visa fram sjølvlaga og vidarebygde " -"verk." - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" -msgstr "Fri som i fridom (me er eit <a href=\"http://gnu.org\">GNU</a>-prosjekt)." -#: mediagoblin/templates/mediagoblin/root.html:32 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Arbeidar for Ã¥ gjera verda ein betre stad gjennom desentralisering og (til " -"slutt, kjem snart!) federering, enkelt forklart deling og sending av " -"mediefiler og kommentarar over fleire nettstader." - -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "Bygd for utviding (fleire medietypar kjem snart, m.a. video)." -#: mediagoblin/templates/mediagoblin/root.html:34 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Driven av folk som deg. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">Du kan hjelpa med Ã¥ forbetra" -" MediaGoblin</a>)" -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Lyst til Ã¥ bli med oss?" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" +msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Opprett ein " -"gratis konto</a> eller <a class=\"header_submit\" " -"href=\"http://wiki.mediagoblin.org/HackingHowto\">installer MediaGoblin pÃ¥ " -"eigen tenar</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "Nyaste mediefiler" @@ -268,9 +265,18 @@ msgstr "Nyaste mediefiler" msgid "Enter your new password" msgstr "Fyll inn passord" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Fyll inn brukarnamn eller epost" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Send" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -308,22 +314,18 @@ msgstr "" msgid "Logging in failed!" msgstr "Innlogging feila" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Har du ingen konto?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Lag ein!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Gløymd passordet?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "Endra" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Lag ein konto." @@ -368,27 +370,54 @@ msgstr "Lagra" msgid "Editing %(username)s's profile" msgstr "Endrar profilen til %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Merkelappar:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Last opp" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Send" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "<a href=\"%(user_url)s\">%(username)s</a> sine mediefiler" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Fann ingen slik brukar" +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -420,35 +449,45 @@ msgstr "Ingen media under handsaming" msgid "These uploads failed to process:" msgstr "Klarte ikkje handsama desse opplasta filene:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "%(username)s sin profil" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Fann ingen slik brukar" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "Epostverifisering trengst." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Nesten ferdig. Du treng berre aktivera kontoen." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "Ein epost med instruksjonar kjem straks." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "I tilfelle det ikkje skjer:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Send ein ny epost" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "Dette brukarnamnet finst allereie, men det er ikkje aktivert." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -457,40 +496,35 @@ msgstr "" "Viss dette er deg, kan du <a href=\"%(login_url)s\">logga inn</a> for Ã¥ fÃ¥ " "tilsendt ny epost med stadfestingslenkje." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "%(username)s sin profil" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Her kan du fortelja om deg sjølv." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Endra profil" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Brukaren har ikkje fylt ut profilen sin (enno)." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "SjÃ¥ alle %(username)s sine mediefiler" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." -msgstr "Her kjem mediefilene dine. Ser ikkje ut til at du har lagt til noko." +msgstr "Her kjem mediefilene dine." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Legg til mediefiler" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Ser ikkje ut til at det finst nokon mediefiler her nett no." @@ -510,6 +544,18 @@ msgstr "Nyare" msgid "Older" msgstr "Eldre" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Innspel" @@ -518,15 +564,23 @@ msgstr "Innspel" msgid "I am sure I want to delete this" msgstr "Eg er sikker eg vil sletta dette" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" "Du er i ferd med Ã¥ sletta ein annan brukar sine mediefiler. TrÃ¥ varsamt." diff --git a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo Binary files differindex 31cb860c..95d6d0ae 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 047e598b..daa65e0f 100644 --- a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/mediagoblin/team/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -20,6 +20,10 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Arquivo inválido para esse tipo de mÃdia" + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Nome de Usuário" @@ -54,8 +58,8 @@ msgid "Sorry, a user with that name already exists." msgstr "Desculpe, um usuário com este nome já existe." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Desculpe, esse endereço de email já está em uso." +msgid "Sorry, a user with that email address already exists." +msgstr "" #: mediagoblin/auth/views.py:179 msgid "" @@ -69,11 +73,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "A chave de verificação ou nome usuário estão incorretos." -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "O email de verificação foi reenviado." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -89,43 +101,63 @@ msgstr "TÃtulo" msgid "Tags" msgstr "Etiquetas" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "Arquivo" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "O arquivo não pode estar vazio" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" "A parte tÃtulo da URL dessa mÃdia. Geralmente não é necessário alterar isso." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Biografia" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Website" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "Uma entrada com esse arquivo já existe para esse usuário" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "Você está editando a mÃdia de outro usuário. Tenha cuidado." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Você está editando um perfil de usuário. Tenha cuidado." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Arquivo inválido para esse tipo de mÃdia" +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -135,18 +167,18 @@ msgstr "Arquivo" msgid "Description of this work" msgstr "Descrição desse trabalho" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Você deve fornecer um arquivo." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "O arquivo não parece ser uma imagem!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Eba! Enviado!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Oops" @@ -167,29 +199,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Imagem do goblin 404 aparecendo" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "Logo MediaGoblin" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Enviar mÃdia" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "Verifique seu email!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Entrar" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -202,71 +234,34 @@ msgid "Explore" msgstr "Explorar" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Olá amante de mÃdias. MediaGoblin é..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "O lugar perfeito para sua mÃdia!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"Um lugar para as pessoas colaborarem e mostrarem suas criações originais e " -"derivadas!" - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -"Livre como a liberdade. (Afinal, somos um projeto <a " -"href=\"http://gnu.org\">GNU</a>)" -#: mediagoblin/templates/mediagoblin/root.html:32 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Com o objetivo de fazer um mundo melhor através da descentralização e " -"(eventualmente, em breve) federação!" -#: mediagoblin/templates/mediagoblin/root.html:33 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"ConstruÃdo para extensibilidade. (Múltiplos tipos de mÃdia em breve, " -"incluindo suporte a vÃdeo) " -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" msgstr "" -"Desenvolvido por pessoas como você. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">Você pode ajudar a melhorar " -"esse software</a>)" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Animado para juntar-se a nós?" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\"> Crie uma conta grátis </a>\n" -" ou <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Configure seu próprio servidor MediaGoblin</a>\n" -" " -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "MÃdia mais recente" @@ -274,9 +269,18 @@ msgstr "MÃdia mais recente" msgid "Enter your new password" msgstr "Digite sua nova senha" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Digite seu nome de usuário ou email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Enviar" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -315,22 +319,18 @@ msgstr "" msgid "Logging in failed!" msgstr "Autenticação falhou" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Ainda não tem conta?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Crie uma aqui!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Esqueceu sua senha?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "Altere-a" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Criar uma conta!" @@ -375,27 +375,54 @@ msgstr "Salvar mudanças" msgid "Editing %(username)s's profile" msgstr "Editando perfil de %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "MÃdia marcada como:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Envie sua mÃdia" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Enviar" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "MÃdia de <a href=\"%(user_url)s\"> %(username)s </a> " -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Desculpe, esse usuário não foi encontrado." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -428,29 +455,39 @@ msgstr "Nenhuma mÃdia em processo" msgid "These uploads failed to process:" msgstr "Esses envios não foram processados:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "Perfil de %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Desculpe, esse usuário não foi encontrado." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "Verificação de email necessária" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Quase pronto! Sua conta ainda precisa ser ativada" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "Um email deve chegar em instantes com instruções de como fazê-lo." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "Caso contrário:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Reenviar email de verificação" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -458,7 +495,7 @@ msgstr "" "Alguém registrou uma conta com esse nome de usuário, mas ainda precisa ser " "ativada." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -467,30 +504,25 @@ msgstr "" "Se você é essa pessoa, mas você perdeu seu e-mail de verificação, você pode " "<a href=\"%(login_url)s\">efetuar login</a> e reenviá-la." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "Perfil de %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Aqui é o lugar onde você fala de si para os outros." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Editar perfil" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Esse usuário não preencheu seu perfil (ainda)." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Ver todas as mÃdias de %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." @@ -498,11 +530,11 @@ msgstr "" "Aqui é onde sua mÃdia vai aparecer, mas parece que você não adicionou nada " "ainda." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Adicionar mÃdia" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Aparentemente não há nenhuma mÃdia aqui ainda..." @@ -522,6 +554,18 @@ msgstr "Mais novo" msgid "Older" msgstr "Mais velho" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Comentário" @@ -530,15 +574,23 @@ msgstr "Comentário" msgid "I am sure I want to delete this" msgstr "Eu tenho certeza de que quero pagar isso" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "Você vai apagar uma mÃdia de outro usuário. Tenha cuidado." diff --git a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo Binary files differindex 2ab9cf8b..e0a70ea9 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 01fe5c48..b747fc3a 100644 --- a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po @@ -4,12 +4,13 @@ # # Translators: # <gapop@hotmail.com>, 2011. +# George Pop <gapop@hotmail.com>, 2011. msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 20:49+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 18:41+0000\n" "Last-Translator: gap <gapop@hotmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +20,10 @@ msgstr "" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Formatul fiÈ™ierului nu corespunde cu tipul de media selectat." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Nume de utilizator" @@ -52,32 +57,40 @@ msgid "Sorry, a user with that name already exists." msgstr "Ne pare rău, există deja un utilizator cu acelaÈ™i nume." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Ne pare rău, această adresă de e-mail este deja rezervată." +msgid "Sorry, a user with that email address already exists." +msgstr "Există deja un utilizator înregistrat cu această adresă de e-mail." #: mediagoblin/auth/views.py:179 msgid "" "Your email address has been verified. You may now login, edit your profile, " "and submit images!" msgstr "" -"Adresa ta de e-mail a fost confirmată. PoÈ›i să te autentifici, să îți " +"Adresa ta de e-mail a fost verificată. PoÈ›i să te autentifici, să îți " "completezi profilul È™i să trimiÈ›i imagini!" #: mediagoblin/auth/views.py:185 msgid "The verification key or user id is incorrect" msgstr "Cheie de verificare sau user ID incorect." -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "Trebuie să fii autentificat ca să È™tim cui să trimitem mesajul!" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "Adresa ta de e-mail a fost deja verificată!" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "E-mail-ul de verificare a fost retrimis." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." msgstr "" "E-mailul pentru recuperarea parolei nu a putut fi trimis deoarece contul tău" -" e inactiv sau adresa ta de e-mail nu a fost confirmată." +" e inactiv sau adresa ta de e-mail nu a fost verificată." #: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27 msgid "Title" @@ -85,47 +98,67 @@ msgstr "Titlu" #: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32 msgid "Tags" -msgstr "Etichete" +msgstr "Tag-uri" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "Desparte tag-urile prin virgulă." + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "Identificator" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "Identificatorul nu poate să lipsească" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" "Partea din adresa acestui fiÈ™ier corespunzătoare titlului. De regulă nu " "trebuie modificată." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Biografie" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Sit Web" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "Vechea parolă" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "Noua parolă" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "" "Există deja un entry cu acelaÈ™i identificator pentru acest utilizator." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "Editezi fiÈ™ierul unui alt utilizator. Se recomandă prudență." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Editezi profilul unui utilizator. Se recomandă prudență." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Formatul fiÈ™ierului nu corespunde cu tipul de media selectat." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "Parolă incorectă" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "Profilul a fost modificat!" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "Nu pot extrage extensia din „{filename}â€" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -135,25 +168,25 @@ msgstr "FiÈ™ier" msgid "Description of this work" msgstr "Descrierea acestui fiÈ™ier" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Trebuie să selectezi un fiÈ™ier." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "FiÈ™ierul nu pare a fi o imagine!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" -msgstr "Gata, trimis!" +msgstr "Ura! Trimis!" + +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "Tip de fiÈ™ier incompatibil." #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" -msgstr "Oops!" +msgstr "Hopa!" #: mediagoblin/templates/mediagoblin/404.html:24 msgid "There doesn't seem to be a page at this address. Sorry!" -msgstr "Ne pare rău, nu există nicio pagină la această adresă." +msgstr "Nu există nicio pagină la această adresă. Ne pare rău!" #: mediagoblin/templates/mediagoblin/404.html:26 msgid "" @@ -167,29 +200,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Imagine cu elful 404 stresat." -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "logo MediaGoblin" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Transmite un fiÈ™ier media" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "verifică e-mail-ul!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "Verifică adresa de e-mail!" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "ieÈ™ire" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Autentificare" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -202,70 +235,41 @@ msgid "Explore" msgstr "Explorează" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Bună! MediaGoblin este..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "Locul perfect pentru fiÈ™ierele tale media!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"Un loc unde oamenii colaborează È™i își expun creaÈ›iile originale È™i " -"derivate!" - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" -msgstr "" -"Liber. (Suntem un proiect <a href=\"http://gnu.org\">GNU</a>, până la urmă.)" +msgid "Hi there, welcome to this MediaGoblin site!" +msgstr "Salut, bine ai venit pe acest site MediaGoblin!" -#: mediagoblin/templates/mediagoblin/root.html:32 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Un pas spre o lume mai bună prin descentralizare È™i (în curând) " -"federalizare!" +"Acest site foloseÈ™te <a href=\"http://mediagoblin.org\">MediaGoblin</a>, un " +"software excepÈ›ional pentru găzduirea fiÈ™ierelor media." -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "" -"Proiectat să fie extensibil. (Software-ul va avea în curând suport pentru " -"mai multe formate de media, inclusiv pentru video!)" - -#: mediagoblin/templates/mediagoblin/root.html:34 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Animat de oameni ca tine. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">Ne poÈ›i ajuta să îmbunătățim" -" acest software!</a>)" +"Ca să adăugi propriile tale fiÈ™iere, să scrii comentarii, să salvezi " +"favoritele tale È™i multe altele, autentifică-te cu contul tău MediaGoblin." -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Vrei să ni te alături?" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" +msgstr "ÃŽncă nu ai unul? E simplu!" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Creează gratuit un cont</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Creează un cont pe acest site</a>\n" " sau\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">instalează MediaGoblin pe serverul tău</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Instalează MediaGoblin pe propriul tău server</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "Cele mai recente fiÈ™iere" @@ -273,9 +277,18 @@ msgstr "Cele mai recente fiÈ™iere" msgid "Enter your new password" msgstr "Introdu noua parolă" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Introdu numele de utilizator sau adresa de e-mail" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Trimite" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "Recuperează parola" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "Trimite instrucÈ›iuni" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -313,22 +326,18 @@ msgstr "" msgid "Logging in failed!" msgstr "Autentificare eÈ™uată!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Nu ai un cont?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Creează-l aici!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Ai uitat parola?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "Schimb-o!" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Creează un cont!" @@ -373,27 +382,54 @@ msgstr "Salvează modificările" msgid "Editing %(username)s's profile" msgstr "Editare profil %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Etichete:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "FiÈ™ier etichetat cu tag-urile: %(tag_name)s" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "Original" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Trimite fiÈ™ierele tale media" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Trimite" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "FiÈ™ierele lui %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "FiÈ™ierele media ale lui <a href=\"%(user_url)s\">%(username)s</a>" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Ne pare rău, nu am găsit utilizatorul căutat." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "De <a href=\"%(user_url)s\">%(username)s</a> la %(date)s" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "Scrie un comentariu" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "la" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "Trimite comentariul" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "Editare" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "Șterge" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -425,29 +461,39 @@ msgstr "Niciun fiÈ™ier în curs de procesare" msgid "These uploads failed to process:" msgstr "Aceste fiÈ™iere nu au putut fi procesate:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "Profil %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Ne pare rău, nu am găsit utilizatorul căutat." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" -msgstr "Este necesară confirmarea adresei de e-mail" +msgstr "Este necesară verificarea adresei de e-mail" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Aproape gata! Mai trebuie doar să activezi contul." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "Vei primi în scurt timp un e-mail cu instrucÈ›iuni." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "Dacă nu-l primeÈ™ti:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Retrimite mesajul de verificare" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -455,7 +501,7 @@ msgstr "" "Cineva a înregistrat un cont cu acest nume de utilizator, dar contul nu a " "fost încă activat." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -464,30 +510,25 @@ msgstr "" "Dacă tu eÈ™ti persoana respectivă È™i nu mai ai e-mail-ul de verificare, poÈ›i " "să te <a href=\"%(login_url)s\">autentifici</a> pentru a-l retrimite." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "Profil %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Aici poÈ›i spune altora ceva despre tine." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Editare profil" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Acest utilizator nu È™i-a completat (încă) profilul." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Vezi toate fiÈ™ierele media ale lui %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." @@ -495,11 +536,11 @@ msgstr "" "Aici vor apărea fiÈ™ierele tale media, dar se pare că încă nu ai trimis " "nimic." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Trimite fiÈ™ier" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Nu pare să existe niciun fiÈ™ier media deocamdată..." @@ -519,6 +560,18 @@ msgstr "Mai noi" msgid "Older" msgstr "Mai vechi" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "Salt la pagina:" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "Tag-uri" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "È™i" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Scrie un comentariu" @@ -527,15 +580,23 @@ msgstr "Scrie un comentariu" msgid "I am sure I want to delete this" msgstr "Sunt sigur că doresc să È™terg" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." -msgstr "Comentariul trebuie să aibă un conÈ›inut." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "Hopa, ai uitat să scrii comentariul." + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "Comentariul tău a fost trimis!" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." +msgstr "Ai È™ters acest fiÈ™ier" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" -msgstr "Comentariul a fost transmis." +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." +msgstr "FiÈ™ierul nu a fost È™ters deoarece nu ai confirmat că eÈ™ti sigur." -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" "Urmează să È™tergi fiÈ™ierele media ale unui alt utilizator. Se recomandă " diff --git a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo Binary files differindex 4b5481e0..0e34144d 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 f4bfbd67..c615cde2 100644 --- a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-04 11:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 17:53+0000\n" "Last-Translator: aleksejrs <deletesoftware@yandex.ru>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +19,10 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Ðеправильный формат файла." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Логин" @@ -52,8 +56,10 @@ msgid "Sorry, a user with that name already exists." msgstr "Извините, пользователь Ñ Ñтим именем уже зарегиÑтрирован." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Извините, Ñтот Ð°Ð´Ñ€ÐµÑ Ñлектронной почты уже занÑÑ‚." +msgid "Sorry, a user with that email address already exists." +msgstr "" +"Сожалеем, но на Ñтот Ð°Ð´Ñ€ÐµÑ Ñлектронной почты уже зарегиÑтрирована Ð´Ñ€ÑƒÐ³Ð°Ñ " +"ÑƒÑ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ." #: mediagoblin/auth/views.py:179 msgid "" @@ -67,11 +73,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "Ðеверный ключ проверки или идентификатор пользователÑ" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "Вам надо предÑтавитьÑÑ, чтобы мы знали, кому отправлÑть Ñообщение!" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "Ð’Ñ‹ уже потвердили Ñвой Ð°Ð´Ñ€ÐµÑ Ñлектронной почты!" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "ПереÑлать Ñообщение Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸ÐµÐ¼ аккаунта." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -88,45 +102,65 @@ msgstr "Ðазвание" msgid "Tags" msgstr "Метки" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "РазделÑйте метки запÑтыми." + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "ÐžÑ‚Ð»Ð¸Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñть адреÑа" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "ÐžÑ‚Ð»Ð¸Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñть адреÑа необходима" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" "ЧаÑть адреÑа Ñтого файла, Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð½Ð°Ñ Ð¾Ñ‚ его названиÑ. Её обычно не нужно " "изменÑть." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "БиографиÑ" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Сайт" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "Старый пароль" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "Ðовый пароль" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "" "У Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÐ¶Ðµ еÑть файл Ñ Ñ‚Ð°ÐºÐ¾Ð¹ отличительной чаÑтью адреÑа." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "Ð’Ñ‹ редактируете файлы другого пользователÑ. Будьте оÑторожны." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Ð’Ñ‹ редактируете профиль пользователÑ. Будьте оÑторожны." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Ðеправильный формат файла." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "Ðеправильный пароль" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "Профиль изменён!" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "Ð’ «{filename}» не обнаружено раÑширение имени файла" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -136,18 +170,18 @@ msgstr "Файл" msgid "Description of this work" msgstr "ОпиÑание Ñтого произведениÑ" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Ð’Ñ‹ должны загрузить файл." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "Файл, похоже, не ÑвлÑетÑÑ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ¾Ð¹!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Ура! Файл загружен!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "ÐеподходÑщий тип файла." + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Ой!" @@ -160,35 +194,35 @@ msgstr "КажетÑÑ, такой Ñтраницы не ÑущеÑтвует. Ð msgid "" "If you're sure the address is correct, maybe the page you're looking for has" " been moved or deleted." -msgstr "Возможно, Ñтраница которую вы ищете была удалена или переехала." +msgstr "Возможно, Ñтраница, которую вы ищете, была удалена или переехала." #: mediagoblin/templates/mediagoblin/404.html:32 msgid "Image of 404 goblin stressing out" msgstr "Изображение 404 нервничающего гоблина" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "Символ MediaGoblin" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Загрузить файл" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "подтвердите ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "Подтвердите ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты!" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "завершение ÑеанÑа" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Войти" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -198,69 +232,45 @@ msgstr "" #: mediagoblin/templates/mediagoblin/root.html:24 msgid "Explore" -msgstr "" +msgstr "Смотреть" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Привет, любитель мультимедиа! MediaGoblin…" - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "Отличное меÑто Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… файлов!" +msgid "Hi there, welcome to this MediaGoblin site!" +msgstr "Привет! Добро пожаловать на наш MediaGoblin’овый Ñайт!" -#: mediagoblin/templates/mediagoblin/root.html:30 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"МеÑто Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы ÑовмеÑтно работать или проÑто показать Ñвои " -"оригинальные и/или заимÑтвованные ÑозданиÑ!" - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" -msgstr "Свободное ПО. (Мы же проект <a href=\"http://gnu.org\">GNU</a>.)" +"Ðтот Ñайт работает на <a href=\"http://mediagoblin.org\">MediaGoblin</a>, " +"необыкновенно замечательном ПО Ð´Ð»Ñ Ñ…Ð¾Ñтинга мультимедийных файлов." -#: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" -"Попытка Ñделать мир лучше Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ децентрализации и (надеемÑÑ, что Ñкоро!)" -" интеграции!" - -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "" -"РаÑÑчитан на раÑширÑемоÑть. (Ð’ программе Ñкоро должна поÑвитьÑÑ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° " -"других видов мультимедиа, таких как видео!)" - -#: mediagoblin/templates/mediagoblin/root.html:34 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"ПоддерживаетÑÑ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ же, как и ты. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">Ты можешь помочь Ñделать Ñто" -" ПО лучше!</a>)" +"Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобÑтвенных файлов, комментированиÑ, Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑпиÑка любиых " +"файлов и Ñ‚. п. вы можете предÑтавитьÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ вашей MediaGoblin’овой " +"учётной запиÑи." -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" +msgstr "У Ð²Ð°Ñ ÐµÑ‘ ещё нет? Ðе проблема!" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Создайте учётную запиÑÑŒ на Ñтом Ñайте</a>\n" +" или\n" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">УÑтановите MediaGoblin на ÑобÑтвенный Ñервер</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "Самые новые файлы" @@ -268,18 +278,29 @@ msgstr "Самые новые файлы" msgid "Enter your new password" msgstr "Введите Ñвой новый пароль" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Введите Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Подтвердить" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "Отправить инÑтрукцию" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." -msgstr "" +msgstr "Ваш пароль изменён. Теперь попробуйте предÑтавитьÑÑ." #: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22 msgid "" "Check your inbox. We sent an email with a URL for changing your password." msgstr "" +"Проверьте Ñвой Ñлектронный почтовый Ñщик. Мы отправили Ñообщение Ñ Ð°Ð´Ñ€ÐµÑом " +"Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ паролÑ." #: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19 #, python-format @@ -294,27 +315,32 @@ msgid "" "If you think this is an error, just ignore this email and continue being\n" "a happy goblin!" msgstr "" +"Привет, %(username)s,\n" +"\n" +"чтобы Ñменить Ñвой пароль от GNU MediaGoblin, откройте\n" +"Ñледующий URL вашим вебâ€Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð¾Ð¼:\n" +"\n" +"%(verification_url)s\n" +"\n" +"ЕÑли вы думаете, что Ñто какаÑâ€Ñ‚о ошибка, то игнорируйте\n" +"Ñто Ñообщение и продолжайте быть ÑчаÑтливым гоблином!" #: mediagoblin/templates/mediagoblin/auth/login.html:30 msgid "Logging in failed!" msgstr "ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÑƒÑпешна!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Ещё нету аккаунта?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Создайте здеÑÑŒ!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Забыли Ñвой пароль?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "Смените его!" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Создать аккаунт!" @@ -359,27 +385,54 @@ msgstr "Сохранить изменениÑ" msgid "Editing %(username)s's profile" msgstr "Редактирование Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Файлы Ñ Ð¼ÐµÑ‚ÐºÐ¾Ð¹:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "Файлы Ñ Ð¼ÐµÑ‚ÐºÐ¾Ð¹: %(tag_name)s" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "Оригинал" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Загрузить файл(Ñ‹)" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Подтвердить" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "Файлы %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "Файлы Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ <a href=\"%(user_url)s\">%(username)s</a>" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Извините, но такой пользователь не найден." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "Загружено <a href=\"%(user_url)s\">%(username)s</a> %(date)s" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "ОÑтавить комментарий" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "в" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "РазмеÑтить комментарий!" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "Изменить" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "Удалить" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -412,38 +465,48 @@ msgstr "Ðету файлов Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸" msgid "These uploads failed to process:" msgstr "Обработка Ñтих файлов вызвала ошибку:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "Профиль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Извините, но такой пользователь не найден." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "Ðужно подтверждение почтового адреÑа" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Почти закончили! Теперь надо активировать ваш аккаунт." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" "Через пару мгновений на Ð°Ð´Ñ€ÐµÑ Ð²Ð°ÑˆÐµÐ¹ Ñлектронной почты должно прийти " "Ñообщение Ñ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐ¸Ð¼Ð¸ инÑтрукциÑми." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "РеÑли нет, то:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "" "Повторно отправить Ñообщение Ð´Ð»Ñ Ð¿Ð¾Ð´Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑа Ñлектронной почты" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "Ктоâ€Ñ‚о Ñоздал аккаунт Ñ Ñтим именем, но его еще надо активировать." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -452,40 +515,35 @@ msgstr "" "ЕÑли Ñто были вы, и еÑли вы потерÑли Ñообщение Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð°, " "то вы можете <a href=\"%(login_url)s\">войти</a> и отправить его повторно." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "Профиль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "ЗдеÑÑŒ вы можете раÑÑказать о Ñебе." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Редактировать профиль" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Ðто пользователь не заполнил Ñвой профайл (пока)." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Смотреть вÑе файлы %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "Ваши файлы поÑвÑÑ‚ÑÑ Ð·Ð´ÐµÑÑŒ, когда вы их добавите." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Добавить файлы" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Пока что тут файлов нет…" @@ -505,6 +563,18 @@ msgstr "Более новые" msgid "Older" msgstr "Более Ñтарые" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "Перейти к Ñтранице:" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "Метки:" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "и" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Комментарий" @@ -513,15 +583,23 @@ msgstr "Комментарий" msgid "I am sure I want to delete this" msgstr "Я уверен, что хочу удалить Ñто" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." -msgstr "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "Ой, ваш комментарий был пуÑÑ‚." -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" -msgstr "" +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "Ваш комментарий размещён!" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." +msgstr "Ð’Ñ‹ удалили файл." + +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." +msgstr "Файл не удалён, так как вы не подтвердили Ñвою уверенноÑть галочкой." -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "Ð’Ñ‹ на пороге ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° другого пользователÑ. Будьте оÑторожны." diff --git a/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.mo Binary files differindex 684c850a..4e71eaa7 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 d3196b9c..a44f7866 100644 --- a/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/sk/LC_MESSAGES/mediagoblin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +19,10 @@ msgstr "" "Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Odovzdaný nesprávny súbor pre daný typ média." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Prihlasovacie meno" @@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists." msgstr "PrepáÄ, rovnaké prihlasovacie meno už niekto použÃva." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "PrepáÄ, daná e-mailová adresa už bola pri registrácii využitá." +msgid "Sorry, a user with that email address already exists." +msgstr "" #: mediagoblin/auth/views.py:179 msgid "" @@ -67,11 +71,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "Nesprávny overovacà kÄ¾ÃºÄ alebo použÃvateľské ID" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "Opätovne zaslaÅ¥ overovaciu správu." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -87,42 +99,62 @@ msgstr "Nadpis" msgid "Tags" msgstr "Å tÃtky" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "Unikátna ÄasÅ¥ adresy" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "Unikátna ÄasÅ¥ adresy musà byÅ¥ vyplnená" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "Titulná ÄasÅ¥ URL odkazu média. ZvyÄajne to meniÅ¥ nemusÃÅ¡." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Bio" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Webstránka" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "Položku s rovnakou unikátnou ÄasÅ¥ou adresy už niekde máš." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "UpravujeÅ¡ médiá niekoho iného. Pristupuj opatrne." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "UpravujeÅ¡ použÃvateľský profil. Pristupuj opatrne." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Odovzdaný nesprávny súbor pre daný typ média." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -132,18 +164,18 @@ msgstr "Súbor" msgid "Description of this work" msgstr "Charakteristika diela" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Poskytni súbor." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "Súbor najskôr nie je obrázkom!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Juchú! ÚspeÅ¡ne vložené!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Ajaj!" @@ -164,29 +196,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Obrázok stresujúceho goblina pri chybovom kóde Ä. 404" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "MediaGoblin logo" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "VložiÅ¥ výtvor" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "over si svoj e-mail!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Prihlásenie" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -199,71 +231,34 @@ msgid "Explore" msgstr "PreskúmaÅ¥" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Vitaj medzi nami, kreatÃvne stvorenie! MediaGoblin je..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "Parádne miesto pre tvoje výtvory!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"Miesto pre ľudÃ, vhodné na spoluprácu a vystavovanie tak originálnych, ako " -"aj odvodených kreáciÃ!" - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -"Voľné, vo význame slobody. (Koniec-koncov, sme predsa <a " -"href=\"http://gnu.org\">GNU</a> projekt.)" -#: mediagoblin/templates/mediagoblin/root.html:32 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Zo snahou spraviÅ¥ svet lepÅ¡Ãm miestom vÄaka decentralizácii a (eventuálne, " -"už Äoskoro!) federácii!" -#: mediagoblin/templates/mediagoblin/root.html:33 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"S dôrazom na rozÅ¡ÃriteľnosÅ¥. (Podpora pre rozliÄné typy médià v tomto " -"softvéri už Äoskoro, nevynÃmajúc videá!)" -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" msgstr "" -"Existujeme aj vÄaka ľudom ako si ty. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">MôžeÅ¡ nám pomôcÅ¥ softvér " -"vylepÅ¡iÅ¥!</a>)" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Tak Äo, chceÅ¡ sa pridaÅ¥?" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">VytvoriÅ¥ bezplatný úÄet</a>\n" -" alebo\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">SprevádzkovaÅ¥ MediaGoblin na vlastnom serveri</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "NajÄerstvejÅ¡ie výtvory" @@ -271,9 +266,18 @@ msgstr "NajÄerstvejÅ¡ie výtvory" msgid "Enter your new password" msgstr "Vlož svoje nové heslo" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Vlož svoje použÃvateľské meno alebo e-mailovú adresu" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "VložiÅ¥" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -312,22 +316,18 @@ msgstr "" msgid "Logging in failed!" msgstr "Prihlásenie zlyhalo!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "EÅ¡te nemáš úÄet?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "VytvoriÅ¥ jeden tu!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Zabudnuté heslo?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "ZmeniÅ¥ ho!" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "VytvoriÅ¥ úÄet!" @@ -373,27 +373,54 @@ msgstr "UložiÅ¥ zmeny" msgid "Editing %(username)s's profile" msgstr "Úprava profilu, ktorý vlastnà %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Výtvor znaÄený Å¡tÃtkami:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Vlož svoj výtvor" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "VložiÅ¥" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "<a href=\"%(user_url)s\">Výtvory, ktoré vlastnà %(username)s</a>" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "PrepáÄ, použÃvateľské meno nenájdené." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -425,29 +452,39 @@ msgstr "Žiadne médiá v procese spracovania" msgid "These uploads failed to process:" msgstr "Nasledovné vloženia nepreÅ¡li spracovanÃm:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "Profil, ktorý vlastnà %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "PrepáÄ, použÃvateľské meno nenájdené." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "Potrebné overenie e-mailovej adresy" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Takmer hotovo! EÅ¡te ti musà byÅ¥ aktivovaný úÄet." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "E-mailová správa s popisom ako to spraviÅ¥, by mala onedlho doraziÅ¥." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "V prÃpade, že sa tak nestalo:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Opätovne zaslaÅ¥ overovaciu správu" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -455,7 +492,7 @@ msgstr "" "ÚÄet s týmto prihlasovacÃm menom je už registrovaný, avÅ¡ak eÅ¡te stále " "neaktÃvny." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -464,41 +501,36 @@ msgstr "" "Pokiaľ si to ty, ale už nemáš overovaciu správu, tak sa môžeÅ¡ <a " "href=\"%(login_url)s\">prihlásiÅ¥</a> a preposlaÅ¥ si ju." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "Profil, ktorý vlastnà %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Povedz tu o sebe ostatným." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "UpraviÅ¥ profil" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "DotyÄná osoba eÅ¡te nevyplnila svoj profil (zatiaľ)." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "ZhliadnuÅ¥ vÅ¡etky výtvory, ktoré vlastnà %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" "VÅ¡etky tvoje výtvory sa objavia práve tu, ale zatiaľ nemáš niÄ pridané." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "PridaÅ¥ výtvor" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Najskôr tu eÅ¡te nebudú žiadne výtvory..." @@ -518,6 +550,18 @@ msgstr "NovÅ¡ie" msgid "Older" msgstr "StarÅ¡ie" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Komentár" @@ -526,15 +570,23 @@ msgstr "Komentár" msgid "I am sure I want to delete this" msgstr "JednoznaÄne to chcem odstrániÅ¥" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "Chystáš sa odstrániÅ¥ výtvory niekoho iného. Pristupuj opatrne." diff --git a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo Binary files differindex 52e3d632..9ad54a83 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 cba4fdd0..ffd2c04c 100644 --- a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -19,6 +19,10 @@ msgstr "" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Za vrsto vsebine je bila podana napaÄna datoteka." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "UporabniÅ¡ko ime" @@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists." msgstr "Oprostite, uporabnik s tem imenom že obstaja." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Oprostite, ta e-poÅ¡tni naslov je že v uporabi." +msgid "Sorry, a user with that email address already exists." +msgstr "" #: mediagoblin/auth/views.py:179 msgid "" @@ -67,11 +71,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "Potrditveni kljuÄ ali uporabniÅ¡ka identifikacija je napaÄna" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "Ponovno poÅ¡iljanje potrditvene e-poÅ¡te." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -85,42 +97,62 @@ msgstr "Naslov" msgid "Tags" msgstr "Oznake" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "Oznaka" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "Oznaka ne sme biti prazna" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Biografija" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Spletna stran" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "Vnos s to oznako za tega uporabnika že obstaja." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "Urejate vsebino drugega uporabnika. Nadaljujte pazljivo." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Urejate uporabniÅ¡ki profil. Nadaljujte pazljivo." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Za vrsto vsebine je bila podana napaÄna datoteka." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -130,18 +162,18 @@ msgstr "Datoteka" msgid "Description of this work" msgstr "" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Podati morate datoteko." -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "Kot kaže datoteka ni slika." - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Juhej! Poslano." +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Opa!" @@ -162,29 +194,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Slika napake 404 s paniÄnim Å¡kratom" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "Logotip MediaGoblin" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "PoÅ¡lji vsebino" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "Preverite svojo e-poÅ¡to." +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Prijava" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -195,66 +227,34 @@ msgid "Explore" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Pozdravljen, ljubitelj veÄpredstavnostnih vsebin! MediaGoblin je ..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "Popolno mesto za vaÅ¡e veÄpredstavnostne vsebine." - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"Mesto, kjer ljudje lahko sodelujejo in razkazujejo originalne in predelane " -"stvaritve." - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:32 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Ustvarjen z namenom izboljÅ¡ati svet, s pomoÄjo decentralizacije in (kmalu) " -"federacije." -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "" -"Zgrajen za razÅ¡irjanje. (Kmalu bodo na voljo dodatne vrste vsebin, vkljuÄno " -"podpora za video)" - -#: mediagoblin/templates/mediagoblin/root.html:34 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Sad dela ljudi, kot ste vi. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">Pri izboljÅ¡evanju nam lahko " -"pomagate tudi vi.</a>)" -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "" @@ -262,8 +262,17 @@ msgstr "" msgid "Enter your new password" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "PoÅ¡lji" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 @@ -293,22 +302,18 @@ msgstr "" msgid "Logging in failed!" msgstr "Prijava ni uspela." -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Å e nimate raÄuna?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Ustvarite si ga." -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Ustvarite raÄun." @@ -354,27 +359,54 @@ msgstr "Shrani spremembe" msgid "Editing %(username)s's profile" msgstr "Urejanje profila – %(username)s" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Vsebina oznaÄena z:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "PoÅ¡ljite svojo vsebino" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "PoÅ¡lji" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "Vsebina uporabnika <a href=\"%(user_url)s\">%(username)s</a>" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Oprostite, tega uporabnika ni bilo moÄ najti." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -406,29 +438,39 @@ msgstr "V obdelavi ni nobene vsebine" msgid "These uploads failed to process:" msgstr "Teh vsebin ni bilo moÄ obdelati:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "Profil – %(username)s" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Oprostite, tega uporabnika ni bilo moÄ najti." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "Potrebna je potrditev prek e-poÅ¡te" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Skoraj ste zakljuÄili. Svoj raÄun morate le Å¡e aktivirati." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "V kratkem bi morali prejeti e-poÅ¡to z navodili, kako to storiti." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "ÄŒe je ne prejmete:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Ponovno poÅ¡lji potrditveno e-poÅ¡to" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -436,7 +478,7 @@ msgstr "" "Nekdo je s tem uporabniÅ¡kim imenom že registriral raÄun, vendar mora biti Å¡e" " aktiviran." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -445,40 +487,35 @@ msgstr "" "ÄŒe ste ta oseba vi, a ste izgubili potrditveno e-poÅ¡to, se lahko <a " "href=\"%(login_url)s\">prijavite</a> in jo ponovno poÅ¡ljete." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "Profil – %(username)s" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Na tem mestu lahko drugim poveste nekaj o sebi." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Uredi profil" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Ta uporabnik Å¡e ni izpolnil svojega profila." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Prikaži vso vsebino uporabnika %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "Tu bo prikazana vaÅ¡a vsebina, a trenutno Å¡e niste dodali niÄ." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Dodaj vsebino" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Videti je, da tu Å¡e ni nobene vsebine ..." @@ -498,6 +535,18 @@ msgstr "" msgid "Older" msgstr "" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Komentar" @@ -506,15 +555,23 @@ msgstr "Komentar" msgid "I am sure I want to delete this" msgstr "" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" diff --git a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo Binary files differindex d2649938..ece8989f 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 b4b2fb7b..942f7203 100644 --- a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: Serbian (http://www.transifex.net/projects/p/mediagoblin/team/sr/)\n" "MIME-Version: 1.0\n" @@ -18,6 +18,10 @@ msgstr "" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "" + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "" @@ -51,7 +55,7 @@ msgid "Sorry, a user with that name already exists." msgstr "" #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." +msgid "Sorry, a user with that email address already exists." msgstr "" #: mediagoblin/auth/views.py:179 @@ -64,11 +68,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "" -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -82,41 +94,61 @@ msgstr "" msgid "Tags" msgstr "" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "" -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "" -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" msgstr "" #: mediagoblin/submit/forms.py:25 @@ -127,16 +159,16 @@ msgstr "" msgid "Description of this work" msgstr "" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "" -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" +#: mediagoblin/submit/views.py:127 +msgid "Woohoo! Submitted!" msgstr "" -#: mediagoblin/submit/views.py:121 -msgid "Woohoo! Submitted!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." msgstr "" #: mediagoblin/templates/mediagoblin/404.html:21 @@ -157,29 +189,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -190,57 +222,34 @@ msgid "Explore" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" +#: mediagoblin/templates/mediagoblin/root.html:28 +msgid "" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:30 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" #: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Don't have one yet? It's easy!" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:39 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "" @@ -248,8 +257,17 @@ msgstr "" msgid "Enter your new password" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 @@ -279,22 +297,18 @@ msgstr "" msgid "Logging in failed!" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "" @@ -334,26 +348,53 @@ msgstr "" msgid "Editing %(username)s's profile" msgstr "" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 @@ -386,75 +427,80 @@ msgstr "" msgid "These uploads failed to process:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " "href=\"%(login_url)s\">log in</a> and resend it." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "" @@ -474,6 +520,18 @@ msgstr "" msgid "Older" msgstr "" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "" @@ -482,15 +540,23 @@ msgstr "" msgid "I am sure I want to delete this" msgstr "" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" diff --git a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo Binary files differindex 2ae7c510..c6cf0df9 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 3ee44b18..e195ad70 100644 --- a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: Swedish (http://www.transifex.net/projects/p/mediagoblin/team/sv/)\n" "MIME-Version: 1.0\n" @@ -20,6 +20,10 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "Ogiltig fil för mediatypen." + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "Användarnamn" @@ -53,8 +57,8 @@ msgid "Sorry, a user with that name already exists." msgstr "En användare med det användarnamnet finns redan." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "Den e-postadressen är redan tagen." +msgid "Sorry, a user with that email address already exists." +msgstr "" #: mediagoblin/auth/views.py:179 msgid "" @@ -68,11 +72,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "Verifieringsnyckeln eller användar-IDt är fel." -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "Skickade ett nytt verifierings-email." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -88,42 +100,62 @@ msgstr "Titel" msgid "Tags" msgstr "Taggar" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "Sökvägsnamn" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "Sökvägsnamnet kan inte vara tomt" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "Sökvägstitlen för din media. Du brukar inte behöva ändra denna." -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "Presentation" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "Hemsida" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "Ett inlägg med det sökvägsnamnet existerar redan." -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "Var försiktig, du redigerar nÃ¥gon annans inlägg." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "Var försiktig, du redigerar en annan användares profil." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "Ogiltig fil för mediatypen." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -133,18 +165,18 @@ msgstr "Fil" msgid "Description of this work" msgstr "Beskrivning av verket" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "Du mÃ¥ste ange en fil" -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "Filen verkar inte vara en giltig bildfil!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "Tjohoo! Upladdat!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "Ojoj!" @@ -165,29 +197,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "Bild av stressat 404-troll." -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "MediaGoblin-logotyp" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "Ladda upp" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "Verifiera din e-postadress!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "Logga in" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -200,75 +232,34 @@ msgid "Explore" msgstr "Utforska" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "Hej där mediaentusiast, MediaGoblin..." - -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "Är ett perfekt ställe för din media!" - -#: mediagoblin/templates/mediagoblin/root.html:30 -msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "" -"Är ett ställe för människor att samarbeta och visa upp originella och " -"härrörande verk." - -#: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -"Är fritt som i frihet. (Vi är ju ett <a " -"href=\"http://gnu.org\">GNU</a>-projekt.)" -#: mediagoblin/templates/mediagoblin/root.html:32 +#: mediagoblin/templates/mediagoblin/root.html:28 msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -"Arbetar för att göra världen till ett bättre ställe genom decentralisering " -"och (sÃ¥ smÃ¥ningom, kommer snart!) -- Google Translate säger " -"\"sammanslutning\", <em>en: <a " -"href=\"http://en.wikipedia.org/wiki/Federation_(information_technology)\">federation</a></em>" -" " -#: mediagoblin/templates/mediagoblin/root.html:33 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" -"Byggd för utbyggbarhet. (Flera mediatyper kommer snart till MediaGoblin, " -"bland annat video!)" -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" +#: mediagoblin/templates/mediagoblin/root.html:31 +msgid "Don't have one yet? It's easy!" msgstr "" -"Drivs av människor som du. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">Du kan hjälpa os forbättra " -"MediaGoblin!</a>)" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "Nyfiken att gÃ¥ med oss?" -#: mediagoblin/templates/mediagoblin/root.html:39 +#: mediagoblin/templates/mediagoblin/root.html:32 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Skapa ett konto gratis</a>\n" -"\n" -" or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Installera MediaGoblin pÃ¥ din egen server</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "Senast medier" @@ -276,9 +267,18 @@ msgstr "Senast medier" msgid "Enter your new password" msgstr "Fyll i ditt lösenord" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "Fyll i ditt användarnamn eller lösenord" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "Skicka" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -317,22 +317,18 @@ msgstr "" msgid "Logging in failed!" msgstr "Inloggning misslyckades!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "Har du inget konto än?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "Skapa ett här!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "Glömt ditt lösenord?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "Ändra!" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "Skapa ett konto!" @@ -377,27 +373,54 @@ msgstr "Spara ändringar" msgid "Editing %(username)s's profile" msgstr "Redigerar %(username)ss profil" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "Media taggat med:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "Ladda upp" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "Skicka" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "<a href=\"%(user_url)s\">%(username)s</a>s media" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "Ledsen, hittar ingen sÃ¥dan användare." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -429,30 +452,40 @@ msgstr "Ingen media under behandling" msgid "These uploads failed to process:" msgstr "De här behandlingarna misslyckades:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "%(username)ss profil" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "Ledsen, hittar ingen sÃ¥dan användare." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "E-postadressverifiering krävs." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "Nästan klar! Ditt konto behöver bara aktiveras." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" "Ett e-postmeddelande med instruktioner kommer att hamna hos dig inom kort." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "Om det inte skulle göra det:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "Skicka ett nytt e-postmeddelande" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." @@ -460,7 +493,7 @@ msgstr "" "NÃ¥gon har redan registrerat ett konto med det här användarnamnet men det har" " inte aktiverats." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " @@ -470,30 +503,25 @@ msgstr "" "detaljer om hur du verifierar ditt konto sÃ¥ kan du <a " "href=\"%(login_url)s\">logga in</a> och begära ett nytt." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "%(username)ss profil" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "Här kan du berätta för andra om dig själv." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "Redigera profil" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "Den här användaren har inte fyllt i sin profilsida ännu." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "Se all media frÃ¥n %(username)s" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." @@ -501,11 +529,11 @@ msgstr "" "Här kommer din media att dyka upp, du verkar inte ha lagt till nÃ¥gonting " "ännu." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "Lägg till media" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "Det verkar inte finnas nÃ¥gon media här ännu." @@ -525,6 +553,18 @@ msgstr "Nyare" msgid "Older" msgstr "Äldre" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "Kommentar" @@ -533,15 +573,23 @@ msgstr "Kommentar" msgid "I am sure I want to delete this" msgstr "Jag är säker pÃ¥ att jag vill radera detta" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "Du tänker radera en annan användares media. Var försiktig." diff --git a/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.mo Binary files differindex b0d8d3fc..cd9fab9f 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 289bddb5..f7bbd6ac 100644 --- a/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/te/LC_MESSAGES/mediagoblin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-03 14:08+0000\n" -"Last-Translator: veeven <veeven@gmail.com>\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" +"Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,6 +19,10 @@ msgstr "" "Language: te\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "" + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "వాడà±à°•à°°à°¿ పేరà±" @@ -52,7 +56,7 @@ msgid "Sorry, a user with that name already exists." msgstr "" #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." +msgid "Sorry, a user with that email address already exists." msgstr "" #: mediagoblin/auth/views.py:179 @@ -65,11 +69,19 @@ msgstr "" msgid "The verification key or user id is incorrect" msgstr "" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "" -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -83,41 +95,61 @@ msgstr "శీరà±à°·à°¿à°•" msgid "Tags" msgstr "" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "" -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "" -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" msgstr "" #: mediagoblin/submit/forms.py:25 @@ -128,16 +160,16 @@ msgstr "" msgid "Description of this work" msgstr "" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "" -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" +#: mediagoblin/submit/views.py:127 +msgid "Woohoo! Submitted!" msgstr "" -#: mediagoblin/submit/views.py:121 -msgid "Woohoo! Submitted!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." msgstr "" #: mediagoblin/templates/mediagoblin/404.html:21 @@ -158,29 +190,29 @@ msgstr "" msgid "Image of 404 goblin stressing out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -191,57 +223,34 @@ msgid "Explore" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." +msgid "Hi there, welcome to this MediaGoblin site!" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" +#: mediagoblin/templates/mediagoblin/root.html:28 +msgid "" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:30 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." msgstr "" #: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" +msgid "Don't have one yet? It's easy!" msgstr "" #: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "" - -#: mediagoblin/templates/mediagoblin/root.html:39 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "" @@ -249,8 +258,17 @@ msgstr "" msgid "Enter your new password" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "దాఖలౠచెయà±à°¯à°¿" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" msgstr "" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 @@ -280,22 +298,18 @@ msgstr "" msgid "Logging in failed!" msgstr "à°ªà±à°°à°µà±‡à°¶à°‚ విఫలమయà±à°¯à°¿à°‚ది!" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "మీకౠఇంకా ఖాతా లేదా?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "మీ సంకేతపదానà±à°¨à°¿ మరà±à°šà°¿à°ªà±‹à°¯à°¾à°°à°¾?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "" @@ -335,26 +349,53 @@ msgstr "మారà±à°ªà±à°²à°¨à± à°à°¦à±à°°à°ªà°°à°šà±" msgid "Editing %(username)s's profile" msgstr "" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" msgstr "" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "దాఖలౠచెయà±à°¯à°¿" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 @@ -387,75 +428,80 @@ msgstr "" msgid "These uploads failed to process:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " "href=\"%(login_url)s\">log in</a> and resend it." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "" @@ -475,6 +521,18 @@ msgstr "" msgid "Older" msgstr "" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "à°µà±à°¯à°¾à°–à±à°¯" @@ -483,15 +541,23 @@ msgstr "à°µà±à°¯à°¾à°–à±à°¯" msgid "I am sure I want to delete this" msgstr "" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." +msgstr "" + +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" +msgstr "" + +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "" diff --git a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo Binary files differindex e3751aeb..6dda94b7 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 c664adbe..70622590 100644 --- a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po +++ b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: GNU MediaGoblin\n" "Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n" -"POT-Creation-Date: 2011-11-01 23:14-0500\n" -"PO-Revision-Date: 2011-11-02 04:13+0000\n" +"POT-Creation-Date: 2011-12-04 10:24-0600\n" +"PO-Revision-Date: 2011-12-04 16:23+0000\n" "Last-Translator: cwebber <cwebber@dustycloud.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -20,6 +20,10 @@ msgstr "" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0\n" +#: mediagoblin/processing.py:143 +msgid "Invalid file given for media type." +msgstr "指定錯誤的媒體類別ï¼" + #: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49 msgid "Username" msgstr "使用者å稱" @@ -53,8 +57,8 @@ msgid "Sorry, a user with that name already exists." msgstr "抱æ‰, 這個使用者å稱已經å˜åœ¨." #: mediagoblin/auth/views.py:77 -msgid "Sorry, that email address has already been taken." -msgstr "抱æ‰ï¼Œé€™å€‹é›»å郵件已經被其他人使用了。" +msgid "Sorry, a user with that email address already exists." +msgstr "抱æ‰ï¼Œæ¤é›»å郵件已被註冊了。" #: mediagoblin/auth/views.py:179 msgid "" @@ -66,11 +70,19 @@ msgstr "ä½ çš„é›»å郵件ä½å€å·²è¢«èªè‰. ä½ ç¾åœ¨å°±å¯ä»¥ç™»å…¥, ç·¨è¼¯ä½ msgid "The verification key or user id is incorrect" msgstr "èªè‰ç¢¼æˆ–是使用者帳號錯誤" -#: mediagoblin/auth/views.py:207 +#: mediagoblin/auth/views.py:203 +msgid "You must be logged in so we know who to send the email to!" +msgstr "ä½ å¿…é ˆç™»å…¥ï¼Œæˆ‘å€‘æ‰çŸ¥é“ä¿¡è¦é€çµ¦èª°ï¼" + +#: mediagoblin/auth/views.py:211 +msgid "You've already verified your email address!" +msgstr "ä½ çš„é›»å郵件已經確èªäº†ï¼" + +#: mediagoblin/auth/views.py:224 msgid "Resent your verification email." msgstr "é‡é€èªè‰ä¿¡." -#: mediagoblin/auth/views.py:248 +#: mediagoblin/auth/views.py:265 msgid "" "Could not send password recovery email as your username is inactive or your " "account's email address has not been verified." @@ -84,42 +96,62 @@ msgstr "標題" msgid "Tags" msgstr "標籤" -#: mediagoblin/edit/forms.py:31 +#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34 +msgid "Seperate tags by commas." +msgstr "" + +#: mediagoblin/edit/forms.py:33 msgid "Slug" msgstr "自訂å—串" -#: mediagoblin/edit/forms.py:32 +#: mediagoblin/edit/forms.py:34 msgid "The slug can't be empty" msgstr "自訂å—串ä¸èƒ½ç©ºç™½" -#: mediagoblin/edit/forms.py:33 +#: mediagoblin/edit/forms.py:35 msgid "" "The title part of this media's URL. You usually don't need to change this." msgstr "æ¤åª’體網å€çš„åç¨±ã€‚ä½ é€šå¸¸ä¸éœ€è¦è®Šå‹•這個的。" -#: mediagoblin/edit/forms.py:40 +#: mediagoblin/edit/forms.py:42 msgid "Bio" msgstr "自我介紹" -#: mediagoblin/edit/forms.py:43 +#: mediagoblin/edit/forms.py:45 msgid "Website" msgstr "網站" -#: mediagoblin/edit/views.py:64 +#: mediagoblin/edit/forms.py:49 +msgid "Old password" +msgstr "舊的密碼" + +#: mediagoblin/edit/forms.py:52 +msgid "New Password" +msgstr "新的密碼" + +#: mediagoblin/edit/views.py:65 msgid "An entry with that slug already exists for this user." msgstr "這個自訂å—串已經被其他人用了" -#: mediagoblin/edit/views.py:85 +#: mediagoblin/edit/views.py:86 msgid "You are editing another user's media. Proceed with caution." msgstr "ä½ æ£åœ¨ç·¨è¼¯ä»–人的媒體檔案. 請謹慎處ç†." -#: mediagoblin/edit/views.py:155 +#: mediagoblin/edit/views.py:156 msgid "You are editing a user's profile. Proceed with caution." msgstr "ä½ æ£åœ¨ç·¨è¼¯ä¸€ä½ç”¨æˆ¶çš„æª”案. 請謹慎處ç†." -#: mediagoblin/process_media/errors.py:44 -msgid "Invalid file given for media type." -msgstr "指定錯誤的媒體類別ï¼" +#: mediagoblin/edit/views.py:171 +msgid "Wrong password" +msgstr "密碼錯誤" + +#: mediagoblin/edit/views.py:192 +msgid "Profile edited!" +msgstr "個人資料已被編輯了ï¼" + +#: mediagoblin/media_types/__init__.py:65 +msgid "Could not find any file extension in \"{filename}\"" +msgstr "找ä¸åˆ°ä»»ä½• \"{filename}\" 的附檔å。" #: mediagoblin/submit/forms.py:25 msgid "File" @@ -129,18 +161,18 @@ msgstr "檔案" msgid "Description of this work" msgstr "這個作å“çš„æè¿°" -#: mediagoblin/submit/views.py:46 +#: mediagoblin/submit/views.py:49 msgid "You must provide a file." msgstr "ä½ å¿…é ˆæä¾›ä¸€å€‹æª”案" -#: mediagoblin/submit/views.py:49 -msgid "The file doesn't seem to be an image!" -msgstr "æª”æ¡ˆä¼¼ä¹Žä¸æ˜¯ä¸€å€‹åœ–片喔!" - -#: mediagoblin/submit/views.py:121 +#: mediagoblin/submit/views.py:127 msgid "Woohoo! Submitted!" msgstr "呼呼! é€å‡ºåŽ»åš•!" +#: mediagoblin/submit/views.py:133 +msgid "Invalid file type." +msgstr "䏿£ç¢ºçš„æª”æ¡ˆæ ¼å¼" + #: mediagoblin/templates/mediagoblin/404.html:21 msgid "Oops!" msgstr "糟糕ï¼" @@ -159,29 +191,29 @@ msgstr "å¦‚æžœä½ ç¢ºå®šé€™å€‹ä½å€æ˜¯æ£ç¢ºçš„ï¼Œæˆ–è¨±ä½ åœ¨æ‰¾çš„ç¶²é 已經 msgid "Image of 404 goblin stressing out" msgstr "Image of 404 goblin stressing out" -#: mediagoblin/templates/mediagoblin/base.html:22 -msgid "GNU MediaGoblin" -msgstr "GNU MediaGoblin" - -#: mediagoblin/templates/mediagoblin/base.html:47 +#: mediagoblin/templates/mediagoblin/base.html:49 msgid "MediaGoblin logo" msgstr "MediaGoblin 標誌" -#: mediagoblin/templates/mediagoblin/base.html:52 +#: mediagoblin/templates/mediagoblin/base.html:54 msgid "Submit media" msgstr "éžäº¤åª’é«”" -#: mediagoblin/templates/mediagoblin/base.html:63 -msgid "verify your email!" -msgstr "ç¢ºèªæ‚¨çš„é›»å郵件!" +#: mediagoblin/templates/mediagoblin/base.html:65 +msgid "Verify your email!" +msgstr "確èªä½ 的電å郵件" + +#: mediagoblin/templates/mediagoblin/base.html:72 +msgid "log out" +msgstr "登出" -#: mediagoblin/templates/mediagoblin/base.html:73 +#: mediagoblin/templates/mediagoblin/base.html:75 #: mediagoblin/templates/mediagoblin/auth/login.html:27 -#: mediagoblin/templates/mediagoblin/auth/login.html:35 +#: mediagoblin/templates/mediagoblin/auth/login.html:45 msgid "Log in" msgstr "登入" -#: mediagoblin/templates/mediagoblin/base.html:89 +#: mediagoblin/templates/mediagoblin/base.html:91 msgid "" "Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a " "href=\"http://gnu.org/\">GNU</a> project" @@ -194,62 +226,37 @@ msgid "Explore" msgstr "探索" #: mediagoblin/templates/mediagoblin/root.html:27 -msgid "Hi there, media lover! MediaGoblin is..." -msgstr "å—¨ï¼å¤šåª’體檔案愛好者ï¼MediaGoblin是..." +msgid "Hi there, welcome to this MediaGoblin site!" +msgstr "å˜¿ï¼æ¡è¿Žä¾†åˆ° 媒體怪ç¸(MediaGoblin) 網站" -#: mediagoblin/templates/mediagoblin/root.html:29 -msgid "The perfect place for your media!" -msgstr "ä½ çš„åª’é«”æª”æ¡ˆçš„æœ€ä½³æ‰€åœ¨ï¼" +#: mediagoblin/templates/mediagoblin/root.html:28 +msgid "" +"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an " +"extraordinarily great piece of media hosting software." +msgstr "" -#: mediagoblin/templates/mediagoblin/root.html:30 +#: mediagoblin/templates/mediagoblin/root.html:29 msgid "" -"A place for people to collaborate and show off original and derived " -"creations!" -msgstr "這是一個å¯ä»¥è®“人們共åŒå±•示他們的創作ã€è¡ç”Ÿä½œå“的地方ï¼" +"To add your own media, place comments, save your favourites and more, you " +"can log in with your MediaGoblin account." +msgstr "ä½ å¯ä»¥ç”¨ åª’é«”æ€ªç¸ å¸³è™Ÿç™»å…¥ï¼ŒåŠ å…¥ä½ è‡ªå·±çš„åª’é«”æª”æ¡ˆï¼ŒåŠ å…¥è©•èªžï¼ŒæŠŠä½ çš„æœ€æ„›å„²å˜èµ·ä¾†ã€‚" #: mediagoblin/templates/mediagoblin/root.html:31 -msgid "" -"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, " -"after all.)" -msgstr "å…費但是我們更é‡è¦–自由 (畢竟我們是個 <a href=\"http://gnu.org\">GNU</a> 專案)" +msgid "Don't have one yet? It's easy!" +msgstr "還沒有嗎?其實éžå¸¸ç°¡å–®ï¼" #: mediagoblin/templates/mediagoblin/root.html:32 -msgid "" -"Aiming to make the world a better place through decentralization and " -"(eventually, coming soon!) federation!" -msgstr "目的是è¦é€éŽåˆ†æ•£å¼ä¸”自由的方å¼è®“這個世界更美好ï¼(總有一天,它很快會到來的ï¼)" - -#: mediagoblin/templates/mediagoblin/root.html:33 -msgid "" -"Built for extensibility. (Multiple media types coming soon to the software," -" including video support!)" -msgstr "天生的擴充性。(軟體將支æ´å¤šç¨®å¤šåª’é«”æ ¼å¼, 也支æ´å½±éŸ³æª”案ï¼)" - -#: mediagoblin/templates/mediagoblin/root.html:34 -msgid "" -"Powered by people like you. (<a " -"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this" -" software!</a>)" -msgstr "" -"ç”±åƒä½ 一樣的人們製作 (<a " -"href=\"http://mediagoblin.org/pages/join.html\">ä½ å¯ä»¥å¹«æˆ‘們改進軟體!</a>)" - -#: mediagoblin/templates/mediagoblin/root.html:38 -msgid "Excited to join us?" -msgstr "è¿«ä¸äºŸå¾…想è¦åŠ å…¥æˆ‘å€‘ï¼Ÿ" - -#: mediagoblin/templates/mediagoblin/root.html:39 #, python-format msgid "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n" " or\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>" msgstr "" -"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">建立一個å…費帳號</a>\n" +"<a class=\"button_action_highlight\" href=\"%(register_url)s\">在這網站建立帳號</a>\n" " 或是\n" -" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">åœ¨ä½ çš„ä¼ºæœå™¨ä¸Šè¨ç«‹ MediaGoblin</a>" +" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">建立一個自己的媒體怪ç¸(MedaiGoblin)</a>" -#: mediagoblin/templates/mediagoblin/root.html:53 +#: mediagoblin/templates/mediagoblin/root.html:44 msgid "Most recent media" msgstr "最新的媒體" @@ -257,9 +264,18 @@ msgstr "最新的媒體" msgid "Enter your new password" msgstr "è¼¸å…¥ä½ çš„æ–°å¯†ç¢¼" -#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29 -msgid "Enter your username or email" -msgstr "è¼¸å…¥ä½ çš„å¸³è™Ÿæˆ–æ˜¯é›»å郵件" +#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33 +#: mediagoblin/templates/mediagoblin/submit/start.html:30 +msgid "Submit" +msgstr "é€å‡º" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27 +msgid "Recover password" +msgstr "找回密碼" + +#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30 +msgid "Send instructions" +msgstr "é€å‡ºæŒ‡ç¤º" #: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22 msgid "Your password has been changed. Try to log in now." @@ -295,22 +311,18 @@ msgstr "" msgid "Logging in failed!" msgstr "登入失敗ï¼" -#: mediagoblin/templates/mediagoblin/auth/login.html:43 +#: mediagoblin/templates/mediagoblin/auth/login.html:35 msgid "Don't have an account yet?" msgstr "還沒有帳號嗎?" -#: mediagoblin/templates/mediagoblin/auth/login.html:46 +#: mediagoblin/templates/mediagoblin/auth/login.html:36 msgid "Create one here!" msgstr "在這裡建立一個å§!" -#: mediagoblin/templates/mediagoblin/auth/login.html:49 +#: mediagoblin/templates/mediagoblin/auth/login.html:42 msgid "Forgot your password?" msgstr "忘了密碼嗎?" -#: mediagoblin/templates/mediagoblin/auth/login.html:52 -msgid "Change it!" -msgstr "變更ï¼" - #: mediagoblin/templates/mediagoblin/auth/register.html:27 msgid "Create an account!" msgstr "建立一個帳號!" @@ -355,27 +367,54 @@ msgstr "儲å˜è®Šæ›´" msgid "Editing %(username)s's profile" msgstr "編輯 %(username)s'的檔案ä¸" -#: mediagoblin/templates/mediagoblin/listings/tag.html:31 -msgid "Media tagged with:" -msgstr "媒體檔案被標籤為:" +#: mediagoblin/templates/mediagoblin/listings/tag.html:30 +#: mediagoblin/templates/mediagoblin/listings/tag.html:35 +#, python-format +msgid "Media tagged with: %(tag_name)s" +msgstr "æ¤åª’體被標è˜ç‚ºï¼š%(tag_name)s" + +#: mediagoblin/templates/mediagoblin/media_displays/video.html:19 +msgid "Original" +msgstr "原始的" #: mediagoblin/templates/mediagoblin/submit/start.html:26 msgid "Submit yer media" msgstr "éžäº¤ä½ 的媒體檔案" -#: mediagoblin/templates/mediagoblin/submit/start.html:30 -msgid "Submit" -msgstr "é€å‡º" +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30 +#, python-format +msgid "%(username)s's media" +msgstr "%(username)s的媒體" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32 +#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37 #, python-format msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media" msgstr "<a href=\"%(user_url)s\">%(username)s</a>的媒體檔案" -#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:32 -msgid "Sorry, no such user found." -msgstr "抱æ‰ï¼Œæ‰¾ä¸åˆ°é€™å€‹ä½¿ç”¨è€…." +#: mediagoblin/templates/mediagoblin/user_pages/media.html:57 +#, python-format +msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:67 +msgid "Post a comment" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:85 +msgid "at" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:102 +msgid "Post comment!" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:124 +msgid "Edit" +msgstr "" + +#: mediagoblin/templates/mediagoblin/user_pages/media.html:130 +msgid "Delete" +msgstr "" #: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30 #, python-format @@ -407,75 +446,80 @@ msgstr "沒有æ£åœ¨è™•ç†ä¸çš„媒體" msgid "These uploads failed to process:" msgstr "無法處ç†é€™äº›æ›´æ–°" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:39 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:59 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:31 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:89 +#, python-format +msgid "%(username)s's profile" +msgstr "%(username)s的個人檔案" + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:43 +msgid "Sorry, no such user found." +msgstr "抱æ‰ï¼Œæ‰¾ä¸åˆ°é€™å€‹ä½¿ç”¨è€…." + +#: mediagoblin/templates/mediagoblin/user_pages/user.html:50 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:70 msgid "Email verification needed" msgstr "需è¦èªè‰é›»å郵件" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:42 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:53 msgid "Almost done! Your account still needs to be activated." msgstr "幾乎完æˆäº†ï¼ä½†ä½ 的帳號ä»ç„¶éœ€è¦è¢«å•Ÿç”¨ã€‚" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:47 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:58 msgid "" "An email should arrive in a few moments with instructions on how to do so." msgstr "馬上會有一å°é›»åéƒµä»¶å‘Šè¨´ä½ å¦‚ä½•åš." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:51 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 msgid "In case it doesn't:" msgstr "å‡è¨å®ƒç„¡æ³•:" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:54 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:65 msgid "Resend verification email" msgstr "é‡é€èªè‰ä¿¡" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:62 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:73 msgid "" "Someone has registered an account with this username, but it still has to be" " activated." msgstr "有人用了這個帳號登錄了,但是這個帳號ä»éœ€è¦è¢«å•Ÿç”¨ã€‚" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:68 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:79 #, python-format msgid "" "If you are that person but you've lost your verification email, you can <a " "href=\"%(login_url)s\">log in</a> and resend it." msgstr "å¦‚æžœä½ å°±æ˜¯é‚£å€‹äºº, 但是éºå¤±äº†èªè‰ä¿¡, ä½ å¯ä»¥<a href=\"%(login_url)s\">登入</a> 然後é‡é€ä¸€æ¬¡." -#: mediagoblin/templates/mediagoblin/user_pages/user.html:78 -#, python-format -msgid "%(username)s's profile" -msgstr "%(username)s的個人檔案" - -#: mediagoblin/templates/mediagoblin/user_pages/user.html:85 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 msgid "Here's a spot to tell others about yourself." msgstr "é€™æ˜¯ä¸€å€‹åœ°æ–¹ï¼Œèƒ½è®“ä½ å‘他人介紹自己。" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:90 -#: mediagoblin/templates/mediagoblin/user_pages/user.html:108 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:101 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:119 msgid "Edit profile" msgstr "編輯個人檔案" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:96 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:107 msgid "This user hasn't filled in their profile (yet)." msgstr "這個使用者還沒(來得åŠ)填寫個人檔案。" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:122 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:133 #, python-format msgid "View all of %(username)s's media" msgstr "查看%(username)s的全部媒體檔案" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:135 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:146 msgid "" "This is where your media will appear, but you don't seem to have added " "anything yet." msgstr "é€™å€‹åœ°æ–¹æ˜¯ä½ çš„åª’é«”æª”æ¡ˆæœƒå‡ºç¾çš„åœ°æ–¹ï¼Œä½†æ˜¯ä½ ä¼¼ä¹Žé‚„æ²’æœ‰åŠ å…¥ä»»ä½•æ±è¥¿ã€‚" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:141 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:152 msgid "Add media" msgstr "新增媒體檔案" -#: mediagoblin/templates/mediagoblin/user_pages/user.html:147 +#: mediagoblin/templates/mediagoblin/user_pages/user.html:158 msgid "There doesn't seem to be any media here yet..." msgstr "似乎還沒有任何的媒體檔案..." @@ -495,6 +539,18 @@ msgstr "新一點" msgid "Older" msgstr "舊一點" +#: mediagoblin/templates/mediagoblin/utils/pagination.html:50 +msgid "Go to page:" +msgstr "" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:20 +msgid "Tagged with" +msgstr "被標籤為" + +#: mediagoblin/templates/mediagoblin/utils/tags.html:25 +msgid "and" +msgstr "且" + #: mediagoblin/user_pages/forms.py:24 msgid "Comment" msgstr "è©•è«–" @@ -503,15 +559,23 @@ msgstr "è©•è«–" msgid "I am sure I want to delete this" msgstr "我確定我想è¦åˆªé™¤" -#: mediagoblin/user_pages/views.py:142 -msgid "Empty comments are not allowed." +#: mediagoblin/user_pages/views.py:155 +msgid "Oops, your comment was empty." msgstr "" -#: mediagoblin/user_pages/views.py:148 -msgid "Comment posted!" +#: mediagoblin/user_pages/views.py:161 +msgid "Your comment has been posted!" msgstr "" -#: mediagoblin/user_pages/views.py:181 +#: mediagoblin/user_pages/views.py:183 +msgid "You deleted the media." +msgstr "ä½ å·²åˆªé™¤æ¤åª’體檔案。" + +#: mediagoblin/user_pages/views.py:190 +msgid "The media was not deleted because you didn't check that you were sure." +msgstr "æ¤åª’é«”æª”æ¡ˆå°šæœªè¢«åˆªé™¤å› ç‚ºä½ é‚„æ²’æœ‰ç¢ºèªä½ 真的è¦åˆªé™¤ã€‚" + +#: mediagoblin/user_pages/views.py:198 msgid "You are about to delete another user's media. Proceed with caution." msgstr "ä½ åœ¨åˆªé™¤å…¶ä»–äººçš„åª’é«”æª”æ¡ˆã€‚è«‹å°å¿ƒè™•ç†å–”。" diff --git a/mediagoblin/init/celery/__init__.py b/mediagoblin/init/celery/__init__.py index f7ef9f39..1eb21d7a 100644 --- a/mediagoblin/init/celery/__init__.py +++ b/mediagoblin/init/celery/__init__.py @@ -18,7 +18,7 @@ import os import sys -MANDATORY_CELERY_IMPORTS = ['mediagoblin.process_media'] +MANDATORY_CELERY_IMPORTS = ['mediagoblin.processing'] DEFAULT_SETTINGS_MODULE = 'mediagoblin.init.celery.dummy_settings_module' diff --git a/mediagoblin/listings/views.py b/mediagoblin/listings/views.py index 12e539e7..5a09de43 100644 --- a/mediagoblin/listings/views.py +++ b/mediagoblin/listings/views.py @@ -86,7 +86,7 @@ def tag_atom_feed(request): feed.add(entry.get('title'), entry.get('description_html'), content_type='html', - author=entry.uploader()['username'], + author=entry.get_uploader()['username'], updated=entry.get('created'), url=entry.url_for_self(request.urlgen)) diff --git a/mediagoblin/meddleware/__init__.py b/mediagoblin/meddleware/__init__.py new file mode 100644 index 00000000..7ba70d87 --- /dev/null +++ b/mediagoblin/meddleware/__init__.py @@ -0,0 +1,32 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +ENABLED_MEDDLEWARE = ( + 'mediagoblin.meddleware.noop:NoOpMeddleware', + 'mediagoblin.meddleware.csrf:CsrfMeddleware', + ) + + +class BaseMeddleware(object): + + def __init__(self, mg_app): + self.app = mg_app + + def process_request(self, request, controller): + pass + + def process_response(self, request, response): + pass diff --git a/mediagoblin/middleware/csrf.py b/mediagoblin/meddleware/csrf.py index 8275c18e..a4e4e5c6 100644 --- a/mediagoblin/middleware/csrf.py +++ b/mediagoblin/meddleware/csrf.py @@ -21,6 +21,7 @@ from webob.exc import HTTPForbidden from wtforms import Form, HiddenField, validators from mediagoblin import mg_globals +from mediagoblin.meddleware import BaseMeddleware # Use the system (hardware-based) random number generator if it exists. # -- this optimization is lifted from Django @@ -30,6 +31,13 @@ else: getrandbits = random.getrandbits +def csrf_exempt(func): + """Decorate a Controller to exempt it from CSRF protection.""" + + func.csrf_enabled = False + return func + + class CsrfForm(Form): """Simple form to handle rendering a CSRF token and confirming it is included in the POST.""" @@ -42,13 +50,16 @@ def render_csrf_form_token(request): """Render the CSRF token in a format suitable for inclusion in a form.""" + if 'CSRF_TOKEN' not in request.environ: + return None + form = CsrfForm(csrf_token=request.environ['CSRF_TOKEN']) return form.csrf_token -class CsrfMiddleware(object): - """CSRF Protection Middleware +class CsrfMeddleware(BaseMeddleware): + """CSRF Protection Meddleware Adds a CSRF Cookie to responses and verifies that it is present and matches the form token for non-safe requests. @@ -57,10 +68,7 @@ class CsrfMiddleware(object): CSRF_KEYLEN = 64 SAFE_HTTP_METHODS = ("GET", "HEAD", "OPTIONS", "TRACE") - def __init__(self, mg_app): - self.app = mg_app - - def process_request(self, request): + def process_request(self, request, controller): """For non-safe requests, confirm that the tokens are present and match. """ @@ -77,9 +85,11 @@ class CsrfMiddleware(object): # if this is a non-"safe" request (ie, one that could have # side effects), confirm that the CSRF tokens are present and # valid - if request.method not in self.SAFE_HTTP_METHODS \ - and ('gmg.verify_csrf' in request.environ or - 'paste.testing' not in request.environ): + if (getattr(controller, 'csrf_enabled', True) and + request.method not in self.SAFE_HTTP_METHODS and + ('gmg.verify_csrf' in request.environ or + 'paste.testing' not in request.environ) + ): return self.verify_tokens(request) diff --git a/mediagoblin/middleware/noop.py b/mediagoblin/meddleware/noop.py index 820b5d9e..f5376494 100644 --- a/mediagoblin/middleware/noop.py +++ b/mediagoblin/meddleware/noop.py @@ -15,12 +15,12 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. -class NoOpMiddleware(object): +from mediagoblin.meddleware import BaseMeddleware - def __init__(self, mg_app): - self.app = mg_app - def process_request(self, request): +class NoOpMeddleware(BaseMeddleware): + + def process_request(self, request, controller): pass def process_response(self, request, response): diff --git a/mediagoblin/media_types/__init__.py b/mediagoblin/media_types/__init__.py new file mode 100644 index 00000000..25f3d255 --- /dev/null +++ b/mediagoblin/media_types/__init__.py @@ -0,0 +1,69 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import os +import sys + +from mediagoblin import mg_globals +from mediagoblin.tools.translate import lazy_pass_to_ugettext as _ + + +class FileTypeNotSupported(Exception): + pass + +class InvalidFileType(Exception): + pass + + +def get_media_types(): + """ + Generator that returns the available media types + """ + for media_type in mg_globals.app_config['media_types']: + yield media_type + + +def get_media_managers(): + ''' + Generator that returns all available media managers + ''' + for media_type in get_media_types(): + __import__(media_type) + + yield media_type, sys.modules[media_type].MEDIA_MANAGER + + +def get_media_manager(_media_type = None): + for media_type, manager in get_media_managers(): + if media_type in _media_type: + return manager + + # Nope? Then raise an error + raise FileTypeNotSupported( + "MediaManager not in enabled types. Check media_types in config?") + + +def get_media_type_and_manager(filename): + for media_type, manager in get_media_managers(): + if filename.find('.') > 0: + ext = os.path.splitext(filename)[1].lower() + else: + raise InvalidFileType( + _('Could not find any file extension in "{filename}"').format( + filename=filename)) + + if ext[1:] in manager['accepted_extensions']: + return media_type, manager diff --git a/mediagoblin/media_types/image/__init__.py b/mediagoblin/media_types/image/__init__.py new file mode 100644 index 00000000..3b63d8eb --- /dev/null +++ b/mediagoblin/media_types/image/__init__.py @@ -0,0 +1,26 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from mediagoblin.media_types.image.processing import process_image + + +MEDIA_MANAGER = { + "human_readable": "Image", + "processor": process_image, # alternately a string, + # 'mediagoblin.media_types.image.processing'? + "display_template": "mediagoblin/media_displays/image.html", + "default_thumb": "images/media_thumbs/image.jpg", + "accepted_extensions": ["jpg", "jpeg", "png", "gif", "tiff"]} diff --git a/mediagoblin/media_types/image/processing.py b/mediagoblin/media_types/image/processing.py new file mode 100644 index 00000000..5b8259fc --- /dev/null +++ b/mediagoblin/media_types/image/processing.py @@ -0,0 +1,114 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import Image +import os + +from celery.task import Task +from celery import registry + +from mediagoblin.db.util import ObjectId +from mediagoblin import mg_globals as mgg + +from mediagoblin.processing import BaseProcessingFail, \ + mark_entry_failed, BadMediaFail, create_pub_filepath, THUMB_SIZE, \ + MEDIUM_SIZE + +################################ +# Media processing initial steps +################################ + + +def process_image(entry): + """ + Code to process an image + """ + workbench = mgg.workbench_manager.create_workbench() + # Conversions subdirectory to avoid collisions + conversions_subdir = os.path.join( + workbench.dir, 'conversions') + os.mkdir(conversions_subdir) + + queued_filepath = entry['queued_media_file'] + queued_filename = workbench.localized_file( + mgg.queue_store, queued_filepath, + 'source') + + filename_bits = os.path.splitext(queued_filename) + basename = os.path.split(filename_bits[0])[1] + extension = filename_bits[1].lower() + + try: + thumb = Image.open(queued_filename) + except IOError: + raise BadMediaFail() + + thumb.thumbnail(THUMB_SIZE, Image.ANTIALIAS) + + # Copy the thumb to the conversion subdir, then remotely. + thumb_filename = 'thumbnail' + extension + thumb_filepath = create_pub_filepath(entry, thumb_filename) + tmp_thumb_filename = os.path.join( + conversions_subdir, thumb_filename) + with file(tmp_thumb_filename, 'w') as thumb_file: + thumb.save(thumb_file) + mgg.public_store.copy_local_to_storage( + tmp_thumb_filename, thumb_filepath) + + # If the size of the original file exceeds the specified size of a `medium` + # file, a `medium.jpg` files is created and later associated with the media + # entry. + medium = Image.open(queued_filename) + medium_processed = False + + if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1]: + medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS) + + medium_filename = 'medium' + extension + medium_filepath = create_pub_filepath(entry, medium_filename) + tmp_medium_filename = os.path.join( + conversions_subdir, medium_filename) + + with file(tmp_medium_filename, 'w') as medium_file: + medium.save(medium_file) + + mgg.public_store.copy_local_to_storage( + tmp_medium_filename, medium_filepath) + + medium_processed = True + + # we have to re-read because unlike PIL, not everything reads + # things in string representation :) + queued_file = file(queued_filename, 'rb') + + with queued_file: + #create_pub_filepath(entry, queued_filepath[-1]) + original_filepath = create_pub_filepath(entry, basename + extension) + + with mgg.public_store.get_file(original_filepath, 'wb') \ + as original_file: + original_file.write(queued_file.read()) + + mgg.queue_store.delete_file(queued_filepath) + entry['queued_media_file'] = [] + media_files_dict = entry.setdefault('media_files', {}) + media_files_dict['thumb'] = thumb_filepath + media_files_dict['original'] = original_filepath + if medium_processed: + media_files_dict['medium'] = medium_filepath + + # clean up workbench + workbench.destroy_self() diff --git a/mediagoblin/media_types/video/__init__.py b/mediagoblin/media_types/video/__init__.py new file mode 100644 index 00000000..a970ab01 --- /dev/null +++ b/mediagoblin/media_types/video/__init__.py @@ -0,0 +1,27 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from mediagoblin.media_types.video.processing import process_video + + +MEDIA_MANAGER = { + "human_readable": "Video", + "processor": process_video, # alternately a string, + # 'mediagoblin.media_types.image.processing'? + "display_template": "mediagoblin/media_displays/video.html", + "default_thumb": "images/media_thumbs/video.jpg", + "accepted_extensions": [ + "mp4", "mov", "webm", "avi", "3gp", "3gpp", "mkv", "ogv", "ogg"]} diff --git a/mediagoblin/media_types/video/devices/web-advanced.json b/mediagoblin/media_types/video/devices/web-advanced.json new file mode 100644 index 00000000..ce1d22ff --- /dev/null +++ b/mediagoblin/media_types/video/devices/web-advanced.json @@ -0,0 +1,505 @@ +{ + "make": "Generic", + "model": "Web Browser (Advanced)", + "description": "Media for World Wide Web", + "version": "0.1", + "author": { + "name": "Dionisio E Alonso", + "email": "dealonso@gmail.com" + }, + "icon": "file://web.svg", + "default": "WebM 480p", + "presets": [ + { + "name": "H.264 720p", + "extension": "mp4", + "container": "qtmux", + "vcodec": { + "name": "x264enc", + "container": "qtmux", + "width": [ + 960, 1280 + ], + "height": [ + 720, 720 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "pass=qual quantizer=23 subme=6 cabac=0 threads=0" + ] + }, + "acodec": { + "name": "faac", + "container": "qtmux", + "width": [ + 8, 24 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "bitrate=131072 profile=LC" + ] + } + }, + { + "name": "WebM 720p", + "extension": "webm", + "container": "webmmux", + "icon": "file://web-webm.svg", + "vcodec": { + "name": "vp8enc", + "container": "webmmux", + "width": [ + 960, 1280 + ], + "height": [ + 720, 720 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "quality=5.75 threads=%(threads)s speed=2" + ] + }, + "acodec": { + "name": "vorbisenc", + "container": "webmmux", + "width": [ + 8, 32 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "quality=0.3" + ] + } + }, + { + "name": "Flash Video 720p", + "extension": "flv", + "icon": "file://web-flv.png", + "container": "flvmux", + "vcodec": { + "name": "x264enc", + "container": "flvmux", + "width": [ + 960, 1280 + ], + "height": [ + 720, 720 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "pass=qual quantizer=23 subme=6 cabac=0 threads=0" + ] + }, + "acodec": { + "name": "faac", + "container": "flvmux", + "width": [ + 8, 24 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "bitrate=131072 profile=LC" + ] + } + }, + + { + "name": "H.264 576p", + "extension": "mp4", + "container": "qtmux", + "vcodec": { + "name": "x264enc", + "container": "qtmux", + "width": [ + 768, 1024 + ], + "height": [ + 576, 576 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "pass=qual quantizer=23 subme=6 cabac=0 threads=0" + ] + }, + "acodec": { + "name": "faac", + "container": "qtmux", + "width": [ + 8, 24 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "bitrate=131072 profile=LC" + ] + } + }, + { + "name": "WebM 576p", + "extension": "webm", + "container": "webmmux", + "icon": "file://web-webm.svg", + "vcodec": { + "name": "vp8enc", + "container": "webmmux", + "width": [ + 768, 1024 + ], + "height": [ + 576, 576 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "quality=5.75 threads=%(threads)s speed=2" + ] + }, + "acodec": { + "name": "vorbisenc", + "container": "webmmux", + "width": [ + 8, 32 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "quality=0.3" + ] + } + }, + { + "name": "Flash Video 576p", + "extension": "flv", + "icon": "file://web-flv.png", + "container": "flvmux", + "vcodec": { + "name": "x264enc", + "container": "flvmux", + "width": [ + 768, 1024 + ], + "height": [ + 576, 576 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "pass=qual quantizer=23 subme=6 cabac=0 threads=0" + ] + }, + "acodec": { + "name": "faac", + "container": "flvmux", + "width": [ + 8, 24 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "bitrate=131072 profile=LC" + ] + } + }, + + { + "name": "H.264 480p", + "extension": "mp4", + "container": "qtmux", + "vcodec": { + "name": "x264enc", + "container": "qtmux", + "width": [ + 640, 854 + ], + "height": [ + 480, 480 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "pass=qual quantizer=23 subme=6 cabac=0 threads=0" + ] + }, + "acodec": { + "name": "faac", + "container": "qtmux", + "width": [ + 8, 24 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "bitrate=131072 profile=LC" + ] + } + }, + { + "name": "WebM 480p", + "extension": "webm", + "container": "webmmux", + "icon": "file://web-webm.svg", + "vcodec": { + "name": "vp8enc", + "container": "webmmux", + "width": [ + 640, 854 + ], + "height": [ + 480, 480 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "quality=5.75 threads=%(threads)s speed=2" + ] + }, + "acodec": { + "name": "vorbisenc", + "container": "webmmux", + "width": [ + 8, 32 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "quality=0.3" + ] + } + }, + { + "name": "Flash Video 480p", + "extension": "flv", + "icon": "file://web-flv.png", + "container": "flvmux", + "vcodec": { + "name": "x264enc", + "container": "flvmux", + "width": [ + 640, 854 + ], + "height": [ + 480, 480 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "pass=qual quantizer=23 subme=6 cabac=0 threads=0" + ] + }, + "acodec": { + "name": "faac", + "container": "flvmux", + "width": [ + 8, 24 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "bitrate=131072 profile=LC" + ] + } + }, + + { + "name": "H.264 360p", + "extension": "mp4", + "container": "qtmux", + "vcodec": { + "name": "x264enc", + "container": "qtmux", + "width": [ + 480, 640 + ], + "height": [ + 360, 360 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "pass=qual quantizer=23 subme=6 cabac=0 threads=0" + ] + }, + "acodec": { + "name": "faac", + "container": "qtmux", + "width": [ + 8, 24 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "bitrate=131072 profile=LC" + ] + } + }, + { + "name": "WebM 360p", + "extension": "webm", + "container": "webmmux", + "icon": "file://web-webm.svg", + "vcodec": { + "name": "vp8enc", + "container": "webmmux", + "width": [ + 480, 640 + ], + "height": [ + 360, 360 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "quality=5.75 threads=%(threads)s speed=2" + ] + }, + "acodec": { + "name": "vorbisenc", + "container": "webmmux", + "width": [ + 8, 32 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "quality=0.3" + ] + } + }, + { + "name": "Flash Video 360p", + "extension": "flv", + "icon": "file://web-flv.png", + "container": "flvmux", + "vcodec": { + "name": "x264enc", + "container": "flvmux", + "width": [ + 480, 640 + ], + "height": [ + 360, 360 + ], + "rate": [ + 1, 30 + ], + "passes": [ + "pass=qual quantizer=23 subme=6 cabac=0 threads=0" + ] + }, + "acodec": { + "name": "faac", + "container": "flvmux", + "width": [ + 8, 24 + ], + "depth": [ + 8, 24 + ], + "rate": [ + 8000, 96000 + ], + "channels": [ + 1, 2 + ], + "passes": [ + "bitrate=131072 profile=LC" + ] + } + } + ] +} diff --git a/mediagoblin/media_types/video/devices/web-flv.png b/mediagoblin/media_types/video/devices/web-flv.png Binary files differnew file mode 100644 index 00000000..b75699f4 --- /dev/null +++ b/mediagoblin/media_types/video/devices/web-flv.png diff --git a/mediagoblin/media_types/video/devices/web-webm.svg b/mediagoblin/media_types/video/devices/web-webm.svg new file mode 100644 index 00000000..4e5b3e97 --- /dev/null +++ b/mediagoblin/media_types/video/devices/web-webm.svg @@ -0,0 +1,259 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48px" + height="48px" + id="svg2816" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="web-webm.svg"> + <defs + id="defs2818"> + <linearGradient + id="linearGradient3656"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3658" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3660" /> + </linearGradient> + <linearGradient + id="linearGradient3632"> + <stop + style="stop-color:#ffffff;stop-opacity:0.54901963;" + offset="0" + id="stop3634" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3636" /> + </linearGradient> + <linearGradient + id="linearGradient3622"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3624" /> + <stop + style="stop-color:#d3d7cf;stop-opacity:1;" + offset="1" + id="stop3626" /> + </linearGradient> + <linearGradient + id="linearGradient3600"> + <stop + style="stop-color:#8ae234;stop-opacity:1;" + offset="0" + id="stop3602" /> + <stop + style="stop-color:#4e9a06;stop-opacity:1;" + offset="1" + id="stop3604" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 24 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="48 : 24 : 1" + inkscape:persp3d-origin="24 : 16 : 1" + id="perspective2824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3600" + id="linearGradient3606" + x1="20.256382" + y1="2.546674" + x2="20.256382" + y2="46.881901" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3622" + id="linearGradient3628" + x1="21.2349" + y1="7.948472" + x2="21.2349" + y2="40.191879" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3632" + id="linearGradient3638" + x1="6.4826794" + y1="4.543263" + x2="25.363527" + y2="35.227882" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-0.35355339)" /> + <inkscape:perspective + id="perspective3693" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3600-5" + id="linearGradient3606-9" + x1="20.256382" + y1="2.546674" + x2="20.256382" + y2="46.881901" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient3600-5"> + <stop + style="stop-color:#8ae234;stop-opacity:1;" + offset="0" + id="stop3602-7" /> + <stop + style="stop-color:#4e9a06;stop-opacity:1;" + offset="1" + id="stop3604-2" /> + </linearGradient> + <filter + inkscape:collect="always" + id="filter3731"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.82730657" + id="feGaussianBlur3733" /> + </filter> + <inkscape:perspective + id="perspective3749" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3782" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="8" + inkscape:cx="20.51741" + inkscape:cy="22.534228" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:grid-bbox="true" + inkscape:document-units="px" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1099" + inkscape:window-height="834" + inkscape:window-x="801" + inkscape:window-y="106" + inkscape:window-maximized="0"> + <inkscape:grid + type="xygrid" + id="grid3608" /> + </sodipodi:namedview> + <metadata + id="metadata2821"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + sodipodi:type="star" + style="fill:#000000;fill-opacity:0.2869955;stroke:none;filter:url(#filter3731)" + id="path3598-4" + sodipodi:sides="3" + sodipodi:cx="13.857143" + sodipodi:cy="24.714287" + sodipodi:r1="25.596954" + sodipodi:r2="12.798477" + sodipodi:arg1="0" + sodipodi:arg2="1.0471976" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="M 39.454098,24.714287 20.256381,35.798093 1.0586662,46.8819 l 0,-22.167614 0,-22.1676119 19.1977168,11.0838069 19.197715,11.083806 z" + transform="matrix(1.0537808,0,0,1.0537808,3.6163385,-1.9600717)" /> + <path + sodipodi:type="star" + style="fill:url(#linearGradient3606);fill-opacity:1;stroke:#366a04;stroke-width:1.05497880999999993;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-linejoin:round" + id="path3598" + sodipodi:sides="3" + sodipodi:cx="13.857143" + sodipodi:cy="24.714287" + sodipodi:r1="25.596954" + sodipodi:r2="12.798477" + sodipodi:arg1="0" + sodipodi:arg2="1.0471976" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="M 39.454098,24.714287 20.256381,35.798093 1.0586662,46.8819 l 0,-22.167614 0,-22.1676119 19.1977168,11.0838069 19.197715,11.083806 z" + transform="matrix(0.94788634,0,0,0.94788634,5.0257749,0.56128794)" /> + <path + style="fill:url(#linearGradient3628);stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" + d="m 6.5304575,9.646791 8.7347075,20.091724 4.674611,-18.160553 4.525987,2.612472 3.885316,12.559503 4.403755,-7.765833 1.744319,1.009296 -2.127799,9.211229 -6.155446,3.554753 -4.028978,-9.439016 -2.255629,13.086534 -5.852703,3.373025 -7.5584205,-9.989634 0.01028,-20.1435 z" + id="path3620" + sodipodi:nodetypes="cccccccccccccc" /> + <path + style="fill:none;stroke:url(#linearGradient3638);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 6.9826793,42.785087 0,-38.0953773 32.9068657,18.9987873" + id="path3630" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275" + d="M 6.6184028,8.6135689 15.026019,28.134068 19.45616,10.995613" + id="path3739" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275" + d="m 25.081121,14.552251 3.345117,11.020499 3.93014,-6.825955" + id="path3739-5" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275" + d="m 6.6291261,30.85266 7.0710679,9.280777" + id="path3772" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275" + d="m 34.736621,20.290253 -2.032932,8.794642" + id="path3772-6" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275" + d="m 20.594485,35.934991 1.811961,-10.650796 3.270369,7.778174" + id="path3796" + sodipodi:nodetypes="ccc" /> + </g> +</svg> diff --git a/mediagoblin/media_types/video/devices/web.svg b/mediagoblin/media_types/video/devices/web.svg new file mode 100644 index 00000000..c0c68244 --- /dev/null +++ b/mediagoblin/media_types/video/devices/web.svg @@ -0,0 +1,982 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg3440"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"
+ sodipodi:docname="internet-web-browser.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective156" />
+ <linearGradient
+ id="linearGradient4750">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4752" />
+ <stop
+ style="stop-color:#fefefe;stop-opacity:1.0000000;"
+ offset="0.37931034"
+ id="stop4758" />
+ <stop
+ style="stop-color:#1d1d1d;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop4754" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4350">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4352" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4354" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4126">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4128" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.16494845;"
+ offset="1.0000000"
+ id="stop4130" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4114">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4116" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4118" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3962">
+ <stop
+ style="stop-color:#d3e9ff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop3964" />
+ <stop
+ style="stop-color:#d3e9ff;stop-opacity:1.0000000;"
+ offset="0.15517241"
+ id="stop4134" />
+ <stop
+ style="stop-color:#4074ae;stop-opacity:1.0000000;"
+ offset="0.75000000"
+ id="stop4346" />
+ <stop
+ style="stop-color:#36486c;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop3966" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3962"
+ id="radialGradient3968"
+ gradientTransform="scale(0.999989,1.000011)"
+ cx="18.247644"
+ cy="15.716079"
+ fx="18.247644"
+ fy="15.716079"
+ r="29.993349"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114"
+ id="radialGradient4120"
+ gradientTransform="scale(1.643990,0.608276)"
+ cx="15.115514"
+ cy="63.965388"
+ fx="15.115514"
+ fy="63.965388"
+ r="12.289036"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4126"
+ id="radialGradient4132"
+ gradientTransform="scale(0.999989,1.000011)"
+ cx="15.601279"
+ cy="12.142302"
+ fx="15.601279"
+ fy="12.142302"
+ r="43.526714"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4350"
+ id="radialGradient4356"
+ gradientTransform="scale(1.179536,0.847791)"
+ cx="11.826907"
+ cy="10.476453"
+ fx="11.826907"
+ fy="10.476453"
+ r="32.664848"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4750"
+ id="radialGradient4756"
+ gradientTransform="scale(1.036822,0.964486)"
+ cx="18.633780"
+ cy="17.486208"
+ fx="18.934305"
+ fy="17.810213"
+ r="40.692665"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1460"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1462"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1466"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1468"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1470"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1474"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1476"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1478"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1482"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1484"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1486"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1490"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1492"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1494"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1498"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1500"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1502"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1506"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1508"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1510"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1514"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1516"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1518"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1522"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1524"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1526"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1528"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1530"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1532"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1534"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1536"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1538"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1540"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1542"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1544"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1546"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1550"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1552"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1554"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ <radialGradient
+ r="40.692665"
+ fy="17.810213"
+ fx="18.934305"
+ cy="17.486208"
+ cx="18.633780"
+ gradientTransform="scale(1.036822,0.964486)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1558"
+ xlink:href="#linearGradient4750"
+ inkscape:collect="always" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.17254902"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="25.799661"
+ inkscape:cy="24.622653"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1440"
+ inkscape:window-height="823"
+ inkscape:window-x="0"
+ inkscape:window-y="30"
+ inkscape:showpageshadow="false" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Globe</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Tuomas Kuosmanen</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ <dc:source>http://jimmac.musichall.cz</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>globe</rdf:li>
+ <rdf:li>international</rdf:li>
+ <rdf:li>web</rdf:li>
+ <rdf:li>www</rdf:li>
+ <rdf:li>internet</rdf:li>
+ <rdf:li>network</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient4120);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000"
+ id="path4112"
+ sodipodi:cx="24.849752"
+ sodipodi:cy="38.908627"
+ sodipodi:rx="20.203051"
+ sodipodi:ry="7.4751287"
+ d="M 45.052803 38.908627 A 20.203051 7.4751287 0 1 1 4.6467018,38.908627 A 20.203051 7.4751287 0 1 1 45.052803 38.908627 z"
+ transform="matrix(1.000000,0.000000,0.000000,1.243244,0.000000,-10.27241)" />
+ <path
+ style="fill:url(#radialGradient3968);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#39396c;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 43.959853,23.485499 C 43.959853,34.195217 35.277750,42.877222 24.569505,42.877222 C 13.860279,42.877222 5.1786663,34.195119 5.1786663,23.485499 C 5.1786663,12.776272 13.860279,4.0951517 24.569505,4.0951517 C 35.277750,4.0951517 43.959853,12.776272 43.959853,23.485499 L 43.959853,23.485499 z "
+ id="path3214" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.42159382;fill:url(#radialGradient4356);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000"
+ id="path4348"
+ sodipodi:cx="17.778685"
+ sodipodi:cy="15.271057"
+ sodipodi:rx="12.929953"
+ sodipodi:ry="9.2934036"
+ d="M 30.708637 15.271057 A 12.929953 9.2934036 0 1 1 4.8487320,15.271057 A 12.929953 9.2934036 0 1 1 30.708637 15.271057 z"
+ transform="matrix(0.835938,0.000000,0.000000,1.000000,9.886868,0.000000)" />
+ <g
+ id="g4136"
+ style="fill:#000000;fill-opacity:0.71345031;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
+ transform="matrix(0.982371,0.000000,0.000000,0.982371,0.121079,0.232914)">
+ <g
+ id="g4138">
+ <g
+ id="g4142">
+ <path
+ d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z "
+ id="path4144" />
+ </g>
+ </g>
+ <g
+ id="g4146">
+ <g
+ id="g4150">
+ <path
+ d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000"
+ id="path4152" />
+ </g>
+ </g>
+ <g
+ id="g4154">
+ <g
+ id="g4158">
+ <path
+ d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000"
+ id="path4160" />
+ </g>
+ </g>
+ <g
+ id="g4162">
+ <g
+ id="g4166">
+ <path
+ d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900"
+ id="path4168" />
+ </g>
+ </g>
+ <g
+ id="g4170">
+ <g
+ id="g4174">
+ <path
+ d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000"
+ id="path4176" />
+ </g>
+ </g>
+ <g
+ id="g4178">
+ <g
+ id="g4182">
+ <path
+ d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000"
+ id="path4184" />
+ </g>
+ </g>
+ <g
+ id="g4186">
+ <g
+ id="g4190">
+ <path
+ d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000"
+ id="path4192" />
+ </g>
+ </g>
+ <g
+ id="g4194">
+ <g
+ id="g4198">
+ <path
+ d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000"
+ id="path4200" />
+ </g>
+ </g>
+ <g
+ id="g4202">
+ <g
+ style="opacity:0.75000000"
+ id="g4204">
+ <path
+ id="path4206"
+ d="" />
+ </g>
+ <g
+ id="g4208">
+ <path
+ id="path4210"
+ d="" />
+ </g>
+ </g>
+ <g
+ id="g4212">
+ <g
+ style="opacity:0.75000000"
+ id="g4214">
+ <path
+ id="path4216"
+ d="" />
+ </g>
+ <g
+ id="g4218">
+ <path
+ id="path4220"
+ d="" />
+ </g>
+ </g>
+ <g
+ id="g4222">
+ <g
+ id="g4226">
+ <path
+ d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000"
+ id="path4228" />
+ </g>
+ </g>
+ <g
+ id="g4230">
+ <g
+ id="g4234">
+ <path
+ d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500"
+ id="path4236" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g3216"
+ style="color:#000000;fill:url(#radialGradient1460);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0179454;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ transform="matrix(0.982371,0.000000,0.000000,0.982371,-8.095179e-2,3.088300e-2)">
+ <g
+ id="g3218"
+ style="color:#000000;fill:url(#radialGradient1462);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3222"
+ style="color:#000000;fill:url(#radialGradient1466);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z "
+ id="path3224"
+ style="color:#000000;fill:url(#radialGradient1468);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3226"
+ style="color:#000000;fill:url(#radialGradient1470);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3230"
+ style="color:#000000;fill:url(#radialGradient1474);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000"
+ id="path3232"
+ style="color:#000000;fill:url(#radialGradient1476);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3234"
+ style="color:#000000;fill:url(#radialGradient1478);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3238"
+ style="color:#000000;fill:url(#radialGradient1482);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000"
+ id="path3240"
+ style="color:#000000;fill:url(#radialGradient1484);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3242"
+ style="color:#000000;fill:url(#radialGradient1486);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3246"
+ style="color:#000000;fill:url(#radialGradient1490);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900"
+ id="path3248"
+ style="color:#000000;fill:url(#radialGradient1492);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3250"
+ style="color:#000000;fill:url(#radialGradient1494);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3254"
+ style="color:#000000;fill:url(#radialGradient1498);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000"
+ id="path3256"
+ style="color:#000000;fill:url(#radialGradient1500);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3258"
+ style="color:#000000;fill:url(#radialGradient1502);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3262"
+ style="color:#000000;fill:url(#radialGradient1506);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000"
+ id="path3264"
+ style="color:#000000;fill:url(#radialGradient1508);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3266"
+ style="color:#000000;fill:url(#radialGradient1510);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3270"
+ style="color:#000000;fill:url(#radialGradient1514);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000"
+ id="path3272"
+ style="color:#000000;fill:url(#radialGradient1516);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3274"
+ style="color:#000000;fill:url(#radialGradient1518);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3278"
+ style="color:#000000;fill:url(#radialGradient1522);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000"
+ id="path3280"
+ style="color:#000000;fill:url(#radialGradient1524);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3282"
+ style="color:#000000;fill:url(#radialGradient1526);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient1528);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3284">
+ <path
+ d=""
+ style="color:#000000;fill:url(#radialGradient1530);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3286" />
+ </g>
+ <g
+ id="g3288"
+ style="color:#000000;fill:url(#radialGradient1532);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d=""
+ id="path3290"
+ style="color:#000000;fill:url(#radialGradient1534);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3292"
+ style="color:#000000;fill:url(#radialGradient1536);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ style="opacity:0.75000000;color:#000000;fill:url(#radialGradient1538);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="g3294">
+ <path
+ d=""
+ style="color:#000000;fill:url(#radialGradient1540);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+ id="path3296" />
+ </g>
+ <g
+ id="g3298"
+ style="color:#000000;fill:url(#radialGradient1542);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d=""
+ id="path3300"
+ style="color:#000000;fill:url(#radialGradient1544);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3302"
+ style="color:#000000;fill:url(#radialGradient1546);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3306"
+ style="color:#000000;fill:url(#radialGradient1550);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000"
+ id="path3308"
+ style="color:#000000;fill:url(#radialGradient1552);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ <g
+ id="g3310"
+ style="color:#000000;fill:url(#radialGradient1554);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <g
+ id="g3314"
+ style="color:#000000;fill:url(#radialGradient1558);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">
+ <path
+ d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500"
+ id="path3316"
+ style="color:#000000;fill:url(#radialGradient4756);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ </g>
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient4132);stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 42.975093,23.485534 C 42.975093,33.651354 34.733915,41.892440 24.569493,41.892440 C 14.404139,41.892440 6.1634261,33.651261 6.1634261,23.485534 C 6.1634261,13.320180 14.404139,5.0799340 24.569493,5.0799340 C 34.733915,5.0799340 42.975093,13.320180 42.975093,23.485534 L 42.975093,23.485534 z "
+ id="path4122" />
+ </g>
+</svg>
diff --git a/mediagoblin/media_types/video/processing.py b/mediagoblin/media_types/video/processing.py new file mode 100644 index 00000000..6125e49c --- /dev/null +++ b/mediagoblin/media_types/video/processing.py @@ -0,0 +1,118 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import tempfile +import logging +import os + +from mediagoblin import mg_globals as mgg +from mediagoblin.processing import mark_entry_failed, \ + THUMB_SIZE, MEDIUM_SIZE, create_pub_filepath +from . import transcoders + +logging.basicConfig() + +_log = logging.getLogger(__name__) +_log.setLevel(logging.DEBUG) + + +def process_video(entry): + """ + Code to process a video + + Much of this code is derived from the arista-transcoder script in + the arista PyPI package and changed to match the needs of + MediaGoblin + + This function sets up the arista video encoder in some kind of new thread + and attaches callbacks to that child process, hopefully, the + entry-complete callback will be called when the video is done. + """ + workbench = mgg.workbench_manager.create_workbench() + + queued_filepath = entry['queued_media_file'] + queued_filename = workbench.localized_file( + mgg.queue_store, queued_filepath, + 'source') + + medium_filepath = create_pub_filepath( + entry, + '{original}-640p.webm'.format( + original=os.path.splitext( + queued_filepath[-1])[0] # Select the + )) + + thumbnail_filepath = create_pub_filepath( + entry, 'thumbnail.jpg') + + + # Create a temporary file for the video destination + tmp_dst = tempfile.NamedTemporaryFile() + + with tmp_dst: + # Transcode queued file to a VP8/vorbis file that fits in a 640x640 square + transcoder = transcoders.VideoTranscoder(queued_filename, tmp_dst.name) + + # Push transcoded video to public storage + _log.debug('Saving medium...') + mgg.public_store.get_file(medium_filepath, 'wb').write( + tmp_dst.read()) + _log.debug('Saved medium') + + entry['media_files']['webm_640'] = medium_filepath + + # Save the width and height of the transcoded video + entry['media_data']['video'] = { + u'width': transcoder.dst_data.videowidth, + u'height': transcoder.dst_data.videoheight} + + # Create a temporary file for the video thumbnail + tmp_thumb = tempfile.NamedTemporaryFile() + + with tmp_thumb: + # Create a thumbnail.jpg that fits in a 180x180 square + transcoders.VideoThumbnailer(queued_filename, tmp_thumb.name) + + # Push the thumbnail to public storage + _log.debug('Saving thumbnail...') + mgg.public_store.get_file(thumbnail_filepath, 'wb').write( + tmp_thumb.read()) + _log.debug('Saved thumbnail') + + entry['media_files']['thumb'] = thumbnail_filepath + + + # Push original file to public storage + queued_file = file(queued_filename, 'rb') + + with queued_file: + original_filepath = create_pub_filepath( + entry, + queued_filepath[-1]) + + with mgg.public_store.get_file(original_filepath, 'wb') as \ + original_file: + _log.debug('Saving original...') + original_file.write(queued_file.read()) + _log.debug('Saved original') + + entry['media_files']['original'] = original_filepath + + mgg.queue_store.delete_file(queued_filepath) + + + # Save the MediaEntry + entry.save() diff --git a/mediagoblin/media_types/video/transcoders.py b/mediagoblin/media_types/video/transcoders.py new file mode 100644 index 00000000..d7ed14ca --- /dev/null +++ b/mediagoblin/media_types/video/transcoders.py @@ -0,0 +1,658 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from __future__ import division + +import os +os.putenv('GST_DEBUG_DUMP_DOT_DIR', '/tmp') + +import sys +import logging +import pdb +import urllib + +_log = logging.getLogger(__name__) +logging.basicConfig() +_log.setLevel(logging.DEBUG) + +CPU_COUNT = 2 +try: + import multiprocessing + try: + CPU_COUNT = multiprocessing.cpu_count() + except NotImplementedError: + _log.warning('multiprocessing.cpu_count not implemented') + pass +except ImportError: + _log.warning('Could not import multiprocessing, defaulting to 2 CPU cores') + pass + +try: + import gtk +except: + raise Exception('Could not find pygtk') + +try: + import gobject + gobject.threads_init() +except: + raise Exception('gobject could not be found') + +try: + import pygst + pygst.require('0.10') + import gst + from gst.extend import discoverer +except: + raise Exception('gst/pygst 0.10 could not be found') + + +class VideoThumbnailer: + # Declaration of thumbnailer states + STATE_NULL = 0 + STATE_HALTING = 1 + STATE_PROCESSING = 2 + + # The current thumbnailer state + state = STATE_NULL + + # This will contain the thumbnailing pipeline + thumbnail_pipeline = None + + buffer_probes = {} + + errors = [] + + def __init__(self, source_path, dest_path): + ''' + Set up playbin pipeline in order to get video properties. + + Initializes and runs the gobject.MainLoop() + ''' + self.source_path = source_path + self.dest_path = dest_path + + self.loop = gobject.MainLoop() + + # Set up the playbin. It will be used to discover certain + # properties of the input file + self.playbin = gst.element_factory_make('playbin') + + self.videosink = gst.element_factory_make('fakesink', 'videosink') + self.playbin.set_property('video-sink', self.videosink) + + self.audiosink = gst.element_factory_make('fakesink', 'audiosink') + self.playbin.set_property('audio-sink', self.audiosink) + + self.bus = self.playbin.get_bus() + self.bus.add_signal_watch() + self.watch_id = self.bus.connect('message', self._on_bus_message) + + self.playbin.set_property('uri', 'file:{0}'.format( + urllib.pathname2url(self.source_path))) + + self.playbin.set_state(gst.STATE_PAUSED) + + self.run() + + def run(self): + self.loop.run() + + def _on_bus_message(self, bus, message): + _log.debug(' BUS MESSAGE: {0}'.format(message)) + + if message.type == gst.MESSAGE_ERROR: + gobject.idle_add(self._on_bus_error) + + elif message.type == gst.MESSAGE_STATE_CHANGED: + # The pipeline state has changed + # Parse state changing data + _prev, state, _pending = message.parse_state_changed() + + _log.debug('State changed: {0}'.format(state)) + + if state == gst.STATE_PAUSED: + if message.src == self.playbin: + gobject.idle_add(self._on_bus_paused) + + def _on_bus_paused(self): + ''' + Set up thumbnailing pipeline + ''' + current_video = self.playbin.get_property('current-video') + + if current_video == 0: + _log.debug('Found current video from playbin') + else: + _log.error('Could not get any current video from playbin!') + + self.duration = self._get_duration(self.playbin) + _log.info('Video length: {0}'.format(self.duration / gst.SECOND)) + + _log.info('Setting up thumbnailing pipeline') + self.thumbnail_pipeline = gst.parse_launch( + 'filesrc location="{0}" ! decodebin ! ' + 'ffmpegcolorspace ! videoscale ! ' + 'video/x-raw-rgb,depth=24,bpp=24,pixel-aspect-ratio=1/1,width=180 ! ' + 'fakesink signal-handoffs=True'.format(self.source_path)) + + self.thumbnail_bus = self.thumbnail_pipeline.get_bus() + self.thumbnail_bus.add_signal_watch() + self.thumbnail_watch_id = self.thumbnail_bus.connect( + 'message', self._on_thumbnail_bus_message) + + self.thumbnail_pipeline.set_state(gst.STATE_PAUSED) + + #gobject.timeout_add(3000, self._on_timeout) + + return False + + def _on_thumbnail_bus_message(self, bus, message): + _log.debug('Thumbnail bus called, message: {0}'.format(message)) + + if message.type == gst.MESSAGE_ERROR: + _log.error(message) + gobject.idle_add(self._on_bus_error) + + if message.type == gst.MESSAGE_STATE_CHANGED: + _prev, state, _pending = message.parse_state_changed() + + if (state == gst.STATE_PAUSED and + not self.state == self.STATE_PROCESSING and + message.src == self.thumbnail_pipeline): + _log.info('Pipeline paused, processing') + self.state = self.STATE_PROCESSING + + for sink in self.thumbnail_pipeline.sinks(): + name = sink.get_name() + factoryname = sink.get_factory().get_name() + + if factoryname == 'fakesink': + sinkpad = sink.get_pad('sink') + + self.buffer_probes[name] = sinkpad.add_buffer_probe( + self.buffer_probe_handler, name) + + _log.info('Added buffer probe') + + break + + # Apply the wadsworth constant, fallback to 1 second + seek_amount = max(self.duration / 100 * 30, 1 * gst.SECOND) + + _log.debug('seek amount: {0}'.format(seek_amount)) + + seek_result = self.thumbnail_pipeline.seek( + 1.0, + gst.FORMAT_TIME, + gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_ACCURATE, + gst.SEEK_TYPE_SET, + seek_amount, + gst.SEEK_TYPE_NONE, + 0) + + if not seek_result: + self.errors.append('COULD_NOT_SEEK') + _log.error('Couldn\'t seek! result: {0}'.format( + seek_result)) + _log.info(message) + self.shutdown() + else: + pass + #self.thumbnail_pipeline.set_state(gst.STATE_PAUSED) + #pdb.set_trace() + + def buffer_probe_handler_real(self, pad, buff, name): + ''' + Capture buffers as gdk_pixbufs when told to. + ''' + try: + caps = buff.caps + if caps is None: + _log.error('No caps passed to buffer probe handler!') + self.shutdown() + return False + + _log.debug('caps: {0}'.format(caps)) + + filters = caps[0] + width = filters["width"] + height = filters["height"] + + pixbuf = gtk.gdk.pixbuf_new_from_data( + buff.data, gtk.gdk.COLORSPACE_RGB, False, 8, + width, height, width * 3) + + # NOTE: 200x136 is sort of arbitrary. it's larger than what + # the ui uses at the time of this writing. + # new_width, new_height = scaled_size((width, height), (200, 136)) + + #pixbuf = pixbuf.scale_simple( + #new_width, new_height, gtk.gdk.INTERP_BILINEAR) + + pixbuf.save(self.dest_path, 'jpeg') + _log.info('Saved thumbnail') + del pixbuf + self.shutdown() + except gst.QueryError: + pass + return False + + def buffer_probe_handler(self, pad, buff, name): + ''' + Proxy function for buffer_probe_handler_real + ''' + gobject.idle_add( + lambda: self.buffer_probe_handler_real(pad, buff, name)) + + return True + + def _get_duration(self, pipeline, retries=0): + ''' + Get the duration of a pipeline. + + Retries 5 times. + ''' + if retries == 5: + return 0 + + try: + return pipeline.query_duration(gst.FORMAT_TIME)[0] + except gst.QueryError: + return self._get_duration(pipeline, retries + 1) + + def _on_timeout(self): + _log.error('TIMEOUT! DROP EVERYTHING!') + self.shutdown() + + def _on_bus_error(self, *args): + _log.error('AHAHAHA! Error! args: {0}'.format(args)) + + def shutdown(self): + ''' + Tell gobject to call __halt when the mainloop is idle. + ''' + _log.info('Shutting down') + self.__halt() + + def __halt(self): + ''' + Halt all pipelines and shut down the main loop + ''' + _log.info('Halting...') + self.state = self.STATE_HALTING + + self.__disconnect() + + gobject.idle_add(self.__halt_final) + + def __disconnect(self): + _log.debug('Disconnecting...') + if not self.playbin is None: + self.playbin.set_state(gst.STATE_NULL) + for sink in self.playbin.sinks(): + name = sink.get_name() + factoryname = sink.get_factory().get_name() + + _log.debug('Disconnecting {0}'.format(name)) + + if factoryname == "fakesink": + pad = sink.get_pad("sink") + pad.remove_buffer_probe(self.buffer_probes[name]) + del self.buffer_probes[name] + + self.playbin = None + + if self.bus is not None: + self.bus.disconnect(self.watch_id) + self.bus = None + + + def __halt_final(self): + _log.info('Done') + if self.errors: + _log.error(','.join(self.errors)) + + self.loop.quit() + + +class VideoTranscoder: + ''' + Video transcoder + + Transcodes the SRC video file to a VP8 WebM video file at DST + + - Does the same thing as VideoThumbnailer, but produces a WebM vp8 + and vorbis video file. + - The VideoTranscoder exceeds the VideoThumbnailer in the way + that it was refined afterwards and therefore is done more + correctly. + ''' + def __init__(self, src, dst, **kwargs): + _log.info('Initializing VideoTranscoder...') + + self.loop = gobject.MainLoop() + self.source_path = src + self.destination_path = dst + + # Options + self.destination_dimensions = kwargs.get('dimensions') or (640, 640) + self._progress_callback = kwargs.get('progress_callback') or None + + if not type(self.destination_dimensions) == tuple: + raise Exception('dimensions must be tuple: (width, height)') + + self._setup() + self._run() + + def _setup(self): + self._setup_discover() + self._setup_pipeline() + + def _run(self): + _log.info('Discovering...') + self.discoverer.discover() + _log.info('Done') + + _log.debug('Initializing MainLoop()') + self.loop.run() + + def _setup_discover(self): + _log.debug('Setting up discoverer') + self.discoverer = discoverer.Discoverer(self.source_path) + + # Connect self.__discovered to the 'discovered' event + self.discoverer.connect('discovered', self.__discovered) + + def __discovered(self, data, is_media): + ''' + Callback for media discoverer. + ''' + if not is_media: + self.__stop() + raise Exception('Could not discover {0}'.format(self.source_path)) + + _log.debug('__discovered, data: {0}'.format(data.__dict__)) + + self.data = data + + # Launch things that should be done after discovery + self._link_elements() + self.__setup_videoscale_capsfilter() + + # Tell the transcoding pipeline to start running + self.pipeline.set_state(gst.STATE_PLAYING) + _log.info('Transcoding...') + + def _setup_pipeline(self): + _log.debug('Setting up transcoding pipeline') + # Create the pipeline bin. + self.pipeline = gst.Pipeline('VideoTranscoderPipeline') + + # Create all GStreamer elements, starting with + # filesrc & decoder + self.filesrc = gst.element_factory_make('filesrc', 'filesrc') + self.filesrc.set_property('location', self.source_path) + self.pipeline.add(self.filesrc) + + self.decoder = gst.element_factory_make('decodebin2', 'decoder') + self.decoder.connect('new-decoded-pad', self._on_dynamic_pad) + self.pipeline.add(self.decoder) + + # Video elements + self.videoqueue = gst.element_factory_make('queue', 'videoqueue') + self.pipeline.add(self.videoqueue) + + self.videorate = gst.element_factory_make('videorate', 'videorate') + self.pipeline.add(self.videorate) + + self.ffmpegcolorspace = gst.element_factory_make( + 'ffmpegcolorspace', 'ffmpegcolorspace') + self.pipeline.add(self.ffmpegcolorspace) + + self.videoscale = gst.element_factory_make('ffvideoscale', 'videoscale') + #self.videoscale.set_property('method', 2) # I'm not sure this works + #self.videoscale.set_property('add-borders', 0) + self.pipeline.add(self.videoscale) + + self.capsfilter = gst.element_factory_make('capsfilter', 'capsfilter') + self.pipeline.add(self.capsfilter) + + self.vp8enc = gst.element_factory_make('vp8enc', 'vp8enc') + self.vp8enc.set_property('quality', 6) + self.vp8enc.set_property('threads', 2) + self.pipeline.add(self.vp8enc) + + # Audio elements + self.audioqueue = gst.element_factory_make('queue', 'audioqueue') + self.pipeline.add(self.audioqueue) + + self.audiorate = gst.element_factory_make('audiorate', 'audiorate') + self.audiorate.set_property('tolerance', 80000000) + self.pipeline.add(self.audiorate) + + self.audioconvert = gst.element_factory_make('audioconvert', 'audioconvert') + self.pipeline.add(self.audioconvert) + + self.audiocapsfilter = gst.element_factory_make('capsfilter', 'audiocapsfilter') + audiocaps = ['audio/x-raw-float'] + self.audiocapsfilter.set_property( + 'caps', + gst.caps_from_string( + ','.join(audiocaps))) + self.pipeline.add(self.audiocapsfilter) + + self.vorbisenc = gst.element_factory_make('vorbisenc', 'vorbisenc') + self.vorbisenc.set_property('quality', 1) + self.pipeline.add(self.vorbisenc) + + # WebMmux & filesink + self.webmmux = gst.element_factory_make('webmmux', 'webmmux') + self.pipeline.add(self.webmmux) + + self.filesink = gst.element_factory_make('filesink', 'filesink') + self.filesink.set_property('location', self.destination_path) + self.pipeline.add(self.filesink) + + # Progressreport + self.progressreport = gst.element_factory_make( + 'progressreport', 'progressreport') + # Update every second + self.progressreport.set_property('update-freq', 1) + self.progressreport.set_property('silent', True) + self.pipeline.add(self.progressreport) + + def _link_elements(self): + ''' + Link all the elements + + This code depends on data from the discoverer and is called + from __discovered + ''' + _log.debug('linking elements') + # Link the filesrc element to the decoder. The decoder then emits + # 'new-decoded-pad' which links decoded src pads to either a video + # or audio sink + self.filesrc.link(self.decoder) + + # Link all the video elements in a row to webmmux + gst.element_link_many( + self.videoqueue, + self.videorate, + self.ffmpegcolorspace, + self.videoscale, + self.capsfilter, + self.vp8enc, + self.webmmux) + + if self.data.is_audio: + # Link all the audio elements in a row to webmux + gst.element_link_many( + self.audioqueue, + self.audiorate, + self.audioconvert, + self.audiocapsfilter, + self.vorbisenc, + self.webmmux) + + gst.element_link_many( + self.webmmux, + self.progressreport, + self.filesink) + + # Setup the message bus and connect _on_message to the pipeline + self._setup_bus() + + + def _on_dynamic_pad(self, dbin, pad, islast): + ''' + Callback called when ``decodebin2`` has a pad that we can connect to + ''' + # Intersect the capabilities of the video sink and the pad src + # Then check if they have no common capabilities. + if self.ffmpegcolorspace.get_pad_template('sink')\ + .get_caps().intersect(pad.get_caps()).is_empty(): + # It is NOT a video src pad. + pad.link(self.audioqueue.get_pad('sink')) + else: + # It IS a video src pad. + pad.link(self.videoqueue.get_pad('sink')) + + def _setup_bus(self): + self.bus = self.pipeline.get_bus() + self.bus.add_signal_watch() + self.bus.connect('message', self._on_message) + + def __setup_videoscale_capsfilter(self): + ''' + Sets up the output format (width, height) for the video + ''' + caps = ['video/x-raw-yuv', 'pixel-aspect-ratio=1/1', 'framerate=30/1'] + + if self.data.videoheight > self.data.videowidth: + # Whoa! We have ourselves a portrait video! + caps.append('height={0}'.format( + self.destination_dimensions[1])) + else: + # It's a landscape, phew, how normal. + caps.append('width={0}'.format( + self.destination_dimensions[0])) + + self.capsfilter.set_property( + 'caps', + gst.caps_from_string( + ','.join(caps))) + + def _on_message(self, bus, message): + _log.debug((bus, message, message.type)) + + t = message.type + + if t == gst.MESSAGE_EOS: + self._discover_dst_and_stop() + _log.info('Done') + + elif t == gst.MESSAGE_ELEMENT: + if message.structure.get_name() == 'progress': + data = dict(message.structure) + + if self._progress_callback: + self._progress_callback(data) + + _log.info('{percent}% done...'.format( + percent=data.get('percent'))) + _log.debug(data) + + elif t == gst.MESSAGE_ERROR: + _log.error((bus, message)) + self.__stop() + + def _discover_dst_and_stop(self): + self.dst_discoverer = discoverer.Discoverer(self.destination_path) + + self.dst_discoverer.connect('discovered', self.__dst_discovered) + + self.dst_discoverer.discover() + + + def __dst_discovered(self, data, is_media): + self.dst_data = data + + self.__stop() + + def __stop(self): + _log.debug(self.loop) + + # Stop executing the pipeline + self.pipeline.set_state(gst.STATE_NULL) + + # This kills the loop, mercifully + gobject.idle_add(self.__stop_mainloop) + + def __stop_mainloop(self): + ''' + Wrapper for gobject.MainLoop.quit() + + This wrapper makes us able to see if self.loop.quit has been called + ''' + _log.info('Terminating MainLoop') + + self.loop.quit() + + +if __name__ == '__main__': + os.nice(19) + from optparse import OptionParser + + parser = OptionParser( + usage='%prog [-v] -a [ video | thumbnail ] SRC DEST') + + parser.add_option('-a', '--action', + dest='action', + help='One of "video" or "thumbnail"') + + parser.add_option('-v', + dest='verbose', + action='store_true', + help='Output debug information') + + parser.add_option('-q', + dest='quiet', + action='store_true', + help='Dear program, please be quiet unless *error*') + + (options, args) = parser.parse_args() + + if options.verbose: + _log.setLevel(logging.DEBUG) + else: + _log.setLevel(logging.INFO) + + if options.quiet: + _log.setLevel(logging.ERROR) + + _log.debug(args) + + if not len(args) == 2: + parser.print_help() + sys.exit() + + if options.action == 'thumbnail': + VideoThumbnailer(*args) + elif options.action == 'video': + def cb(data): + print('I\'m a callback!') + transcoder = VideoTranscoder(*args, progress_callback=cb) diff --git a/mediagoblin/process_media/errors.py b/mediagoblin/process_media/errors.py deleted file mode 100644 index 4224a3e1..00000000 --- a/mediagoblin/process_media/errors.py +++ /dev/null @@ -1,45 +0,0 @@ -# GNU MediaGoblin -- federated, autonomous media hosting -# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -from mediagoblin.tools.translate import lazy_pass_to_ugettext as _ - - -class BaseProcessingFail(Exception): - """ - Base exception that all other processing failure messages should - subclass from. - - You shouldn't call this itself; instead you should subclass it - and provid the exception_path and general_message applicable to - this error. - """ - general_message = u'' - - @property - def exception_path(self): - return u"%s:%s" % ( - self.__class__.__module__, self.__class__.__name__) - - def __init__(self, **metadata): - self.metadata = metadata or {} - - -class BadMediaFail(BaseProcessingFail): - """ - Error that should be raised when an inappropriate file was given - for the media type specified. - """ - general_message = _(u'Invalid file given for media type.') diff --git a/mediagoblin/process_media/__init__.py b/mediagoblin/processing.py index 34d83e54..89c4ac89 100644 --- a/mediagoblin/process_media/__init__.py +++ b/mediagoblin/processing.py @@ -14,15 +14,14 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -import os - -import Image from celery.task import Task -from celery import registry from mediagoblin.db.util import ObjectId from mediagoblin import mg_globals as mgg -from mediagoblin.process_media.errors import BaseProcessingFail, BadMediaFail + +from mediagoblin.tools.translate import lazy_pass_to_ugettext as _ + +from mediagoblin.media_types import get_media_manager THUMB_SIZE = 180, 180 @@ -42,6 +41,8 @@ def create_pub_filepath(entry, filename): class ProcessMedia(Task): """ + DEPRECATED -- This now resides in the individual media plugins + Pass this entry off for processing. """ def run(self, media_id): @@ -54,10 +55,14 @@ class ProcessMedia(Task): # Try to process, and handle expected errors. try: - process_image(entry) + #__import__(entry['media_type']) + manager = get_media_manager(entry['media_type']) + manager['processor'](entry) except BaseProcessingFail, exc: mark_entry_failed(entry._id, exc) return + except ImportError, exc: + mark_entry_failed(entry[u'_id'], exc) entry['state'] = u'processed' entry.save() @@ -75,9 +80,6 @@ class ProcessMedia(Task): mark_entry_failed(entry_id, exc) -process_media = registry.tasks[ProcessMedia.name] - - def mark_entry_failed(entry_id, exc): """ Mark a media entry as having failed in its conversion. @@ -113,66 +115,29 @@ def mark_entry_failed(entry_id, exc): u'fail_metadata': {}}}) -def process_image(entry): - """ - Code to process an image +class BaseProcessingFail(Exception): """ - workbench = mgg.workbench_manager.create_workbench() - - queued_filepath = entry['queued_media_file'] - queued_filename = workbench.localized_file( - mgg.queue_store, queued_filepath, - 'source') - - extension = os.path.splitext(queued_filename)[1] - - try: - thumb = Image.open(queued_filename) - except IOError: - raise BadMediaFail() + Base exception that all other processing failure messages should + subclass from. - thumb.thumbnail(THUMB_SIZE, Image.ANTIALIAS) - - thumb_filepath = create_pub_filepath(entry, 'thumbnail' + extension) - thumb_file = mgg.public_store.get_file(thumb_filepath, 'w') - - with thumb_file: - thumb.save(thumb_file) - - # If the size of the original file exceeds the specified size of a `medium` - # file, a `medium.jpg` files is created and later associated with the media - # entry. - medium = Image.open(queued_filename) - medium_processed = False - - if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1]: - medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS) - - medium_filepath = create_pub_filepath(entry, 'medium' + extension) - medium_file = mgg.public_store.get_file(medium_filepath, 'w') - - with medium_file: - medium.save(medium_file) - medium_processed = True - - # we have to re-read because unlike PIL, not everything reads - # things in string representation :) - queued_file = file(queued_filename, 'rb') + You shouldn't call this itself; instead you should subclass it + and provid the exception_path and general_message applicable to + this error. + """ + general_message = u'' - with queued_file: - original_filepath = create_pub_filepath(entry, queued_filepath[-1]) + @property + def exception_path(self): + return u"%s:%s" % ( + self.__class__.__module__, self.__class__.__name__) - with mgg.public_store.get_file(original_filepath, 'wb') \ - as original_file: - original_file.write(queued_file.read()) + def __init__(self, **metadata): + self.metadata = metadata or {} - mgg.queue_store.delete_file(queued_filepath) - entry['queued_media_file'] = [] - media_files_dict = entry.setdefault('media_files', {}) - media_files_dict['thumb'] = thumb_filepath - media_files_dict['original'] = original_filepath - if medium_processed: - media_files_dict['medium'] = medium_filepath - # clean up workbench - workbench.destroy_self() +class BadMediaFail(BaseProcessingFail): + """ + Error that should be raised when an inappropriate file was given + for the media type specified. + """ + general_message = _(u'Invalid file given for media type.') diff --git a/mediagoblin/static/css/base.css b/mediagoblin/static/css/base.css index a7b659c3..961a51fc 100644 --- a/mediagoblin/static/css/base.css +++ b/mediagoblin/static/css/base.css @@ -98,30 +98,6 @@ a.mediagoblin_logo{ font-weight: bold; } -.header_submit, .header_submit_highlight{ - color: #272727; - background-color: #aaa; - background-image: -webkit-gradient(linear, left top, left bottom, from(##D2D2D2), to(#aaa)); - background-image: -webkit-linear-gradient(top, #D2D2D2, #aaa); - background-image: -moz-linear-gradient(top, #D2D2D2, #aaa); - background-image: -ms-linear-gradient(top, #D2D2D2, #aaa); - background-image: -o-linear-gradient(top, #D2D2D2, #aaa); - background-image: linear-gradient(top, #D2D2D2, #aaa); - box-shadow: 0px 0px 4px #000; - border-radius: 3px; - margin: 8px; - padding: 3px 8px; - text-decoration: none; - border: medium none; - font-style: normal; - font-weight: bold; - font-size: 1em; -} - -.header_submit_highlight{ -background-image: -moz-linear-gradient(center top , rgb(134, 212, 177), rgb(109, 173, 144)); -} - .mediagoblin_footer { height: 30px; border-top: 1px solid #333; @@ -141,7 +117,29 @@ background-image: -moz-linear-gradient(center top , rgb(134, 212, 177), rgb(109, /* common website elements */ -.button, .cancel_link { +.button_action, .button_action_highlight{ + color: #c3c3c3; + background-color: #363636; + border: 1px solid; + border-color: #464646 #2B2B2B #252525; + border-radius: 4px; + margin: 8px; + padding: 3px 8px; + text-decoration: none; + font-style: normal; + font-weight: bold; + font-size: 1em; + display: inline-block; +} + +.button_action_highlight{ + background-color: #86D4B1; + border-color: #A2DEC3 #6CAA8E #5C9179; + color: #283F35; +} + + +.button_form, .cancel_link { height: 32px; min-width: 99px; background-color: #86d4b1; @@ -183,7 +181,7 @@ text-align: center; } .empty_space{ - background-color: #222; + background-image: url("../images/empty_back.png"); font-style: italic; text-align: center; height: 160px; @@ -301,17 +299,13 @@ img.media_icon{ background-color: #1d1d1d; border: 1px solid; border-color: #2c2c2c #232323 #1a1a1a; - border-radius: 3px; + border-radius: 4px; text-decoration: none; - padding: 8px 0px 14px; - font-size: 2em; + padding: 12px 0 16px; + font-size: 1.4em; margin: 0 0 20px } -p.navigation_button{ - color: #272727; -} - .navigation_left{ margin-right: 6px; } diff --git a/mediagoblin/static/images/empty_back.png b/mediagoblin/static/images/empty_back.png Binary files differnew file mode 100644 index 00000000..3522ddd3 --- /dev/null +++ b/mediagoblin/static/images/empty_back.png diff --git a/mediagoblin/static/images/icon_delete.png b/mediagoblin/static/images/icon_delete.png Binary files differdeleted file mode 100644 index 9d76a5db..00000000 --- a/mediagoblin/static/images/icon_delete.png +++ /dev/null diff --git a/mediagoblin/static/images/icon_edit.png b/mediagoblin/static/images/icon_edit.png Binary files differdeleted file mode 100644 index 480c73ad..00000000 --- a/mediagoblin/static/images/icon_edit.png +++ /dev/null diff --git a/mediagoblin/static/images/media_thumbs/video.jpg b/mediagoblin/static/images/media_thumbs/video.jpg Binary files differnew file mode 100644 index 00000000..841dc796 --- /dev/null +++ b/mediagoblin/static/images/media_thumbs/video.jpg diff --git a/mediagoblin/static/images/navigation_end.png b/mediagoblin/static/images/navigation_end.png Binary files differdeleted file mode 100644 index b2f27296..00000000 --- a/mediagoblin/static/images/navigation_end.png +++ /dev/null diff --git a/mediagoblin/static/images/navigation_left.png b/mediagoblin/static/images/navigation_left.png Binary files differdeleted file mode 100644 index d1645120..00000000 --- a/mediagoblin/static/images/navigation_left.png +++ /dev/null diff --git a/mediagoblin/static/images/navigation_right.png b/mediagoblin/static/images/navigation_right.png Binary files differdeleted file mode 100644 index d4caa7b8..00000000 --- a/mediagoblin/static/images/navigation_right.png +++ /dev/null diff --git a/mediagoblin/storage/__init__.py b/mediagoblin/storage/__init__.py index 9e592b9e..0840614b 100644 --- a/mediagoblin/storage/__init__.py +++ b/mediagoblin/storage/__init__.py @@ -169,6 +169,18 @@ class StorageInterface(object): with file(dest_path, 'wb') as dest_file: dest_file.write(source_file.read()) + def copy_local_to_storage(self, filename, filepath): + """ + Copy this file from locally to the storage system. + + This is kind of the opposite of copy_locally. It's likely you + could override this method with something more appropriate to + your storage system. + """ + with self.get_file(filepath, 'wb') as dest_file: + with file(filename, 'rb') as source_file: + dest_file.write(source_file.read()) + ########### # Utilities diff --git a/mediagoblin/storage/cloudfiles.py b/mediagoblin/storage/cloudfiles.py index 0d3cc3df..51b73579 100644 --- a/mediagoblin/storage/cloudfiles.py +++ b/mediagoblin/storage/cloudfiles.py @@ -98,8 +98,14 @@ class CloudFilesStorage(StorageInterface): def delete_file(self, filepath): # TODO: Also delete unused directories if empty (safely, with # checks to avoid race conditions). - self.container.delete_object( - self._resolve_filepath(filepath)) + try: + self.container.delete_object( + self._resolve_filepath(filepath)) + except cloudfiles.container.ResponseError: + pass + finally: + pass + def file_url(self, filepath): return '/'.join([ diff --git a/mediagoblin/storage/filestorage.py b/mediagoblin/storage/filestorage.py index 22d6eb5a..a904865f 100644 --- a/mediagoblin/storage/filestorage.py +++ b/mediagoblin/storage/filestorage.py @@ -20,6 +20,7 @@ from mediagoblin.storage import ( NoWebServing) import os +import shutil import urlparse @@ -76,3 +77,16 @@ class BasicFileStorage(StorageInterface): def get_local_path(self, filepath): return self._resolve_filepath(filepath) + + def copy_local_to_storage(self, filename, filepath): + """ + Copy this file from locally to the storage system. + """ + # Make directories if necessary + if len(filepath) > 1: + directory = self._resolve_filepath(filepath[:-1]) + if not os.path.exists(directory): + os.makedirs(directory) + + shutil.copy( + filename, self.get_local_path(filepath)) diff --git a/mediagoblin/submit/forms.py b/mediagoblin/submit/forms.py index 25d6e304..ad420771 100644 --- a/mediagoblin/submit/forms.py +++ b/mediagoblin/submit/forms.py @@ -30,4 +30,6 @@ class SubmitStartForm(wtforms.Form): _('Description of this work')) tags = wtforms.TextField( _('Tags'), - [tag_length_validator]) + [tag_length_validator], + description=_( + "Seperate tags by commas.")) diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py index 139b1d1d..3def44ce 100644 --- a/mediagoblin/submit/views.py +++ b/mediagoblin/submit/views.py @@ -19,6 +19,8 @@ import uuid from os.path import splitext from cgi import FieldStorage +from celery import registry + from werkzeug.utils import secure_filename from mediagoblin.db.util import ObjectId @@ -27,8 +29,9 @@ from mediagoblin.tools.translate import pass_to_ugettext as _ from mediagoblin.tools.response import render_to_response, redirect from mediagoblin.decorators import require_active_login from mediagoblin.submit import forms as submit_forms, security -from mediagoblin.process_media import process_media, mark_entry_failed +from mediagoblin.processing import mark_entry_failed, ProcessMedia from mediagoblin.messages import add_message, SUCCESS +from mediagoblin.media_types import get_media_type_and_manager, InvalidFileType @require_active_login @@ -44,86 +47,90 @@ def submit_start(request): and request.POST['file'].file): submit_form.file.errors.append( _(u'You must provide a file.')) - elif not security.check_filetype(request.POST['file']): - submit_form.file.errors.append( - _(u"The file doesn't seem to be an image!")) else: - filename = request.POST['file'].filename + try: + filename = request.POST['file'].filename + media_type, media_manager = get_media_type_and_manager(filename) - # create entry and save in database - entry = request.db.MediaEntry() - entry['_id'] = ObjectId() - entry['title'] = ( - unicode(request.POST['title']) - or unicode(splitext(filename)[0])) + # create entry and save in database + entry = request.db.MediaEntry() + entry['_id'] = ObjectId() + entry['media_type'] = unicode(media_type) + entry['title'] = ( + unicode(request.POST['title']) + or unicode(splitext(filename)[0])) - entry['description'] = unicode(request.POST.get('description')) - entry['description_html'] = cleaned_markdown_conversion( - entry['description']) + entry['description'] = unicode(request.POST.get('description')) + entry['description_html'] = cleaned_markdown_conversion( + entry['description']) - entry['media_type'] = u'image' # heh - entry['uploader'] = request.user._id + entry['uploader'] = request.user['_id'] - # Process the user's folksonomy "tags" - entry['tags'] = convert_to_tag_list_of_dicts( - request.POST.get('tags')) + # Process the user's folksonomy "tags" + entry['tags'] = convert_to_tag_list_of_dicts( + request.POST.get('tags')) - # Generate a slug from the title - entry.generate_slug() + # Generate a slug from the title + entry.generate_slug() - # Now store generate the queueing related filename - queue_filepath = request.app.queue_store.get_unique_filepath( - ['media_entries', - unicode(entry._id), - secure_filename(filename)]) - # queue appropriately - queue_file = request.app.queue_store.get_file( - queue_filepath, 'wb') + # Now store generate the queueing related filename + queue_filepath = request.app.queue_store.get_unique_filepath( + ['media_entries', + unicode(entry._id), + secure_filename(filename)]) - with queue_file: - queue_file.write(request.POST['file'].file.read()) + # queue appropriately + queue_file = request.app.queue_store.get_file( + queue_filepath, 'wb') - # Add queued filename to the entry - entry['queued_media_file'] = queue_filepath + with queue_file: + queue_file.write(request.POST['file'].file.read()) - # We generate this ourselves so we know what the taks id is for - # retrieval later. + # Add queued filename to the entry + entry['queued_media_file'] = queue_filepath - # (If we got it off the task's auto-generation, there'd be - # a risk of a race condition when we'd save after sending - # off the task) - task_id = unicode(uuid.uuid4()) - entry['queued_task_id'] = task_id + # We generate this ourselves so we know what the taks id is for + # retrieval later. - # Save now so we have this data before kicking off processing - entry.save(validate=True) + # (If we got it off the task's auto-generation, there'd be + # a risk of a race condition when we'd save after sending + # off the task) + task_id = unicode(uuid.uuid4()) + entry['queued_task_id'] = task_id - # Pass off to processing - # - # (... don't change entry after this point to avoid race - # conditions with changes to the document via processing code) - try: - process_media.apply_async( - [unicode(entry._id)], {}, - task_id=task_id) - except BaseException as exc: - # The purpose of this section is because when running in "lazy" - # or always-eager-with-exceptions-propagated celery mode that - # the failure handling won't happen on Celery end. Since we - # expect a lot of users to run things in this way we have to - # capture stuff here. - # - # ... not completely the diaper pattern because the - # exception is re-raised :) - mark_entry_failed(entry._id, exc) - # re-raise the exception - raise - - add_message(request, SUCCESS, _('Woohoo! Submitted!')) + # Save now so we have this data before kicking off processing + entry.save(validate=True) - return redirect(request, "mediagoblin.user_pages.user_home", - user=request.user['username']) + # Pass off to processing + # + # (... don't change entry after this point to avoid race + # conditions with changes to the document via processing code) + process_media = registry.tasks[ProcessMedia.name] + try: + process_media.apply_async( + [unicode(entry._id)], {}, + task_id=task_id) + except BaseException as exc: + # The purpose of this section is because when running in "lazy" + # or always-eager-with-exceptions-propagated celery mode that + # the failure handling won't happen on Celery end. Since we + # expect a lot of users to run things in this way we have to + # capture stuff here. + # + # ... not completely the diaper pattern because the + # exception is re-raised :) + mark_entry_failed(entry._id, exc) + # re-raise the exception + raise + + add_message(request, SUCCESS, _('Woohoo! Submitted!')) + + return redirect(request, "mediagoblin.user_pages.user_home", + user=request.user['username']) + except InvalidFileType, exc: + submit_form.file.errors.append( + _(u'Invalid file type.')) return render_to_response( request, diff --git a/mediagoblin/templates/mediagoblin/auth/change_fp.html b/mediagoblin/templates/mediagoblin/auth/change_fp.html index 53186cec..5677949c 100644 --- a/mediagoblin/templates/mediagoblin/auth/change_fp.html +++ b/mediagoblin/templates/mediagoblin/auth/change_fp.html @@ -30,7 +30,7 @@ {{ wtforms_util.render_divs(cp_form) }} <div class="form_submit_buttons"> - <input type="submit" value="submit" class="button"/> + <input type="submit" value="{% trans %}Submit{% endtrans %}" class="button_form"/> </div> </div> diff --git a/mediagoblin/templates/mediagoblin/auth/forgot_password.html b/mediagoblin/templates/mediagoblin/auth/forgot_password.html index 9b821426..41940742 100644 --- a/mediagoblin/templates/mediagoblin/auth/forgot_password.html +++ b/mediagoblin/templates/mediagoblin/auth/forgot_password.html @@ -27,7 +27,7 @@ <h1>{% trans %}Recover password{% endtrans %}</h1> {{ wtforms_util.render_divs(fp_form) }} <div class="form_submit_buttons"> - <input type="submit" value="{% trans %}Send instructions{% endtrans %}" class="button"/> + <input type="submit" value="{% trans %}Send instructions{% endtrans %}" class="button_form"/> </div> </div> </form> diff --git a/mediagoblin/templates/mediagoblin/auth/login.html b/mediagoblin/templates/mediagoblin/auth/login.html index 756f67c0..c3807e5f 100644 --- a/mediagoblin/templates/mediagoblin/auth/login.html +++ b/mediagoblin/templates/mediagoblin/auth/login.html @@ -42,10 +42,10 @@ {% trans %}Forgot your password?{% endtrans %}</a> </p> <div class="form_submit_buttons"> - <input type="submit" value="{% trans %}Log in{% endtrans %}" class="button"/> + <input type="submit" value="{% trans %}Log in{% endtrans %}" class="button_form"/> </div> {% if next %} - <input type="hidden" name="next" value="{{ next }}" class="button" + <input type="hidden" name="next" value="{{ next }}" class="button_form" style="display: none;"/> {% endif %} </div> diff --git a/mediagoblin/templates/mediagoblin/auth/register.html b/mediagoblin/templates/mediagoblin/auth/register.html index 25b68058..a0d0a277 100644 --- a/mediagoblin/templates/mediagoblin/auth/register.html +++ b/mediagoblin/templates/mediagoblin/auth/register.html @@ -29,7 +29,7 @@ {{ csrf_token }} <div class="form_submit_buttons"> <input type="submit" value="{% trans %}Create{% endtrans %}" - class="button" /> + class="button_form" /> </div> </div> </form> diff --git a/mediagoblin/templates/mediagoblin/base.html b/mediagoblin/templates/mediagoblin/base.html index 64fafb73..29639026 100644 --- a/mediagoblin/templates/mediagoblin/base.html +++ b/mediagoblin/templates/mediagoblin/base.html @@ -28,6 +28,8 @@ href="{{ request.staticdirect('/css/extlib/960_16_col.css') }}"/> <link rel="stylesheet" type="text/css" href="{{ request.staticdirect('/css/base.css') }}"/> + <link rel="stylesheet" type="text/css" + href="{{ request.staticdirect('/css/video-js.css') }}"/> <link rel="shortcut icon" href="{{ request.staticdirect('/images/goblin.ico') }}" /> {% block mediagoblin_head %} @@ -47,7 +49,7 @@ alt="{% trans %}MediaGoblin logo{% endtrans %}" /></a> {% endblock %} {% if request.user and request.user['status'] == 'active' %} - <a class="header_submit" + <a class="button_action" href="{{ request.urlgen('mediagoblin.submit.start') }}"> {% trans %}Submit media{% endtrans %} </a> @@ -59,8 +61,8 @@ {% if request.user.status == "needs_email_verification" %} <a href="{{ request.urlgen('mediagoblin.user_pages.user_home', user=request.user['username']) }}" - class="header_submit"> - {% trans %}verify your email!{% endtrans %}</a> + class="button_action_highlight"> + {% trans %}Verify your email!{% endtrans %}</a> {% endif %} <a href="{{ request.urlgen('mediagoblin.user_pages.user_home', diff --git a/mediagoblin/templates/mediagoblin/edit/attachments.html b/mediagoblin/templates/mediagoblin/edit/attachments.html index d8b55f58..6a5ab896 100644 --- a/mediagoblin/templates/mediagoblin/edit/attachments.html +++ b/mediagoblin/templates/mediagoblin/edit/attachments.html @@ -20,7 +20,7 @@ {% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} {% block mediagoblin_content %} <form action="{{ request.urlgen('mediagoblin.edit.attachments', - user= media.uploader().username, + user= media.get_uploader().username, media= media._id) }}" method="POST" enctype="multipart/form-data"> <div class="grid_8 prefix_1 suffix_1 edit_box form_box"> @@ -48,7 +48,7 @@ {{ wtforms_util.render_divs(form) }} <div class="form_submit_buttons"> <a href="{{ media.url_for_self(request.urlgen) }}">Cancel</a> - <input type="submit" value="Save changes" class="button" /> + <input type="submit" value="Save changes" class="button_form" /> {{ csrf_token }} </div> </div> diff --git a/mediagoblin/templates/mediagoblin/edit/edit.html b/mediagoblin/templates/mediagoblin/edit/edit.html index b4b3be85..aa46af3d 100644 --- a/mediagoblin/templates/mediagoblin/edit/edit.html +++ b/mediagoblin/templates/mediagoblin/edit/edit.html @@ -22,7 +22,7 @@ {% block mediagoblin_content %} <form action="{{ request.urlgen('mediagoblin.edit.edit_media', - user= media.uploader().username, + user= media.get_uploader().username, media= media._id) }}" method="POST" enctype="multipart/form-data"> <div class="grid_8 prefix_1 suffix_1 edit_box form_box"> @@ -34,7 +34,7 @@ {{ wtforms_util.render_divs(form) }} <div class="form_submit_buttons"> <a href="{{ media.url_for_self(request.urlgen) }}">{% trans %}Cancel{% endtrans %}</a> - <input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button" /> + <input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button_form" /> {{ csrf_token }} </div> </div> diff --git a/mediagoblin/templates/mediagoblin/edit/edit_profile.html b/mediagoblin/templates/mediagoblin/edit/edit_profile.html index 93b2a792..bf8fe5c1 100644 --- a/mediagoblin/templates/mediagoblin/edit/edit_profile.html +++ b/mediagoblin/templates/mediagoblin/edit/edit_profile.html @@ -32,7 +32,7 @@ </h1> {{ wtforms_util.render_divs(form) }} <div class="form_submit_buttons"> - <input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button" /> + <input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button_form" /> {{ csrf_token }} </div> </div> diff --git a/mediagoblin/templates/mediagoblin/media_displays/image.html b/mediagoblin/templates/mediagoblin/media_displays/image.html new file mode 100644 index 00000000..ad60fa94 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/media_displays/image.html @@ -0,0 +1 @@ +{% extends 'mediagoblin/user_pages/media.html' %} diff --git a/mediagoblin/templates/mediagoblin/media_displays/video.html b/mediagoblin/templates/mediagoblin/media_displays/video.html new file mode 100644 index 00000000..5b8ec789 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/media_displays/video.html @@ -0,0 +1,25 @@ +{% extends 'mediagoblin/user_pages/media.html' %} +{% block mediagoblin_media %} + <div class="video-player" style="position: relative;"> + <video class="video-js vjs-default-skin" + width="{{ media.media_data.video.width }}" + height="{{ media.media_data.video.height }}" + controls="controls" + preload="auto" + data-setup=""> + <source src="{{ request.app.public_store.file_url( + media['media_files']['webm_640']) }}" + type="video/webm; codecs="vp8, vorbis"" /> + </video> + </div> + {% if 'original' in media.media_files %} + <p> + <a href="{{ request.app.public_store.file_url( + media['media_files']['original']) }}"> + {%- trans -%} + Original + {%- endtrans -%} + </a> + </p> + {% endif %} +{% endblock %} diff --git a/mediagoblin/templates/mediagoblin/root.html b/mediagoblin/templates/mediagoblin/root.html index 43d973d1..0f769f2f 100644 --- a/mediagoblin/templates/mediagoblin/root.html +++ b/mediagoblin/templates/mediagoblin/root.html @@ -25,14 +25,14 @@ {% else %} <div class="grid_11 alpha"> <h1>{% trans %}Hi there, welcome to this MediaGoblin site!{% endtrans %}</h1> - <p>{% trans %}Your finest source for all goblin-related media.{% endtrans %}</p> + <p>{% trans %}This site is running <a href="http://mediagoblin.org">MediaGoblin</a>, an extraordinarily great piece of media hosting software.{% endtrans %}</p> <p>{% trans %}To add your own media, place comments, save your favourites and more, you can log in with your MediaGoblin account.{% endtrans %}</p> {% if allow_registration %} <p>{% trans %}Don't have one yet? It's easy!{% endtrans %}</p> {% trans register_url=request.urlgen('mediagoblin.auth.register') -%} - <a class="header_submit_highlight" href="{{ register_url }}">Create an account at this site</a> + <a class="button_action_highlight" href="{{ register_url }}">Create an account at this site</a> or - <a class="header_submit" href="http://wiki.mediagoblin.org/HackingHowto">Set up MediaGoblin on your own server</a> + <a class="button_action" href="http://wiki.mediagoblin.org/HackingHowto">Set up MediaGoblin on your own server</a> {%- endtrans %} {% endif %} </div> diff --git a/mediagoblin/templates/mediagoblin/submit/start.html b/mediagoblin/templates/mediagoblin/submit/start.html index 29b01181..1a0dd4b7 100644 --- a/mediagoblin/templates/mediagoblin/submit/start.html +++ b/mediagoblin/templates/mediagoblin/submit/start.html @@ -27,7 +27,7 @@ {{ wtforms_util.render_divs(submit_form) }} <div class="form_submit_buttons"> {{ csrf_token }} - <input type="submit" value="{% trans %}Submit{% endtrans %}" class="button" /> + <input type="submit" value="{% trans %}Submit{% endtrans %}" class="button_form" /> </div> </div> </form> diff --git a/mediagoblin/templates/mediagoblin/test_submit.html b/mediagoblin/templates/mediagoblin/test_submit.html index 190b9ac3..38be8efc 100644 --- a/mediagoblin/templates/mediagoblin/test_submit.html +++ b/mediagoblin/templates/mediagoblin/test_submit.html @@ -25,7 +25,7 @@ {{ wtforms_util.render_table(image_form) }} <tr> <td></td> - <td><input type="submit" value="submit" class="button" /></td> + <td><input type="submit" value="submit" class="button_form" /></td> {{ csrf_token }} </tr> </table> diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html index de5db815..c7818012 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/media.html +++ b/mediagoblin/templates/mediagoblin/user_pages/media.html @@ -23,9 +23,9 @@ {% block title %}{{ media.title }} — {{ super() }}{% endblock %} {% block mediagoblin_content %} - {% if media %} - <div class="grid_11 alpha"> - <div class="media_image_container"> + <div class="grid_11 alpha"> + <div class="media_image_container"> + {% block mediagoblin_media %} {% set display_media = request.app.public_store.file_url( media.get_display_media(media.media_files)) %} @@ -44,127 +44,118 @@ src="{{ display_media }}" alt="Image for {{ media.title }}" /> {% endif %} - </div> + {% endblock %} + </div> - <h2 class="media_title"> - {{ media.title }} - </h2> - {% autoescape False %} - <p>{{ media.description_html }}</p> - {% endautoescape %} - <p class="media_uploader"> - {% trans date=media.created.strftime("%Y-%m-%d"), - user_url=request.urlgen( - 'mediagoblin.user_pages.user_home', - user=media.uploader().username), - username=media.uploader().username -%} - By <a href="{{ user_url }}">{{ username }}</a> on {{ date }} - {%- endtrans %} - </p> - <h3></h3> - {% if request.user and comments.count() %} - <p><a href="#comment_form">{% trans %}Post a comment{% endtrans %}</a></p> - {% endif %} - {% if comments %} - {% for comment in comments %} - {% set comment_author = comment.author() %} - {% if pagination.active_id == comment._id %} - <div class="comment_wrapper comment_active" id="comment-{{ comment._id }}"> - <a name="comment" id="comment"></a> - {% else %} - <div class="comment_wrapper" id="comment-{{ comment._id }}"> - {% endif %} + <h2 class="media_title"> + {{ media.title }} + </h2> + {% autoescape False %} + <p>{{ media.description_html }}</p> + {% endautoescape %} + <p class="media_uploader"> + {% trans date=media.created.strftime("%Y-%m-%d"), + user_url=request.urlgen( + 'mediagoblin.user_pages.user_home', + user=media.get_uploader().username), + username=media.get_uploader().username -%} + By <a href="{{ user_url }}">{{ username }}</a> on {{ date }} + {%- endtrans %} + </p> + <h3></h3> + {% if request.user and comments.count() %} + <p><a href="#comment_form">{% trans %}Post a comment{% endtrans %}</a></p> + {% endif %} + {% if comments %} + {% for comment in comments %} + {% set comment_author = comment.author() %} + {% if pagination.active_id == comment._id %} + <div class="comment_wrapper comment_active" id="comment-{{ comment._id }}"> + <a name="comment" id="comment"></a> + {% else %} + <div class="comment_wrapper" id="comment-{{ comment._id }}"> + {% endif %} - <div class="comment_content">{% autoescape False %}{{ comment.content_html }} - {% endautoescape %} - <img src="{{ request.staticdirect('/images/icon_comment.png') }}" /> - <a href="{{ request.urlgen('mediagoblin.user_pages.user_home', - user = comment_author['username']) }}"> - {{ comment_author['username'] }}</a> - {% trans %}at{% endtrans %} - <a href="{{ request.urlgen('mediagoblin.user_pages.media_home.view_comment', - comment = comment._id, - user = media.uploader().username, - media = media._id) }}#comment"> - {{ comment.created.strftime("%I:%M%p %Y-%m-%d") }} - </a> - </div> + <div class="comment_content">{% autoescape False %}{{ comment.content_html }} + {% endautoescape %} + <img src="{{ request.staticdirect('/images/icon_comment.png') }}" /> + <a href="{{ request.urlgen('mediagoblin.user_pages.user_home', + user = comment_author['username']) }}"> + {{ comment_author['username'] }}</a> + {% trans %}at{% endtrans %} + <a href="{{ request.urlgen('mediagoblin.user_pages.media_home.view_comment', + comment = comment._id, + user = media.get_uploader().username, + media = media._id) }}#comment"> + {{ comment.created.strftime("%I:%M%p %Y-%m-%d") }} + </a> </div> - {% endfor %} + </div> + {% endfor %} - {% if request.user %} - <form action="{{ request.urlgen('mediagoblin.user_pages.media_post_comment', - user= media.uploader().username, - media=media._id) }}" method="POST"> - {{ wtforms_util.render_divs(comment_form) }} - <div class="form_submit_buttons"> - <input type="submit" value="{% trans %}Post comment!{% endtrans %}" class="button" /> - {{ csrf_token }} - </div> - </form> - {% endif %} + {% if request.user %} + <form action="{{ request.urlgen('mediagoblin.user_pages.media_post_comment', + user= media.get_uploader().username, + media=media._id) }}" method="POST"> + {{ wtforms_util.render_divs(comment_form) }} + <div class="form_submit_buttons"> + <input type="submit" value="{% trans %}Post comment!{% endtrans %}" class="button_form" /> + {{ csrf_token }} + </div> + </form> + {% endif %} - {{ render_pagination(request, pagination, - request.urlgen('mediagoblin.user_pages.media_home', - user = media.uploader().username, - media = media._id)) }} - </div> - {% endif %} + {{ render_pagination(request, pagination, + request.urlgen('mediagoblin.user_pages.media_home', + user = media.get_uploader().username, + media = media._id)) }} + </div> + {% endif %} - <div class="grid_5 omega"> - {% include "mediagoblin/utils/prev_next.html" %} + <div class="grid_5 omega"> + {% include "mediagoblin/utils/prev_next.html" %} - {% if media['uploader'] == request.user._id or - request.user['is_admin'] %} - <h3>{% trans %}Actions{% endtrans %}</h3> - <p> - {% set edit_url = request.urlgen('mediagoblin.edit.edit_media', - user= media.uploader().username, - media= media.slug) %} - <a href="{{ edit_url }}" - ><img src="{{ request.staticdirect('/images/icon_edit.png') }}" - class="media_icon" /></a> - <a href="{{ edit_url }}">{% trans %}edit{% endtrans %}</a> - </p> - <p> - {% set delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete', - user= media.uploader().username, - media= media.slug) %} - <a href="{{ delete_url }}" - ><img src="{{ request.staticdirect('/images/icon_delete.png') }}" - class="media_icon" /></a> - <a href="{{ delete_url }}">{% trans %}delete{% endtrans %}</a> - </p> - {% endif %} + {% if media['uploader'] == request.user._id or + request.user['is_admin'] %} + <p> + {% set edit_url = request.urlgen('mediagoblin.edit.edit_media', + user= media.get_uploader().username, + media= media.slug) %} + <a href="{{ edit_url }}">{% trans %}Edit{% endtrans %}</a> + </p> + <p> + {% set delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete', + user= media.get_uploader().username, + media= media.slug) %} + <a href="{{ delete_url }}">{% trans %}Delete{% endtrans %}</a> + </p> + {% endif %} - {% if media.attachment_files|count %} - <h3>Attachments</h3> - <ul> - {% for attachment in media.attachment_files %} - <li> - <a href="{{ request.app.public_store.file_url(attachment.filepath) }}"> - {{ attachment.name }} - </a> - </li> - {% endfor %} - </ul> - {% endif %} + {% if media.attachment_files|count %} + <h3>Attachments</h3> + <ul> + {% for attachment in media.attachment_files %} + <li> + <a href="{{ request.app.public_store.file_url(attachment.filepath) }}"> + {{ attachment.name }} + </a> + </li> + {% endfor %} + </ul> + {% endif %} - {% if app_config['allow_attachments'] - and (media['uploader'] == request.user._id - or request.user['is_admin']) %} - <p> - <a href="{{ request.urlgen('mediagoblin.edit.attachments', - user=media.uploader().username, - media=media._id) }}">Add attachment</a> - </p> - {% endif %} + {% if app_config['allow_attachments'] + and (media['uploader'] == request.user._id + or request.user['is_admin']) %} + <p> + <a href="{{ request.urlgen('mediagoblin.edit.attachments', + user=media.get_uploader().username, + media=media._id) }}">Add attachment</a> + </p> + {% endif %} - {% if media.tags %} - {% include "mediagoblin/utils/tags.html" %} - {% endif %} - </div> - {% else %} - <p>{% trans %}Sorry, no such media found.{% endtrans %}<p/> - {% endif %} + {% if media.tags %} + {% include "mediagoblin/utils/tags.html" %} + {% endif %} + </div> {% endblock %} diff --git a/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html b/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html index 0f650ab6..e36891d6 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html +++ b/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html @@ -22,7 +22,7 @@ {% block mediagoblin_content %} <form action="{{ request.urlgen('mediagoblin.user_pages.media_confirm_delete', - user=media.uploader().username, + user=media.get_uploader().username, media=media.slug) }}" method="POST" enctype="multipart/form-data"> <div class="grid_8 prefix_1 suffix_1 edit_box form_box"> @@ -47,7 +47,7 @@ <div class="form_submit_buttons"> {# TODO: This isn't a button really... might do unexpected things :) #} <a class="cancel_link" href="{{ media.url_for_self(request.urlgen) }}">{% trans %}Cancel{% endtrans %}</a> - <input type="submit" value="{% trans %}Delete Permanently{% endtrans %}" class="button" /> + <input type="submit" value="{% trans %}Delete Permanently{% endtrans %}" class="button_form" /> {{ csrf_token }} </div> </div> diff --git a/mediagoblin/templates/mediagoblin/user_pages/user.html b/mediagoblin/templates/mediagoblin/user_pages/user.html index d6a9fe1f..5a39aaa5 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/user.html +++ b/mediagoblin/templates/mediagoblin/user_pages/user.html @@ -62,7 +62,7 @@ <p>{% trans %}In case it doesn't:{% endtrans %}</p> <a href="{{ request.urlgen('mediagoblin.auth.resend_verification') }}" - class="button">{% trans %}Resend verification email{% endtrans %}</a> + class="button_action_highlight">{% trans %}Resend verification email{% endtrans %}</a> </div> {% else %} {# if the user is not you, but still needs to verify their email #} @@ -97,7 +97,7 @@ </p> <a href="{{ request.urlgen('mediagoblin.edit.profile') }}?username={{ user.username }}" - class="header_submit"> + class="button_action"> {%- trans %}Edit profile{% endtrans -%} </a> </div> @@ -147,7 +147,7 @@ This is where your media will appear, but you don't seem to have added anything yet. {%- endtrans %} </p> - <a class="header_submit" + <a class="button_action" href="{{ request.urlgen('mediagoblin.submit.start') }}"> {%- trans %}Add media{% endtrans -%} </a> diff --git a/mediagoblin/templates/mediagoblin/utils/pagination.html b/mediagoblin/templates/mediagoblin/utils/pagination.html index 84336103..3c12f93c 100644 --- a/mediagoblin/templates/mediagoblin/utils/pagination.html +++ b/mediagoblin/templates/mediagoblin/utils/pagination.html @@ -47,7 +47,7 @@ <a href="{{ next_url }}"><img class="pagination_arrow" src="{{ request.staticdirect('/images/pagination_right.png') }}" alt="Next page" /></a> {% endif %} <br /> - Go to page: + {% trans %}Go to page:{% endtrans %} {%- for page in pagination.iter_pages() %} {% if page %} {% if page != pagination.page %} diff --git a/mediagoblin/templates/mediagoblin/utils/prev_next.html b/mediagoblin/templates/mediagoblin/utils/prev_next.html index 75903076..3363891b 100644 --- a/mediagoblin/templates/mediagoblin/utils/prev_next.html +++ b/mediagoblin/templates/mediagoblin/utils/prev_next.html @@ -25,23 +25,23 @@ {# There are no previous entries for the very first media entry #} {% if prev_entry_url %} <a class="navigation_button navigation_left" href="{{ prev_entry_url }}"> - <img src="{{ request.staticdirect('/images/navigation_left.png') }}" alt="Previous image" /> + ← newer </a> {% else %} {# This is the first entry. display greyed-out 'previous' image #} <p class="navigation_button navigation_left"> - <img src="{{ request.staticdirect('/images/navigation_end.png') }}" alt="No previous images" /> + ← newer </p> {% endif %} {# Likewise, this could be the very last media entry #} {% if next_entry_url %} <a class="navigation_button" href="{{ next_entry_url }}"> - <img src="{{ request.staticdirect('/images/navigation_right.png') }}" alt="Next image" /> + older → </a> {% else %} {# This is the last entry. display greyed-out 'next' image #} <p class="navigation_button"> - <img src="{{ request.staticdirect('/images/navigation_end.png') }}" alt="No following images" /> + older → </p> {% endif %} </div> diff --git a/mediagoblin/templates/mediagoblin/utils/tags.html b/mediagoblin/templates/mediagoblin/utils/tags.html index b3211bd9..c7dfc8eb 100644 --- a/mediagoblin/templates/mediagoblin/utils/tags.html +++ b/mediagoblin/templates/mediagoblin/utils/tags.html @@ -17,13 +17,25 @@ #} {% block tags_content -%} - <h3>Tags</h3> - <ul class="mediaentry_tags"> + <p>{% trans %}Tagged with{% endtrans %} {% for tag in media.tags %} - <li class="tag"> + {% if loop.last %} + {# the 'and' should only appear if there is more than one tag #} + {% if media.tags|length > 1 %} + {% trans %}and{% endtrans %} + {% endif %} <a href="{{ request.urlgen( - 'mediagoblin.listings.tags_listing', - tag=tag['slug']) }}">{{ tag['name'] }}</a></li> + 'mediagoblin.listings.tags_listing', + tag=tag['slug']) }}">{{ tag['name'] }}</a>. + {% elif loop.revindex == 2 %} + <a href="{{ request.urlgen( + 'mediagoblin.listings.tags_listing', + tag=tag['slug']) }}">{{ tag['name'] }}</a> + {% else %} + <a href="{{ request.urlgen( + 'mediagoblin.listings.tags_listing', + tag=tag['slug']) }}">{{ tag['name'] }}</a>, + {% endif %} {% endfor %} - </ul> + </p> {% endblock %} diff --git a/mediagoblin/templates/mediagoblin/utils/wtforms.html b/mediagoblin/templates/mediagoblin/utils/wtforms.html index 39dca7cc..cc30388f 100644 --- a/mediagoblin/templates/mediagoblin/utils/wtforms.html +++ b/mediagoblin/templates/mediagoblin/utils/wtforms.html @@ -18,7 +18,9 @@ {# Generically render a field #} {% macro render_field_div(field) %} - <p class="form_field_label"><label for="{{ field.name }}">{{ _(field.label.text) }}</label></p> + {% if field.label.text -%} + <p class="form_field_label"><label for="{{ field.name }}">{{ _(field.label.text) }}</label></p> + {%- endif %} <div class="form_field_input"> {{ field }} {%- if field.errors -%} diff --git a/mediagoblin/tests/test_auth.py b/mediagoblin/tests/test_auth.py index 153c6e53..2faf0f25 100644 --- a/mediagoblin/tests/test_auth.py +++ b/mediagoblin/tests/test_auth.py @@ -20,7 +20,7 @@ import datetime from nose.tools import assert_equal from mediagoblin.auth import lib as auth_lib -from mediagoblin.tests.tools import setup_fresh_app +from mediagoblin.tests.tools import setup_fresh_app, fixture_add_user from mediagoblin import mg_globals from mediagoblin.tools import template, mail @@ -280,16 +280,16 @@ def test_register_views(test_app): template.clear_test_template_context() response = test_app.get( "/auth/forgot_password/verify/?userid=%s&token=total_bs" % unicode( - new_user._id), status=400) - assert response.status == '400 Bad Request' + new_user._id), status=404) + assert_equal(response.status, '404 Not Found') ## Try using an expired token to change password, shouldn't work template.clear_test_template_context() real_token_expiration = new_user['fp_token_expire'] new_user['fp_token_expire'] = datetime.datetime.now() new_user.save() - response = test_app.get("%s?%s" % (path, get_params), status=400) - assert response.status == '400 Bad Request' + response = test_app.get("%s?%s" % (path, get_params), status=404) + assert_equal(response.status, '404 Not Found') new_user['fp_token_expire'] = real_token_expiration new_user.save() @@ -332,11 +332,7 @@ def test_authentication_views(test_app): Test logging in and logging out """ # Make a new user - test_user = mg_globals.database.User() - test_user['username'] = u'chris' - test_user['email'] = u'chris@example.com' - test_user['pw_hash'] = auth_lib.bcrypt_gen_password_hash('toast') - test_user.save() + test_user = fixture_add_user(active_user=False) # Get login # --------- diff --git a/mediagoblin/tests/test_celery_setup.py b/mediagoblin/tests/test_celery_setup.py index 348a4357..19a9b899 100644 --- a/mediagoblin/tests/test_celery_setup.py +++ b/mediagoblin/tests/test_celery_setup.py @@ -50,7 +50,7 @@ def test_setup_celery_from_config(): assert isinstance(fake_celery_module.CELERYD_ETA_SCHEDULER_PRECISION, float) assert fake_celery_module.CELERY_RESULT_PERSISTENT is True assert fake_celery_module.CELERY_IMPORTS == [ - 'foo.bar.baz', 'this.is.an.import', 'mediagoblin.process_media'] + 'foo.bar.baz', 'this.is.an.import', 'mediagoblin.processing'] assert fake_celery_module.CELERY_MONGODB_BACKEND_SETTINGS == { 'database': 'mediagoblin'} assert fake_celery_module.CELERY_RESULT_BACKEND == 'mongodb' @@ -74,7 +74,7 @@ def test_setup_celery_from_config(): assert isinstance(fake_celery_module.CELERYD_ETA_SCHEDULER_PRECISION, float) assert fake_celery_module.CELERY_RESULT_PERSISTENT is False assert fake_celery_module.CELERY_IMPORTS == [ - 'baz.bar.foo', 'import.is.a.this', 'mediagoblin.process_media'] + 'baz.bar.foo', 'import.is.a.this', 'mediagoblin.processing'] assert fake_celery_module.CELERY_MONGODB_BACKEND_SETTINGS == { 'database': 'captain_lollerskates', 'host': 'mongodb.example.org', diff --git a/mediagoblin/tests/test_csrf_middleware.py b/mediagoblin/tests/test_csrf_middleware.py index 691f10b9..c8fca23a 100644 --- a/mediagoblin/tests/test_csrf_middleware.py +++ b/mediagoblin/tests/test_csrf_middleware.py @@ -27,7 +27,7 @@ from mediagoblin import mg_globals def test_csrf_cookie_set(test_app): cookie_name = mg_globals.app_config['csrf_cookie_name'] - + # get login page response = test_app.get('/auth/login/') @@ -69,3 +69,22 @@ def test_csrf_token_must_match(test_app): mg_globals.app_config['csrf_cookie_name'])}, extra_environ={'gmg.verify_csrf': True}).\ status_int == 200 + +@setup_fresh_app +def test_csrf_exempt(test_app): + + # monkey with the views to decorate a known endpoint + import mediagoblin.auth.views + from mediagoblin.meddleware.csrf import csrf_exempt + + mediagoblin.auth.views.login = csrf_exempt( + mediagoblin.auth.views.login + ) + + # construct a request with no cookie or form token + assert test_app.post('/auth/login/', + extra_environ={'gmg.verify_csrf': True}, + expect_errors=False).status_int == 200 + + # restore the CSRF protection in case other tests expect it + mediagoblin.auth.views.login.csrf_enabled = True diff --git a/mediagoblin/tests/test_edit.py b/mediagoblin/tests/test_edit.py new file mode 100644 index 00000000..c29ddfe9 --- /dev/null +++ b/mediagoblin/tests/test_edit.py @@ -0,0 +1,99 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from mediagoblin import mg_globals +from mediagoblin.tests.tools import setup_fresh_app, fixture_add_user +from mediagoblin.tools import template +from mediagoblin.auth.lib import bcrypt_check_password + + +@setup_fresh_app +def test_change_password(test_app): + """Test changing password correctly and incorrectly""" + # set up new user + test_user = fixture_add_user() + + test_app.post( + '/auth/login/', { + 'username': u'chris', + 'password': 'toast'}) + + # test that the password can be changed + # template.clear_test_template_context() + test_app.post( + '/edit/profile/', { + 'bio': u'', + 'url': u'', + 'old_password': 'toast', + 'new_password': '123456', + 'confirm_password': '123456'}) + + # test_user has to be fetched again in order to have the current values + test_user = mg_globals.database.User.one({'username': 'chris'}) + + assert bcrypt_check_password('123456', test_user['pw_hash']) + + # test that the password cannot be changed if the given old_password + # is wrong + # template.clear_test_template_context() + test_app.post( + '/edit/profile/', { + 'bio': u'', + 'url': u'', + 'old_password': 'toast', + 'new_password': '098765', + 'confirm_password': '098765'}) + + test_user = mg_globals.database.User.one({'username': 'chris'}) + + assert not bcrypt_check_password('098765', test_user['pw_hash']) + + +@setup_fresh_app +def change_bio_url(test_app): + """Test changing bio and URL""" + # set up new user + test_user = fixture_add_user() + + # test changing the bio and the URL properly + test_app.post( + '/edit/profile/', { + 'bio': u'I love toast!', + 'url': u'http://dustycloud.org/'}) + + test_user = mg_globals.database.User.one({'username': 'chris'}) + + assert test_user['bio'] == u'I love toast!' + assert test_user['url'] == u'http://dustycloud.org/' + + # test changing the bio and the URL inproperly + too_long_bio = 150 * 'T' + 150 * 'o' + 150 * 'a' + 150 * 's' + 150* 't' + + test_app.post( + '/edit/profile/', { + # more than 500 characters + 'bio': too_long_bio, + 'url': 'this-is-no-url'}) + + test_user = mg_globals.database.User.one({'username': 'chris'}) + + context = template.TEMPLATE_TEST_CONTEXT['mediagoblin/edit/edit_profile.html'] + form = context['edit_profile_form'] + + assert form.bio.errors == [u'Field must be between 0 and 500 characters long.'] + assert form.url.errors == [u'Improperly formed URL'] + + # test changing the url inproperly diff --git a/mediagoblin/tests/test_mgoblin_app.ini b/mediagoblin/tests/test_mgoblin_app.ini index f979e810..2525a4f9 100644 --- a/mediagoblin/tests/test_mgoblin_app.ini +++ b/mediagoblin/tests/test_mgoblin_app.ini @@ -5,7 +5,6 @@ email_debug_mode = true db_name = __mediagoblin_tests__ # tag parsing -tags_delimiter = "," tags_max_length = 50 # Celery shouldn't be set up by the application as it's setup via diff --git a/mediagoblin/middleware/__init__.py b/mediagoblin/tests/test_misc.py index 05325ee5..09623355 100644 --- a/mediagoblin/middleware/__init__.py +++ b/mediagoblin/tests/test_misc.py @@ -14,7 +14,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -ENABLED_MIDDLEWARE = ( - 'mediagoblin.middleware.noop:NoOpMiddleware', - 'mediagoblin.middleware.csrf:CsrfMiddleware', - ) +from nose.tools import assert_equal + +from mediagoblin.tests.tools import setup_fresh_app + + +@setup_fresh_app +def test_404_for_non_existent(test_app): + assert_equal(test_app.get('/does-not-exist/', + expect_errors=True).status_int, + 404) diff --git a/mediagoblin/tests/test_storage.py b/mediagoblin/tests/test_storage.py index 46ecb2ec..eab4d032 100644 --- a/mediagoblin/tests/test_storage.py +++ b/mediagoblin/tests/test_storage.py @@ -57,6 +57,10 @@ class FakeRemoteStorage(storage.filestorage.BasicFileStorage): # should force copying to the workbench local_storage = False + def copy_local_to_storage(self, *args, **kwargs): + return storage.StorageInterface.copy_local_to_storage( + self, *args, **kwargs) + def test_storage_system_from_config(): this_storage = storage.storage_system_from_config( @@ -252,3 +256,26 @@ def test_basic_storage_copy_locally(): this_storage.copy_locally(filepath, new_file_dest) assert file(new_file_dest).read() == 'Testing this file' + + +def _test_copy_local_to_storage_works(tmpdir, this_storage): + local_filename = tempfile.mktemp() + with file(local_filename, 'w') as tmpfile: + tmpfile.write('haha') + + this_storage.copy_local_to_storage( + local_filename, ['dir1', 'dir2', 'copiedto.txt']) + + assert file( + os.path.join(tmpdir, 'dir1/dir2/copiedto.txt'), + 'r').read() == 'haha' + + +def test_basic_storage_copy_local_to_storage(): + tmpdir, this_storage = get_tmp_filestorage() + _test_copy_local_to_storage_works(tmpdir, this_storage) + + +def test_general_storage_copy_local_to_storage(): + tmpdir, this_storage = get_tmp_filestorage(fake_remote=True) + _test_copy_local_to_storage_works(tmpdir, this_storage) diff --git a/mediagoblin/tests/test_submission.py b/mediagoblin/tests/test_submission.py index dec7118b..a3453f2f 100644 --- a/mediagoblin/tests/test_submission.py +++ b/mediagoblin/tests/test_submission.py @@ -19,8 +19,8 @@ import pkg_resources from nose.tools import assert_equal, assert_true, assert_false -from mediagoblin.auth import lib as auth_lib -from mediagoblin.tests.tools import setup_fresh_app, get_test_app +from mediagoblin.tests.tools import setup_fresh_app, get_test_app, \ + fixture_add_user from mediagoblin import mg_globals from mediagoblin.tools import template, common @@ -45,13 +45,7 @@ class TestSubmission: # TODO: Possibly abstract into a decorator like: # @as_authenticated_user('chris') - test_user = mg_globals.database.User() - test_user['username'] = u'chris' - test_user['email'] = u'chris@example.com' - test_user['email_verified'] = True - test_user['status'] = u'active' - test_user['pw_hash'] = auth_lib.bcrypt_gen_password_hash('toast') - test_user.save() + test_user = fixture_add_user() self.test_user = test_user @@ -177,7 +171,7 @@ class TestSubmission: request.urlgen('mediagoblin.user_pages.media_confirm_delete', # No work: user=media.uploader().username, user=self.test_user['username'], - media=media._id), + media=media.slug), # no value means no confirm {}) @@ -197,7 +191,7 @@ class TestSubmission: request.urlgen('mediagoblin.user_pages.media_confirm_delete', # No work: user=media.uploader().username, user=self.test_user['username'], - media=media._id), + media=media.slug), {'confirm': 'y'}) response.follow() @@ -222,7 +216,7 @@ class TestSubmission: context = template.TEMPLATE_TEST_CONTEXT['mediagoblin/submit/start.html'] form = context['submit_form'] - assert form.file.errors == ['The file doesn\'t seem to be an image!'] + assert form.file.errors == [u'Invalid file type.'] # NOTE: The following 2 tests will ultimately fail, but they # *will* pass the initial form submission step. Instead, @@ -246,7 +240,7 @@ class TestSubmission: assert_equal(entry['state'], 'failed') assert_equal( entry['fail_error'], - u'mediagoblin.process_media.errors:BadMediaFail') + u'mediagoblin.processing:BadMediaFail') # Test non-supported file with .png extension # ------------------------------------------- @@ -266,4 +260,4 @@ class TestSubmission: assert_equal(entry['state'], 'failed') assert_equal( entry['fail_error'], - u'mediagoblin.process_media.errors:BadMediaFail') + u'mediagoblin.processing:BadMediaFail') diff --git a/mediagoblin/tests/test_tags.py b/mediagoblin/tests/test_tags.py index a05831c9..583c1a55 100644 --- a/mediagoblin/tests/test_tags.py +++ b/mediagoblin/tests/test_tags.py @@ -39,11 +39,4 @@ def test_list_of_dicts_conversion(test_app): # Make sure converting the list of dicts to a string works assert text.media_tags_as_string([{'name': u'yin', 'slug': u'yin'}, {'name': u'yang', 'slug': u'yang'}]) == \ - u'yin,yang' - - # If the tag delimiter is a space then we expect different results - mg_globals.app_config['tags_delimiter'] = u' ' - assert text.convert_to_tag_list_of_dicts('unicorn ceramic nazi') == [ - {'name': u'unicorn', 'slug': u'unicorn'}, - {'name': u'ceramic', 'slug': u'ceramic'}, - {'name': u'nazi', 'slug': u'nazi'}] + u'yin, yang' diff --git a/mediagoblin/tests/tools.py b/mediagoblin/tests/tools.py index 420d9ba8..49a3d33e 100644 --- a/mediagoblin/tests/tools.py +++ b/mediagoblin/tests/tools.py @@ -26,6 +26,8 @@ from mediagoblin.tools import testing from mediagoblin.init.config import read_mediagoblin_config from mediagoblin.decorators import _make_safe from mediagoblin.db.open import setup_connection_and_db_from_config +from mediagoblin.meddleware import BaseMeddleware +from mediagoblin.auth.lib import bcrypt_gen_password_hash MEDIAGOBLIN_TEST_DB_NAME = u'__mediagoblin_tests__' @@ -50,9 +52,9 @@ $ CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_tests ./bin/nosetests""" class BadCeleryEnviron(Exception): pass -class TestingMiddleware(object): +class TestingMeddleware(BaseMeddleware): """ - Middleware for the Unit tests + Meddleware for the Unit tests It might make sense to perform some tests on all requests/responses. Or prepare them in a special @@ -60,7 +62,7 @@ class TestingMiddleware(object): for being valid html *after* being rendered. This module is getting inserted at the front of the - middleware list, which means: requests are handed here + meddleware list, which means: requests are handed here first, responses last. So this wraps up the "normal" app. @@ -69,12 +71,6 @@ class TestingMiddleware(object): create a new method and call it from process_*. """ - def __init__(self, mg_app): - self.app = mg_app - - def process_request(self, request): - pass - def process_response(self, request, response): # All following tests should be for html only! if response.content_type != "text/html": @@ -149,11 +145,11 @@ def get_test_app(dump_old_app=True): test_app = loadapp( 'config:' + TEST_SERVER_CONFIG) - # Insert the TestingMiddleware, which can do some + # Insert the TestingMeddleware, which can do some # sanity checks on every request/response. # Doing it this way is probably not the cleanest way. # We'll fix it, when we have plugins! - mg_globals.app.middleware.insert(0, TestingMiddleware(mg_globals.app)) + mg_globals.app.meddleware.insert(0, TestingMeddleware(mg_globals.app)) app = TestApp(test_app) MGOBLIN_APP = app @@ -205,3 +201,19 @@ def assert_db_meets_expected(db, expected): document = collection.find_one({'_id': expected_document['_id']}) assert document is not None # make sure it exists assert document == expected_document # make sure it matches + + +def fixture_add_user(username = u'chris', password = 'toast', + active_user = True): + test_user = mg_globals.database.User() + test_user.username = username + test_user.email = username + u'@example.com' + if password is not None: + test_user.pw_hash = bcrypt_gen_password_hash(password) + if active_user: + test_user.email_verified = True + test_user.status = u'active' + + test_user.save() + + return test_user diff --git a/mediagoblin/tools/response.py b/mediagoblin/tools/response.py index b01d31a2..c905097c 100644 --- a/mediagoblin/tools/response.py +++ b/mediagoblin/tools/response.py @@ -30,7 +30,7 @@ def render_404(request): Render a 404. """ return render_to_response( - request, 'mediagoblin/404.html', {}, status=400) + request, 'mediagoblin/404.html', {}, status=404) def redirect(request, *args, **kwargs): diff --git a/mediagoblin/tools/template.py b/mediagoblin/tools/template.py index 0986761b..d0400347 100644 --- a/mediagoblin/tools/template.py +++ b/mediagoblin/tools/template.py @@ -21,7 +21,7 @@ from mediagoblin import mg_globals from mediagoblin import messages from mediagoblin.tools import common from mediagoblin.tools.translate import setup_gettext -from mediagoblin.middleware.csrf import render_csrf_form_token +from mediagoblin.meddleware.csrf import render_csrf_form_token SETUP_JINJA_ENVS = {} @@ -79,7 +79,9 @@ def render_template(request, template_path, context): template = request.template_env.get_template( template_path) context['request'] = request - context['csrf_token'] = render_csrf_form_token(request) + rendered_csrf_token = render_csrf_form_token(request) + if rendered_csrf_token is not None: + context['csrf_token'] = render_csrf_form_token(request) rendered = template.render(context) if common.TESTS_ENABLED: diff --git a/mediagoblin/tools/text.py b/mediagoblin/tools/text.py index be1adb00..d576224d 100644 --- a/mediagoblin/tools/text.py +++ b/mediagoblin/tools/text.py @@ -43,6 +43,7 @@ HTML_CLEANER = Cleaner( host_whitelist=(), whitelist_tags=set([])) +TAGS_DELIMITER=','; def clean_html(html): # clean_html barfs on an empty string @@ -67,7 +68,7 @@ def convert_to_tag_list_of_dicts(tag_string): # Split the tag string into a list of tags for tag in stripped_tag_string.split( - mg_globals.app_config['tags_delimiter']): + TAGS_DELIMITER): # Ignore empty or duplicate tags if tag.strip() and tag.strip() not in [t['name'] for t in taglist]: @@ -85,7 +86,7 @@ def media_tags_as_string(media_entry_tags): """ media_tag_string = '' if media_entry_tags: - media_tag_string = mg_globals.app_config['tags_delimiter'].join( + media_tag_string = (TAGS_DELIMITER+u' ').join( [tag['name'] for tag in media_entry_tags]) return media_tag_string diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 25fd2ebb..779394c7 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -30,6 +30,8 @@ from mediagoblin.decorators import (uses_pagination, get_user_media_entry, from werkzeug.contrib.atom import AtomFeed +from mediagoblin.media_types import get_media_manager + @uses_pagination def user_home(request, page): @@ -120,9 +122,11 @@ def media_home(request, media, page, **kwargs): comment_form = user_forms.MediaCommentForm(request.POST) + media_template_name = get_media_manager(media['media_type'])['display_template'] + return render_to_response( request, - 'mediagoblin/user_pages/media.html', + media_template_name, {'media': media, 'comments': comments, 'pagination': pagination, @@ -148,13 +152,13 @@ def media_post_comment(request, media): messages.add_message( request, messages.ERROR, - _("Empty comments are not allowed.")) + _("Oops, your comment was empty.")) else: comment.save() messages.add_message( request, messages.SUCCESS, - _('Comment posted!')) + _('Your comment has been posted!')) return exc.HTTPFound( location=media.url_for_self(request.urlgen)) @@ -169,21 +173,26 @@ def media_confirm_delete(request, media): if request.method == 'POST' and form.validate(): if form.confirm.data is True: - username = media.uploader()['username'] + username = media.get_uploader()['username'] # Delete all files on the public storage delete_media_files(media) media.delete() + messages.add_message( + request, messages.SUCCESS, _('You deleted the media.')) return redirect(request, "mediagoblin.user_pages.user_home", user=username) else: + messages.add_message( + request, messages.ERROR, + _("The media was not deleted because you didn't check that you were sure.")) return exc.HTTPFound( location=media.url_for_self(request.urlgen)) if ((request.user[u'is_admin'] and - request.user._id != media.uploader()._id)): + request.user._id != media.get_uploader()._id)): messages.add_message( request, messages.WARNING, _("You are about to delete another user's media. " diff --git a/mediagoblin/views.py b/mediagoblin/views.py index ecf5b723..cd6aba9b 100644 --- a/mediagoblin/views.py +++ b/mediagoblin/views.py @@ -14,11 +14,15 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +import sys + from mediagoblin import mg_globals from mediagoblin.tools.pagination import Pagination from mediagoblin.tools.response import render_to_response from mediagoblin.db.util import DESCENDING from mediagoblin.decorators import uses_pagination +from mediagoblin import media_types + @uses_pagination @@ -28,12 +32,12 @@ def root_view(request, page): pagination = Pagination(page, cursor) media_entries = pagination() - return render_to_response( request, 'mediagoblin/root.html', {'media_entries': media_entries, 'allow_registration': mg_globals.app_config["allow_registration"], - 'pagination': pagination}) + 'pagination': pagination, + 'sys': sys}) def simple_template_render(request): diff --git a/mediagoblin/workbench.py b/mediagoblin/workbench.py index 60a79f47..9578494c 100644 --- a/mediagoblin/workbench.py +++ b/mediagoblin/workbench.py @@ -47,7 +47,10 @@ class Workbench(object): return str(self.dir) def __repr__(self): - return repr(self.dir) + try: + return str(self) + except AttributeError: + return 'None' def joinpath(self, *args): return os.path.join(self.dir, *args) @@ -66,6 +66,7 @@ setup( ## their package managers. # 'lxml', ], + # requires=['gst'], test_suite='nose.collector', entry_points="""\ [console_scripts] |