diff options
-rw-r--r-- | forum/conf/skin_general_settings.py | 3 | ||||
-rw-r--r-- | forum/const/__init__.py | 24 | ||||
-rw-r--r-- | forum/models/__init__.py | 112 | ||||
-rw-r--r-- | forum/skins/__init__.py | 70 | ||||
-rw-r--r-- | forum/skins/default/templates/instant_notification.html | 84 | ||||
-rw-r--r-- | forum/skins/loaders.py | 59 | ||||
-rw-r--r-- | forum/templatetags/extra_tags.py | 4 | ||||
-rw-r--r-- | forum/utils/colors.py | 2 | ||||
-rw-r--r-- | locale/en/LC_MESSAGES/django.po | 534 | ||||
-rw-r--r-- | settings.py | 2 |
10 files changed, 476 insertions, 418 deletions
diff --git a/forum/conf/skin_general_settings.py b/forum/conf/skin_general_settings.py index b1674d37..748510e7 100644 --- a/forum/conf/skin_general_settings.py +++ b/forum/conf/skin_general_settings.py @@ -4,6 +4,7 @@ General skin settings from forum.conf.settings_wrapper import settings from livesettings import ConfigurationGroup, StringValue, IntegerValue from django.utils.translation import ugettext as _ +from forum.skins.utils import get_skin_choices GENERAL_SKIN_SETTINGS = ConfigurationGroup( 'GENERAL_SKIN_SETTINGS', @@ -15,7 +16,7 @@ settings.register( GENERAL_SKIN_SETTINGS, 'ASKBOT_DEFAULT_SKIN', default='default', - choices=[('default','default')],#todo: get_skin_choices(), + choices=get_skin_choices(), description=_('Select skin'), ) ) diff --git a/forum/const/__init__.py b/forum/const/__init__.py index e83c5a12..11a27ed9 100644 --- a/forum/const/__init__.py +++ b/forum/const/__init__.py @@ -127,6 +127,7 @@ TYPE_ACTIVITY = ( #response activity has receiving user not empty RESPONSE_ACTIVITY_TYPES_FOR_DISPLAY = ( TYPE_ACTIVITY_ANSWER, + TYPE_ACTIVITY_ASK_QUESTION, TYPE_ACTIVITY_COMMENT_QUESTION, TYPE_ACTIVITY_COMMENT_ANSWER, TYPE_ACTIVITY_UPDATE_ANSWER, @@ -143,6 +144,29 @@ RESPONSE_ACTIVITY_TYPES_FOR_DISPLAY = ( TYPE_ACTIVITY_FAVORITE, ) +RESPONSE_ACTIVITY_TYPES_FOR_INSTANT_NOTIFICATIONS = ( + TYPE_ACTIVITY_COMMENT_QUESTION, + TYPE_ACTIVITY_COMMENT_ANSWER, + TYPE_ACTIVITY_UPDATE_ANSWER, + TYPE_ACTIVITY_UPDATE_QUESTION, + TYPE_ACTIVITY_ANSWER, + TYPE_ACTIVITY_ASK_QUESTION, +) + +RESPONSE_ACTIVITY_TYPE_MAP_FOR_TEMPLATES = { + TYPE_ACTIVITY_COMMENT_QUESTION: 'question_comment', + TYPE_ACTIVITY_COMMENT_ANSWER: 'answer_comment', + TYPE_ACTIVITY_UPDATE_ANSWER: 'answer_update', + TYPE_ACTIVITY_UPDATE_QUESTION: 'question_update', + TYPE_ACTIVITY_ANSWER: 'new_answer', + TYPE_ACTIVITY_ASK_QUESTION: 'new_question', + } + +assert( + set(RESPONSE_ACTIVITY_TYPES_FOR_INSTANT_NOTIFICATIONS) \ + == set(RESPONSE_ACTIVITY_TYPE_MAP_FOR_TEMPLATES.keys()) +) + TYPE_RESPONSE = { 'QUESTION_ANSWERED' : _('question_answered'), 'QUESTION_COMMENTED': _('question_commented'), diff --git a/forum/models/__init__.py b/forum/models/__init__.py index 2df44bcc..168399f9 100644 --- a/forum/models/__init__.py +++ b/forum/models/__init__.py @@ -15,6 +15,7 @@ from django.db import models from django.conf import settings as django_settings from django.contrib.contenttypes.models import ContentType from forum import const +from forum.conf import settings as forum_settings from forum.models.question import Question, QuestionRevision from forum.models.question import QuestionView, AnonymousQuestion from forum.models.question import FavoriteQuestion @@ -25,7 +26,6 @@ from forum.models.user import Activity, ValidationHash, EmailFeedSetting from forum.models import signals #from user import AuthKeyUserAssociation from forum.models.repute import Badge, Award, Repute -from forum.conf import settings as forum_settings from forum import auth User.add_to_class('is_approved', models.BooleanField(default=False)) @@ -225,7 +225,7 @@ def flag_post(user, post, timestamp=None, cancel=False): def user_should_receive_instant_notification_about_post( user, - post, + post = None, newly_mentioned_users = [] ): return EmailFeedSetting.objects.exists_match_to_post_and_subscriber( @@ -252,22 +252,43 @@ User.add_to_class( user_should_receive_instant_notification_about_post ) -def format_instant_notification_body(template, data): - """data has the following keys: - receiving_user: User instance - update_author: Uses instance - updated_post: post = Question|Answer|Comment instance - update_url: absolute url (including http...) of the post - revision_number: latest revision number of the post - update_type: type of update from the map in function below - related_origin_post: another post related to the updated one, if any - admin_email: email address of forum administrator - email_settings_url: full url to the page where user can change email settings +def format_instant_notification_body( + to_user = None, + from_user = None, + post = None, + update_type = None, + template = None, + ): """ - #todo: write this function so that - #it can be easily used for testing of the email messages - #separately using a script - return template.render(Context(data)) + returns text of the instant notification body + that is built when post is updated + only update_types in const.RESPONSE_ACTIVITY_TYPE_MAP_FOR_TEMPLATES + are supported + """ + + site_url = forum_settings.APP_URL + origin_post = post.get_origin_post() + user_subscriptions_url = site_url + to_user.get_absolute_url() + \ + '?sort=email_subscriptions' + + if update_type == 'question_comment': + assert(isinstance(post, Comment)) + assert(isinstance(post.content_object, Question)) + elif update_type == 'answer_comment': + assert(isinstance(post, Comment)) + assert(isinstance(post.content_object, Answer)) + elif update_type in ('answer_update', 'new_answer'): + assert(isinstance(post, Answer)) + elif update_type in ('question_update', 'new_question'): + assert(isinstance(post, Question)) + + update_data = { + 'update_author_name': from_user.username, + 'post_url': site_url + post.get_absolute_url(), + 'origin_post_title': origin_post.title + 'user_subscriptions_url': user_subscriptions_url + } + return template.render(Context(update_data)) def send_instant_notifications_about_activity_in_post( activity = None, @@ -277,49 +298,40 @@ def send_instant_notifications_about_activity_in_post( ): """ function called when posts are updated + newly mentioned users are carried through to reduce + database hits """ - #todo: remove this after migrating to string type for const.TYPE_ACTIVITY... - update_type_map = { - const.TYPE_ACTIVITY_COMMENT_QUESTION: 'question_comment', - const.TYPE_ACTIVITY_COMMENT_ANSWER: 'answer_comment', - const.TYPE_ACTIVITY_UPDATE_ANSWER: 'answer_update', - const.TYPE_ACTIVITY_UPDATE_QUESTION: 'question_update', - } + update_type_map = const.RESPONSE_ACTIVITY_TYPE_MAP_FOR_TEMPLATES + + if activity.activity_type in update_type_map: + update_type = update_type_map[activity.activity_type] + else: + return template = loader.get_template('instant_notification.html') - for u in set(receiving_users) | set(newly_mentioned_users): - if u.should_receive_instant_notification_about_post( - post, + for user in set(receiving_users) | set(newly_mentioned_users): + + if user.should_receive_instant_notification_about_post( + post = post, newly_mentioned_users = newly_mentioned_users ): - - #get details about update - #todo: is there a way to solve this import issue? - #from forum.conf import settings as forum_settings - base_url = forum_settings.APP_URL - data = { - 'receiving_user': u, - 'update_author': activity.user, - 'updated_post': post, - 'update_url': base_url + post.get_absolute_url(), - 'update_type': update_type_map[activity.activity_type], - 'revision_number': post.get_latest_revision_number(), - 'related_origin_post': post.get_origin_post(), - 'admin_email': django_settings.ADMINS[0][1], - #todo: clean up url calculation below - 'email_settings_url': base_url + u.get_profile_url() \ - + '?sort=email_subscriptions' - } #send update subject = _('email update message subject') text = format_instant_notification_body( + to_user = user, + from_user = activity.user, + post = post, + update_type = update_type, + template = template, ) - msg = EmailMessage(subject, text, django_settings.DEFAULT_FROM_EMAIL, [u.email]) - print 'sending email to %s' % u.email - print 'subject: %s' % subject - print 'body: %s' % text - #msg.send() + msg = EmailMessage( + subject, + text, + django_settings.DEFAULT_FROM_EMAIL, + [user.email] + ) + msg.send() def calculate_gravatar_hash(instance, **kwargs): diff --git a/forum/skins/__init__.py b/forum/skins/__init__.py index b7b222a2..e69de29b 100644 --- a/forum/skins/__init__.py +++ b/forum/skins/__init__.py @@ -1,70 +0,0 @@ -from django.template import loader -from django.template.loaders import filesystem -import os.path -import os -import logging -from forum.conf import settings as forum_settings -from forum.skins import utils - -#module for skinning askbot -#via ASKBOT_DEFAULT_SKIN configureation variable (not django setting) - -#note - Django template loaders use method django.utils._os.safe_join -#to work on unicode file paths -#here it is ignored because it is assumed that we won't use unicode paths - -def load_template_source(name, dirs=None): - print 'want template %s' % name - try: - #todo: move this to top after splitting out get_skin_dirs() - print 'trying to import forum_settings' - print 'imported!' - tname = os.path.join(forum_settings.ASKBOT_DEFAULT_SKIN,'templates',name) - print tname - print 'success' - return filesystem.load_template_source(tname,dirs) - except: - print 'failed' - tname = os.path.join('default','templates',name) - return filesystem.load_template_source(tname,dirs) -load_template_source.is_usable = True - -def find_media_source(url): - """returns url prefixed with the skin name - of the first skin that contains the file - directories are searched in this order: - forum_settings.ASKBOT_DEFAULT_SKIN, then 'default', then 'commmon' - if file is not found - returns None - and logs an error message - """ - print 'trying to get source dammit' - while url[0] == '/': url = url[1:] - d = os.path.dirname - n = os.path.normpath - j = os.path.join - f = os.path.isfile - #todo: handles case of multiple skin directories - skins = utils.get_skin_dirs()[0] - try: - #todo: move this to top after splitting out get_skin_dirs() - print 'looking for the media path' - media = os.path.join(skins, forum_settings.ASKBOT_DEFAULT_SKIN, url) - print 'out of dadata' - assert(f(media)) - use_skin = forum_settings.ASKBOT_DEFAULT_SKIN - except: - print 'failed' - try: - media = j(skins, 'default', url) - assert(f(media)) - use_skin = 'default' - except: - media = j(skins, 'common', url) - try: - assert(f(media)) - use_skin = 'common' - except: - logging.error('could not find media for %s' % url) - use_skin = '' - return None - return use_skin + '/' + url diff --git a/forum/skins/default/templates/instant_notification.html b/forum/skins/default/templates/instant_notification.html index 856e6676..b860ab02 100644 --- a/forum/skins/default/templates/instant_notification.html +++ b/forum/skins/default/templates/instant_notification.html @@ -1,54 +1,44 @@ -{% comment %} -Called from forum.models.__init__.maybe_send_instant_notifications() -Template paramaters: - -receiving_user - User -update_author - User -updated_post - Comment|Answer|Question -related_origin_post - origin post related to the update -update_url - absolute url (including http://... to updated post -update_type - question_comment|answer_comment|answer_update|question_update -revision_number - integer (first revision is 1) -admin_email - email of forum administrator -email_settings_url - url of user's email settings -{% endcomment %} {% load i18n %} {% load smart_if %} -{% blocktrans with receiving_user.username as user_name %}Dear {{user_name}},{% endblocktrans %} -{% if update_type == 'question_comment' or update_type == 'answer_comment' %} -{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %} -{{author_link}} has left a new <a href="{{update_url}}">comment</a> -related to question <a href="{{origin_post_url}}">{{origin_post_title}}</a> +{% blocktrans %}<p>Dear {{receiving_user_name}},</p>{% endblocktrans %} +<p></p> + {% if update_type == 'question_comment' %} +{% blocktrans %} +<p>{{update_author_name}} left a <a href="%{{post_url}}">new comment</a> +for question "{{origin_post_title}}"</p> {% endblocktrans %} -{% endif %} -{% if update_type == 'answer_update' %} -{% if revision_number == 1 %} -{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %} -{{author_link}} posted <a href="{{update_url}}">a new answer</a> -to question <a href="{{origin_post_url}}">{{origin_post_title}}</a> + {% endif %} + {% if update_type == 'answer_comment' %} +{% blocktrans %} +<p>{{update_author_name}} left a <a href="{{post_url}}">new comment</a> + for an answer to question "{{origin_post_title}}"</p> {% endblocktrans %} -{% else %} -{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %} -{{author_link}} updated <a href="{{update_url}}">an answer</a> -to question <a href="{{origin_post_url}}">{{origin_post_title}}</a> + {% endif %} + {% if update_type == 'new_answer' %} +{% blocktrans %} +<p>{{update_author_name}} answered a question +<a href="{{post_url}}">{{origin_post_title}}</a></p> {% endblocktrans %} -{% endif %} -{% endif %} -{% if update_type == 'question_update' %} -{% if revision_number == 1 %} -{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %} -{{author_link}} asked a new question <a href="{{origin_post_url}}">{{origin_post_title}}</a> + {% endif %} + {% if update_type == 'new_question' %} +{% blocktrans %} +<p>{{update_author_name}} asked a question +<a href="{{post_url}}">{{origin_post_title}}</a></p> {% endblocktrans %} -{% else %} -{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %} -{{author_link}} updated the question <a href="{{origin_post_url}}">{{origin_post_title}}</a> + {%if update_type == 'answer_update' %} +{% blocktrans %} +<p>{{update_author_name}} updated an answer to the question +<a href="{{post_url}}">{{origin_post_title}}</a></p> {% endblocktrans %} -{% endif %} -{% endif %} - -{% trans "Please take a look." %} - -{% blocktrans %}Sincerely, -Forum Administrator{% endblocktrans %} - -{% blocktrans %}go to {{email_settings_url}} to change frequency of email updates or {{admin_email}} administrator{% endblocktrans %} + {% if update_type == 'question_update' %} +{% blocktrans %} +<p>{{update_author_name}} updated a question +<a href="{{post_url}}">{{origin_post_title}}</a></p> +{% endblocktrans %} + {% endif %} +<p></p> +{% blocktrans %} +<p>Please note - you can easily <a href="{{user_subscriptions_url}}">change</a> +how often you receive these notifications.</p> +{% endblocktrans %} +{% trans "<p>Sincerely,<br/>Forum Administrator</p>" %} diff --git a/forum/skins/loaders.py b/forum/skins/loaders.py new file mode 100644 index 00000000..53d1e02d --- /dev/null +++ b/forum/skins/loaders.py @@ -0,0 +1,59 @@ +from django.template import loader +from django.template.loaders import filesystem +import os.path +import os +import logging +from forum.skins import utils +from forum.conf import settings as forum_settings + +#module for skinning askbot +#via ASKBOT_DEFAULT_SKIN configureation variable (not django setting) + +#note - Django template loaders use method django.utils._os.safe_join +#to work on unicode file paths +#here it is ignored because it is assumed that we won't use unicode paths + +def load_template_source(name, dirs=None): + try: + #todo: move this to top after splitting out get_skin_dirs() + tname = os.path.join(forum_settings.ASKBOT_DEFAULT_SKIN,'templates',name) + return filesystem.load_template_source(tname,dirs) + except: + tname = os.path.join('default','templates',name) + return filesystem.load_template_source(tname,dirs) +load_template_source.is_usable = True + +def find_media_source(url): + """returns url prefixed with the skin name + of the first skin that contains the file + directories are searched in this order: + forum_settings.ASKBOT_DEFAULT_SKIN, then 'default', then 'commmon' + if file is not found - returns None + and logs an error message + """ + while url[0] == '/': url = url[1:] + d = os.path.dirname + n = os.path.normpath + j = os.path.join + f = os.path.isfile + #todo: handles case of multiple skin directories + skins = utils.get_skin_dirs()[0] + try: + use_skin = forum_settings.ASKBOT_DEFAULT_SKIN + media = os.path.join(skins, use_skin, url) + assert(f(media)) + except: + try: + media = j(skins, 'default', url) + assert(f(media)) + use_skin = 'default' + except: + media = j(skins, 'common', url) + try: + assert(f(media)) + use_skin = 'common' + except: + logging.error('could not find media for %s' % url) + use_skin = '' + return None + return use_skin + '/' + url diff --git a/forum/templatetags/extra_tags.py b/forum/templatetags/extra_tags.py index 972e8c9e..e82537fa 100644 --- a/forum/templatetags/extra_tags.py +++ b/forum/templatetags/extra_tags.py @@ -290,7 +290,7 @@ def get_latest_changed_timestamp(): @register.simple_tag def media(url): - url = skins.find_media_source(url) + url = skins.loaders.find_media_source(url) if url: url = '///' + settings.FORUM_SCRIPT_ALIAS + '/m/' + url return os.path.normpath(url) + '?v=%d' \ @@ -374,7 +374,7 @@ class BlockMediaUrlNode(template.Node): for item in self.items: url += item.render(context) - url = skins.find_media_source(url) + url = skins.loaders.find_media_source(url) url = prefix + url out = os.path.normpath(url) + '?v=%d' % forum_settings.MEDIA_RESOURCE_REVISION return out.replace(' ','') diff --git a/forum/utils/colors.py b/forum/utils/colors.py index 8ef6f342..694cc3b0 100644 --- a/forum/utils/colors.py +++ b/forum/utils/colors.py @@ -13,7 +13,7 @@ def get_counter_colors(count, counter_max=10, empty_bg='white', empty_fg='black' blend_factor = 0 else: #todo deal with negative counts properly - blend_factor = 1 - math.fabs(float(count)/float(max)) + blend_factor = 1 - math.fabs(float(count)/float(counter_max)) max_fg_color = Color.NewFromHtml(max_fg) fg = Color.NewFromHtml(min_fg).Blend(max_fg_color, blend_factor) diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index 44fc1454..3bbc706b 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-05-23 17:31-0400\n" +"POT-Creation-Date: 2010-06-03 18:48-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Evgeny Fadeev <evgeny.fadeev@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: django_authopenid/forms.py:72 django_authopenid/views.py:133 +#: django_authopenid/forms.py:72 django_authopenid/views.py:134 msgid "i-names are not supported" msgstr "" @@ -144,7 +144,7 @@ msgstr "" msgid "openid/" msgstr "" -#: django_authopenid/urls.py:43 forum/urls.py:52 forum/urls.py:56 +#: django_authopenid/urls.py:43 forum/urls.py:113 forum/urls.py:120 msgid "delete/" msgstr "" @@ -156,405 +156,401 @@ msgstr "" msgid "external-login/signup/" msgstr "" -#: django_authopenid/views.py:140 +#: django_authopenid/views.py:141 #, python-format msgid "OpenID %(openid_url)s is invalid" msgstr "" -#: django_authopenid/views.py:615 +#: django_authopenid/views.py:616 msgid "Welcome email subject line" msgstr "Welcome to the Q&A forum" -#: django_authopenid/views.py:721 +#: django_authopenid/views.py:722 msgid "Password changed." msgstr "" -#: django_authopenid/views.py:733 django_authopenid/views.py:739 +#: django_authopenid/views.py:734 django_authopenid/views.py:740 #, python-format msgid "your email needs to be validated see %(details_url)s" msgstr "" "Your email needs to be validated. Please see details <a " "id='validate_email_alert' href='%(details_url)s'>here</a>." -#: django_authopenid/views.py:760 +#: django_authopenid/views.py:761 msgid "Email verification subject line" msgstr "Verification Email from Q&A forum" -#: django_authopenid/views.py:851 +#: django_authopenid/views.py:852 msgid "your email was not changed" msgstr "" -#: django_authopenid/views.py:899 django_authopenid/views.py:1057 +#: django_authopenid/views.py:900 django_authopenid/views.py:1058 #, python-format msgid "No OpenID %s found associated in our database" msgstr "" -#: django_authopenid/views.py:903 django_authopenid/views.py:1064 +#: django_authopenid/views.py:904 django_authopenid/views.py:1065 #, python-format msgid "The OpenID %s isn't associated to current user logged in" msgstr "" -#: django_authopenid/views.py:911 +#: django_authopenid/views.py:912 msgid "Email Changed." msgstr "" -#: django_authopenid/views.py:989 +#: django_authopenid/views.py:990 msgid "This OpenID is already associated with another account." msgstr "" -#: django_authopenid/views.py:994 +#: django_authopenid/views.py:995 #, python-format msgid "OpenID %s is now associated with your account." msgstr "" -#: django_authopenid/views.py:1067 +#: django_authopenid/views.py:1068 msgid "Account deleted." msgstr "" -#: django_authopenid/views.py:1119 +#: django_authopenid/views.py:1120 msgid "Request for new password" msgstr "" -#: django_authopenid/views.py:1133 +#: django_authopenid/views.py:1134 msgid "A new password and the activation link were sent to your email address." msgstr "" -#: django_authopenid/views.py:1165 +#: django_authopenid/views.py:1166 #, python-format msgid "" "Could not change password. Confirmation key '%s' is not " "registered." msgstr "" -#: django_authopenid/views.py:1175 +#: django_authopenid/views.py:1176 msgid "" "Can not change password. User don't exist anymore in our " "database." msgstr "" -#: django_authopenid/views.py:1185 +#: django_authopenid/views.py:1186 #, python-format msgid "Password changed for %s. You may now sign in." msgstr "" -#: forum/auth.py:470 +#: forum/auth.py:528 msgid "Your question and all of it's answers have been deleted" msgstr "" -#: forum/auth.py:472 +#: forum/auth.py:531 msgid "Your question has been deleted" msgstr "" -#: forum/auth.py:475 +#: forum/auth.py:535 msgid "The question and all of it's answers have been deleted" msgstr "" -#: forum/auth.py:477 +#: forum/auth.py:538 msgid "The question has been deleted" msgstr "" -#: forum/feed.py:18 +#: forum/feed.py:22 msgid " - " msgstr "" -#: forum/feed.py:18 +#: forum/feed.py:22 msgid "latest questions" msgstr "" -#: forum/forms.py:24 forum/skins/default/templates/answer_edit_tips.html:35 +#: forum/forms.py:23 forum/skins/default/templates/answer_edit_tips.html:35 #: forum/skins/default/templates/answer_edit_tips.html:39 #: forum/skins/default/templates/question_edit_tips.html:32 #: forum/skins/default/templates/question_edit_tips.html:37 msgid "title" msgstr "" -#: forum/forms.py:25 +#: forum/forms.py:24 msgid "please enter a descriptive title for your question" msgstr "" -#: forum/forms.py:30 +#: forum/forms.py:29 msgid "title must be > 10 characters" msgstr "" -#: forum/forms.py:39 +#: forum/forms.py:38 msgid "content" msgstr "" -#: forum/forms.py:45 +#: forum/forms.py:44 msgid "question content must be > 10 characters" msgstr "" -#: forum/forms.py:54 forum/skins/default/templates/header.html:28 +#: forum/forms.py:53 forum/skins/default/templates/header.html:28 msgid "tags" msgstr "" -#: forum/forms.py:56 +#: forum/forms.py:55 msgid "" "Tags are short keywords, with no spaces within. Up to five tags can be used." msgstr "" -#: forum/forms.py:63 forum/skins/default/templates/question_retag.html:39 +#: forum/forms.py:62 forum/skins/default/templates/question_retag.html:39 msgid "tags are required" msgstr "" -#: forum/forms.py:72 +#: forum/forms.py:71 #, python-format msgid "please use %(tag_count)d tag or less" msgid_plural "please use %(tag_count)d tags or less" msgstr[0] "" msgstr[1] "" -#: forum/forms.py:81 +#: forum/forms.py:80 #, python-format msgid "each tag must be shorter than %(max_chars)d character" msgid_plural "each tag must be shorter than %(max_chars)d characters" msgstr[0] "" msgstr[1] "" -#: forum/forms.py:89 +#: forum/forms.py:88 msgid "use-these-chars-in-tags" msgstr "" -#: forum/forms.py:99 +#: forum/forms.py:98 #: forum/skins/default/templates/post_contributor_info.html:7 #: forum/skins/default/templates/question_summary_list_roll.html:26 #: forum/skins/default/templates/question_summary_list_roll.html:38 msgid "community wiki" msgstr "" -#: forum/forms.py:100 +#: forum/forms.py:99 msgid "" "if you choose community wiki option, the question and answer do not generate " "points and name of author will not be shown" msgstr "" -#: forum/forms.py:116 +#: forum/forms.py:115 msgid "update summary:" msgstr "" -#: forum/forms.py:117 +#: forum/forms.py:116 msgid "" "enter a brief summary of your revision (e.g. fixed spelling, grammar, " "improved style, this field is optional)" msgstr "" -#: forum/forms.py:120 +#: forum/forms.py:119 msgid "Automatically accept user's contributions for the email updates" msgstr "" -#: forum/forms.py:211 +#: forum/forms.py:210 msgid "Your name:" msgstr "" -#: forum/forms.py:212 +#: forum/forms.py:211 msgid "Email (not shared with anyone):" msgstr "" -#: forum/forms.py:213 +#: forum/forms.py:212 msgid "Your message:" msgstr "" -#: forum/forms.py:296 +#: forum/forms.py:295 msgid "this email does not have to be linked to gravatar" msgstr "" -#: forum/forms.py:298 +#: forum/forms.py:297 msgid "Screen name" msgstr "" -#: forum/forms.py:299 +#: forum/forms.py:298 msgid "Real name" msgstr "" -#: forum/forms.py:300 +#: forum/forms.py:299 msgid "Website" msgstr "" -#: forum/forms.py:301 +#: forum/forms.py:300 msgid "Location" msgstr "" -#: forum/forms.py:302 +#: forum/forms.py:301 msgid "Date of birth" msgstr "" -#: forum/forms.py:302 +#: forum/forms.py:301 msgid "will not be shown, used to calculate age, format: YYYY-MM-DD" msgstr "" -#: forum/forms.py:303 forum/skins/default/templates/account_settings.html:21 +#: forum/forms.py:302 forum/skins/default/templates/account_settings.html:21 #: forum/skins/default/templates/authopenid/settings.html:21 msgid "Profile" msgstr "" -#: forum/forms.py:334 forum/forms.py:335 +#: forum/forms.py:333 forum/forms.py:334 msgid "this email has already been registered, please use another one" msgstr "" -#: forum/forms.py:341 +#: forum/forms.py:340 msgid "Choose email tag filter" msgstr "" -#: forum/forms.py:380 +#: forum/forms.py:379 msgid "Asked by me" msgstr "" -#: forum/forms.py:383 +#: forum/forms.py:382 msgid "Answered by me" msgstr "" -#: forum/forms.py:386 +#: forum/forms.py:385 msgid "Individually selected" msgstr "" -#: forum/forms.py:389 +#: forum/forms.py:388 msgid "Entire forum (tag filtered)" msgstr "" -#: forum/forms.py:393 +#: forum/forms.py:392 msgid "Comments and posts mentioning me" msgstr "" -#: forum/forms.py:449 +#: forum/forms.py:450 msgid "okay, let's try!" msgstr "" -#: forum/forms.py:450 +#: forum/forms.py:451 msgid "no community email please, thanks" msgstr "no askbot email please, thanks" -#: forum/forms.py:454 +#: forum/forms.py:455 msgid "please choose one of the options above" msgstr "" -#: forum/urls.py:28 +#: forum/urls.py:37 msgid "upfiles/" msgstr "" -#: forum/urls.py:33 +#: forum/urls.py:42 msgid "about/" msgstr "" -#: forum/urls.py:34 forum/conf/site_settings.py:76 +#: forum/urls.py:43 forum/conf/site_settings.py:75 msgid "faq/" msgstr "" -#: forum/urls.py:35 +#: forum/urls.py:44 msgid "privacy/" msgstr "" -#: forum/urls.py:36 +#: forum/urls.py:45 msgid "logout/" msgstr "" -#: forum/urls.py:37 forum/urls.py:38 forum/urls.py:39 forum/urls.py:56 +#: forum/urls.py:47 forum/urls.py:52 forum/urls.py:57 forum/urls.py:120 msgid "answers/" msgstr "" -#: forum/urls.py:37 forum/urls.py:49 forum/urls.py:52 forum/urls.py:56 +#: forum/urls.py:47 forum/urls.py:102 forum/urls.py:113 forum/urls.py:120 msgid "comments/" msgstr "" -#: forum/urls.py:38 forum/urls.py:43 forum/urls.py:78 +#: forum/urls.py:52 forum/urls.py:72 forum/urls.py:166 #: forum/skins/default/templates/user_info.html:47 msgid "edit/" msgstr "" -#: forum/urls.py:39 forum/urls.py:48 +#: forum/urls.py:57 forum/urls.py:97 msgid "revisions/" msgstr "" -#: forum/urls.py:40 forum/urls.py:41 forum/urls.py:42 forum/urls.py:43 -#: forum/urls.py:44 forum/urls.py:45 forum/urls.py:46 forum/urls.py:47 -#: forum/urls.py:48 forum/urls.py:49 forum/urls.py:52 +#: forum/urls.py:62 forum/urls.py:67 forum/urls.py:72 forum/urls.py:77 +#: forum/urls.py:82 forum/urls.py:87 forum/urls.py:92 forum/urls.py:97 +#: forum/urls.py:102 forum/urls.py:113 msgid "questions/" msgstr "" -#: forum/urls.py:41 forum_modules/books/urls.py:8 +#: forum/urls.py:67 forum_modules/books/urls.py:8 msgid "ask/" msgstr "" -#: forum/urls.py:42 -msgid "unanswered/" -msgstr "" - -#: forum/urls.py:44 +#: forum/urls.py:77 msgid "close/" msgstr "" -#: forum/urls.py:45 +#: forum/urls.py:82 msgid "reopen/" msgstr "" -#: forum/urls.py:46 +#: forum/urls.py:87 msgid "answer/" msgstr "" -#: forum/urls.py:47 +#: forum/urls.py:92 msgid "vote/" msgstr "" -#: forum/urls.py:50 +#: forum/urls.py:107 msgid "command/" msgstr "" -#: forum/urls.py:60 forum/views/readers.py:264 +#: forum/urls.py:127 forum/views/readers.py:256 msgid "question/" msgstr "" -#: forum/urls.py:61 forum/urls.py:62 +#: forum/urls.py:132 msgid "tags/" msgstr "" -#: forum/urls.py:64 forum/urls.py:68 +#: forum/urls.py:137 forum/urls.py:143 msgid "mark-tag/" msgstr "" -#: forum/urls.py:64 +#: forum/urls.py:137 msgid "interesting/" msgstr "" -#: forum/urls.py:68 +#: forum/urls.py:143 msgid "ignored/" msgstr "" -#: forum/urls.py:72 +#: forum/urls.py:149 msgid "unmark-tag/" msgstr "" -#: forum/urls.py:76 forum/urls.py:78 forum/urls.py:79 +#: forum/urls.py:155 forum/urls.py:166 forum/urls.py:171 msgid "users/" msgstr "" -#: forum/urls.py:77 +#: forum/urls.py:160 msgid "moderate-user/" msgstr "" -#: forum/urls.py:80 forum/urls.py:81 +#: forum/urls.py:176 forum/urls.py:181 msgid "badges/" msgstr "" -#: forum/urls.py:82 +#: forum/urls.py:186 msgid "messages/" msgstr "" -#: forum/urls.py:82 +#: forum/urls.py:186 msgid "markread/" msgstr "" -#: forum/urls.py:85 +#: forum/urls.py:197 msgid "upload/" msgstr "" -#: forum/urls.py:86 +#: forum/urls.py:198 msgid "search/" msgstr "" -#: forum/urls.py:87 +#: forum/urls.py:199 msgid "feedback/" msgstr "" -#: forum/urls.py:88 forum/urls.py:89 +#: forum/urls.py:200 msgid "account/" msgstr "" @@ -827,53 +823,53 @@ msgstr "" msgid "Loss for post owner when upvote is canceled" msgstr "" -#: forum/conf/site_settings.py:14 +#: forum/conf/site_settings.py:13 msgid "Q&A forum website parameters and urls" msgstr "" -#: forum/conf/site_settings.py:22 +#: forum/conf/site_settings.py:21 msgid "Site title for the Q&A forum" msgstr "" -#: forum/conf/site_settings.py:31 +#: forum/conf/site_settings.py:30 msgid "Comma separated list of Q&A site keywords" msgstr "" -#: forum/conf/site_settings.py:40 +#: forum/conf/site_settings.py:39 msgid "Copyright message to show in the footer" msgstr "" -#: forum/conf/site_settings.py:49 +#: forum/conf/site_settings.py:48 msgid "Site description for the search engines" msgstr "" -#: forum/conf/site_settings.py:57 +#: forum/conf/site_settings.py:56 msgid "Askbot" msgstr "" -#: forum/conf/site_settings.py:59 +#: forum/conf/site_settings.py:58 msgid "Short name for your Q&A forum" msgstr "" -#: forum/conf/site_settings.py:68 +#: forum/conf/site_settings.py:67 msgid "Base URL for your Q&A forum, must start with http or https" msgstr "" -#: forum/conf/site_settings.py:78 +#: forum/conf/site_settings.py:77 msgid "Link shown in the greeting message shown to the anonymous user" msgstr "" -#: forum/conf/site_settings.py:79 +#: forum/conf/site_settings.py:78 msgid "" "If you change this url from the default - then you will also probably want " "to adjust translation of the following string: " msgstr "" -#: forum/conf/site_settings.py:92 +#: forum/conf/site_settings.py:91 msgid "Feedback site URL" msgstr "" -#: forum/conf/site_settings.py:93 +#: forum/conf/site_settings.py:92 msgid "If left empty, a simple internal feedback form will be used instead" msgstr "" @@ -1141,144 +1137,144 @@ msgstr "" msgid "favorite" msgstr "" -#: forum/const/__init__.py:61 +#: forum/const/__init__.py:67 msgid "Question has no answers" msgstr "" -#: forum/const/__init__.py:62 +#: forum/const/__init__.py:68 msgid "Question has no accepted answers" msgstr "" -#: forum/const/__init__.py:100 +#: forum/const/__init__.py:106 msgid "question" msgstr "" -#: forum/const/__init__.py:101 forum/skins/default/templates/book.html:110 +#: forum/const/__init__.py:107 forum/skins/default/templates/book.html:110 msgid "answer" msgstr "" -#: forum/const/__init__.py:102 +#: forum/const/__init__.py:108 msgid "commented question" msgstr "" -#: forum/const/__init__.py:103 +#: forum/const/__init__.py:109 msgid "commented answer" msgstr "" -#: forum/const/__init__.py:104 +#: forum/const/__init__.py:110 msgid "edited question" msgstr "" -#: forum/const/__init__.py:105 +#: forum/const/__init__.py:111 msgid "edited answer" msgstr "" -#: forum/const/__init__.py:106 +#: forum/const/__init__.py:112 msgid "received award" msgstr "received badge" -#: forum/const/__init__.py:107 +#: forum/const/__init__.py:113 msgid "marked best answer" msgstr "" -#: forum/const/__init__.py:108 +#: forum/const/__init__.py:114 msgid "upvoted" msgstr "" -#: forum/const/__init__.py:109 +#: forum/const/__init__.py:115 msgid "downvoted" msgstr "" -#: forum/const/__init__.py:110 +#: forum/const/__init__.py:116 msgid "canceled vote" msgstr "" -#: forum/const/__init__.py:111 +#: forum/const/__init__.py:117 msgid "deleted question" msgstr "" -#: forum/const/__init__.py:112 +#: forum/const/__init__.py:118 msgid "deleted answer" msgstr "" -#: forum/const/__init__.py:113 +#: forum/const/__init__.py:119 msgid "marked offensive" msgstr "" -#: forum/const/__init__.py:114 +#: forum/const/__init__.py:120 msgid "updated tags" msgstr "" -#: forum/const/__init__.py:115 +#: forum/const/__init__.py:121 msgid "selected favorite" msgstr "" -#: forum/const/__init__.py:116 +#: forum/const/__init__.py:122 msgid "completed user profile" msgstr "" -#: forum/const/__init__.py:117 +#: forum/const/__init__.py:123 msgid "email update sent to user" msgstr "" -#: forum/const/__init__.py:118 +#: forum/const/__init__.py:124 msgid "mentioned in the post" msgstr "" -#: forum/const/__init__.py:148 +#: forum/const/__init__.py:171 msgid "question_answered" msgstr "answered question" -#: forum/const/__init__.py:149 +#: forum/const/__init__.py:172 msgid "question_commented" msgstr "commented question" -#: forum/const/__init__.py:150 +#: forum/const/__init__.py:173 msgid "answer_commented" msgstr "" -#: forum/const/__init__.py:151 +#: forum/const/__init__.py:174 msgid "answer_accepted" msgstr "" -#: forum/const/__init__.py:155 +#: forum/const/__init__.py:178 msgid "[closed]" msgstr "" -#: forum/const/__init__.py:156 +#: forum/const/__init__.py:179 msgid "[deleted]" msgstr "" -#: forum/const/__init__.py:157 forum/views/readers.py:395 -#: forum/views/readers.py:416 +#: forum/const/__init__.py:180 forum/views/readers.py:387 +#: forum/views/readers.py:408 msgid "initial version" msgstr "" -#: forum/const/__init__.py:158 +#: forum/const/__init__.py:181 msgid "retagged" msgstr "" -#: forum/const/__init__.py:163 +#: forum/const/__init__.py:186 msgid "exclude ignored tags" msgstr "" -#: forum/const/__init__.py:164 +#: forum/const/__init__.py:187 msgid "allow only selected tags" msgstr "" -#: forum/const/__init__.py:168 +#: forum/const/__init__.py:191 msgid "instantly" msgstr "" -#: forum/const/__init__.py:169 +#: forum/const/__init__.py:192 msgid "daily" msgstr "" -#: forum/const/__init__.py:170 +#: forum/const/__init__.py:193 msgid "weekly" msgstr "" -#: forum/const/__init__.py:171 +#: forum/const/__init__.py:194 msgid "no email" msgstr "" @@ -1291,11 +1287,12 @@ msgstr "" msgid "Congratulations, you are now an Administrator" msgstr "" -#: forum/management/commands/send_email_alerts.py:379 +#: forum/management/commands/send_email_alerts.py:380 +#: forum/models/__init__.py:320 msgid "email update message subject" msgstr "news from Q&A forum" -#: forum/management/commands/send_email_alerts.py:381 +#: forum/management/commands/send_email_alerts.py:382 #, python-format msgid "%(name)s, this is an update message header for %(num)d question" msgid_plural "%(name)s, this is an update message header for %(num)d questions" @@ -1306,42 +1303,42 @@ msgstr[1] "" "<p>Dear %(name)s,</p><p>The following %(num)d questions have been updated on " "the Q&A forum:</p>" -#: forum/management/commands/send_email_alerts.py:398 +#: forum/management/commands/send_email_alerts.py:399 msgid "new question" msgstr "" -#: forum/management/commands/send_email_alerts.py:415 +#: forum/management/commands/send_email_alerts.py:416 msgid "" "Please visit the forum and see what's new! Could you spread the word about " "it - can somebody you know help answering those questions or benefit from " "posting one?" msgstr "" -#: forum/management/commands/send_email_alerts.py:427 +#: forum/management/commands/send_email_alerts.py:428 msgid "" "Your most frequent subscription setting is 'daily' on selected questions. If " "you are receiving more than one email per dayplease tell about this issue to " "the forum administrator." msgstr "" -#: forum/management/commands/send_email_alerts.py:433 +#: forum/management/commands/send_email_alerts.py:434 msgid "" "Your most frequent subscription setting is 'weekly' if you are receiving " "this email more than once a week please report this issue to the forum " "administrator." msgstr "" -#: forum/management/commands/send_email_alerts.py:439 +#: forum/management/commands/send_email_alerts.py:440 msgid "" "There is a chance that you may be receiving links seen before - due to a " "technicality that will eventually go away. " msgstr "" -#: forum/management/commands/send_email_alerts.py:454 +#: forum/management/commands/send_email_alerts.py:455 #, python-format msgid "" -"go to %(link)s to change frequency of email updates or %(email)s " -"administrator" +"go to %(email_settings_link)s to change frequency of email updates or %" +"(admin_email)s administrator" msgstr "" "<p>Please remember that you can always <a href='%(link)s'>adjust</a> " "frequency of the email updates or turn them off entirely.<br/>If you believe " @@ -1781,84 +1778,84 @@ msgstr "" msgid "Created a tag used by 50 questions" msgstr "" -#: forum/models/question.py:517 +#: forum/models/question.py:531 #, python-format msgid "%(author)s modified the question" msgstr "" -#: forum/models/question.py:521 +#: forum/models/question.py:535 #, python-format msgid "%(people)s posted %(new_answer_count)s new answers" msgstr "" -#: forum/models/question.py:526 +#: forum/models/question.py:540 #, python-format msgid "%(people)s commented the question" msgstr "" -#: forum/models/question.py:531 +#: forum/models/question.py:545 #, python-format msgid "%(people)s commented answers" msgstr "" -#: forum/models/question.py:533 +#: forum/models/question.py:547 #, python-format msgid "%(people)s commented an answer" msgstr "" -#: forum/models/repute.py:13 forum/skins/default/templates/badges.html:54 +#: forum/models/repute.py:16 forum/skins/default/templates/badges.html:54 msgid "gold" msgstr "" -#: forum/models/repute.py:14 forum/skins/default/templates/badges.html:62 +#: forum/models/repute.py:17 forum/skins/default/templates/badges.html:62 msgid "silver" msgstr "" -#: forum/models/repute.py:15 forum/skins/default/templates/badges.html:69 +#: forum/models/repute.py:18 forum/skins/default/templates/badges.html:69 msgid "bronze" msgstr "" -#: forum/models/tag.py:81 +#: forum/models/tag.py:84 msgid "interesting" msgstr "" -#: forum/models/tag.py:81 +#: forum/models/tag.py:84 msgid "ignored" msgstr "" -#: forum/models/user.py:217 +#: forum/models/user.py:212 msgid "Entire forum" msgstr "" -#: forum/models/user.py:218 +#: forum/models/user.py:213 msgid "Questions that I asked" msgstr "" -#: forum/models/user.py:219 +#: forum/models/user.py:214 msgid "Questions that I answered" msgstr "" -#: forum/models/user.py:220 +#: forum/models/user.py:215 msgid "Individually selected questions" msgstr "" -#: forum/models/user.py:221 +#: forum/models/user.py:216 msgid "Mentions and comment responses" msgstr "" -#: forum/models/user.py:224 +#: forum/models/user.py:219 msgid "Instantly" msgstr "" -#: forum/models/user.py:225 +#: forum/models/user.py:220 msgid "Daily" msgstr "" -#: forum/models/user.py:226 +#: forum/models/user.py:221 msgid "Weekly" msgstr "" -#: forum/models/user.py:227 +#: forum/models/user.py:222 msgid "No email" msgstr "" @@ -2696,7 +2693,7 @@ msgid "users" msgstr "people" #: forum/skins/default/templates/header.html:30 -#: forum/templatetags/extra_tags.py:178 forum/templatetags/extra_tags.py:207 +#: forum/templatetags/extra_tags.py:177 forum/templatetags/extra_tags.py:206 msgid "badges" msgstr "" @@ -2708,33 +2705,70 @@ msgstr "" msgid "search" msgstr "" -#: forum/skins/default/templates/instant_notification.html:16 +#: forum/skins/default/templates/instant_notification.html:3 #, python-format -msgid "Dear %(user_name)s," +msgid "<p>Dear %(receiving_user_name)s,</p>" msgstr "" -#: forum/skins/default/templates/instant_notification.html:20 +#: forum/skins/default/templates/instant_notification.html:6 #, python-format msgid "" "\n" -"%(author_link)s has left you a <a href=\"%(update_url|safe)s\">comment</a>\n" -"related to question <a href=\"%(origin_post_url|safe)s\">%(origin_post_title)" -"s</a>\n" +"<p>%(update_author_name)s left a <a href=\"%%(post_url)s\">new comment</a>\n" +"for question \"%(origin_post_title)s\"</p>\n" msgstr "" -#: forum/skins/default/templates/instant_notification.html:27 +#: forum/skins/default/templates/instant_notification.html:12 #, python-format msgid "" "\n" -"%(author_link)s has left a new <a href=\"%(update_url|safe)s\">comment</a>\n" -"related to question <a href=\"%(origin_post_url|safe)s\">%(origin_post_title)" -"s</a>\n" +"<p>%(update_author_name)s left a <a href=\"%(post_url)s\">new comment</a>\n" +" for an answer to question \"%(origin_post_title)s\"</p>\n" msgstr "" -#: forum/skins/default/templates/instant_notification.html:35 +#: forum/skins/default/templates/instant_notification.html:18 +#, python-format msgid "" "\n" +"<p>%(update_author_name)s answered a question \n" +"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n" +msgstr "" + +#: forum/skins/default/templates/instant_notification.html:24 +#, python-format +msgid "" "\n" +"<p>%(update_author_name)s asked a question \n" +"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n" +msgstr "" + +#: forum/skins/default/templates/instant_notification.html:29 +#, python-format +msgid "" +"\n" +"<p>%(update_author_name)s updated an answer to the question\n" +"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n" +msgstr "" + +#: forum/skins/default/templates/instant_notification.html:34 +#, python-format +msgid "" +"\n" +"<p>%(update_author_name)s updated a question \n" +"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n" +msgstr "" + +#: forum/skins/default/templates/instant_notification.html:40 +#, python-format +msgid "" +"\n" +"<p>Please note - you can easily <a href=\"%(user_subscriptions_url)s" +"\">change</a>\n" +"how often you receive these notifications.</p>\n" +msgstr "" + +#: forum/skins/default/templates/instant_notification.html:44 +msgid "<p>Sincerely,<br/>Forum Administrator</p>" msgstr "" #: forum/skins/default/templates/logout.html:6 @@ -3524,7 +3558,7 @@ msgid "change picture" msgstr "" #: forum/skins/default/templates/user_info.html:25 -#: forum/skins/default/templates/users.html:26 forum/views/users.py:948 +#: forum/skins/default/templates/users.html:26 forum/views/users.py:959 msgid "reputation" msgstr "karma" @@ -3658,19 +3692,19 @@ msgstr[1] "" msgid "User profile" msgstr "" -#: forum/skins/default/templates/user_tabs.html:7 forum/views/users.py:922 +#: forum/skins/default/templates/user_tabs.html:7 forum/views/users.py:933 msgid "overview" msgstr "" -#: forum/skins/default/templates/user_tabs.html:9 forum/views/users.py:930 +#: forum/skins/default/templates/user_tabs.html:9 forum/views/users.py:941 msgid "recent activity" msgstr "" -#: forum/skins/default/templates/user_tabs.html:12 forum/views/users.py:940 +#: forum/skins/default/templates/user_tabs.html:12 forum/views/users.py:951 msgid "comments and answers to others questions" msgstr "" -#: forum/skins/default/templates/user_tabs.html:13 forum/views/users.py:939 +#: forum/skins/default/templates/user_tabs.html:13 forum/views/users.py:950 msgid "responses" msgstr "" @@ -3682,11 +3716,11 @@ msgstr "Graph of user karma" msgid "reputation history" msgstr "karma history" -#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:966 +#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:977 msgid "user vote record" msgstr "" -#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:965 +#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:976 msgid "casted votes" msgstr "votes" @@ -3698,11 +3732,11 @@ msgstr "" msgid "favorites" msgstr "" -#: forum/skins/default/templates/user_tabs.html:27 forum/views/users.py:975 +#: forum/skins/default/templates/user_tabs.html:27 forum/views/users.py:986 msgid "email subscription settings" msgstr "" -#: forum/skins/default/templates/user_tabs.html:28 forum/views/users.py:974 +#: forum/skins/default/templates/user_tabs.html:28 forum/views/users.py:985 msgid "email subscriptions" msgstr "subscriptions" @@ -4295,31 +4329,31 @@ msgstr "" msgid "no items in counter" msgstr "no" -#: forum/templatetags/extra_tags.py:54 +#: forum/templatetags/extra_tags.py:53 #, python-format msgid "%(username)s gravatar image" msgstr "" -#: forum/templatetags/extra_tags.py:179 forum/templatetags/extra_tags.py:206 +#: forum/templatetags/extra_tags.py:178 forum/templatetags/extra_tags.py:205 msgid "reputation points" msgstr "karma" -#: forum/templatetags/extra_tags.py:266 +#: forum/templatetags/extra_tags.py:265 msgid "2 days ago" msgstr "" -#: forum/templatetags/extra_tags.py:268 +#: forum/templatetags/extra_tags.py:267 msgid "yesterday" msgstr "" -#: forum/templatetags/extra_tags.py:270 +#: forum/templatetags/extra_tags.py:269 #, python-format msgid "%(hr)d hour ago" msgid_plural "%(hr)d hours ago" msgstr[0] "" msgstr[1] "" -#: forum/templatetags/extra_tags.py:272 +#: forum/templatetags/extra_tags.py:271 #, python-format msgid "%(min)d min ago" msgid_plural "%(min)d mins ago" @@ -4334,74 +4368,74 @@ msgstr "" msgid "choose a username" msgstr "Choose screen name" -#: forum/utils/forms.py:51 +#: forum/utils/forms.py:52 msgid "user name is required" msgstr "" -#: forum/utils/forms.py:52 +#: forum/utils/forms.py:53 msgid "sorry, this name is taken, please choose another" msgstr "" -#: forum/utils/forms.py:53 +#: forum/utils/forms.py:54 msgid "sorry, this name is not allowed, please choose another" msgstr "" -#: forum/utils/forms.py:54 +#: forum/utils/forms.py:55 msgid "sorry, there is no user with this name" msgstr "" -#: forum/utils/forms.py:55 +#: forum/utils/forms.py:56 msgid "sorry, we have a serious error - user name is taken by several users" msgstr "" -#: forum/utils/forms.py:56 +#: forum/utils/forms.py:57 msgid "user name can only consist of letters, empty space and underscore" msgstr "" -#: forum/utils/forms.py:112 +#: forum/utils/forms.py:118 msgid "your email address" msgstr "Your email <i>(never shared)</i>" -#: forum/utils/forms.py:113 +#: forum/utils/forms.py:119 msgid "email address is required" msgstr "" -#: forum/utils/forms.py:114 +#: forum/utils/forms.py:120 msgid "please enter a valid email address" msgstr "" -#: forum/utils/forms.py:115 +#: forum/utils/forms.py:121 msgid "this email is already used by someone else, please choose another" msgstr "" -#: forum/utils/forms.py:143 +#: forum/utils/forms.py:149 msgid "choose password" msgstr "Password" -#: forum/utils/forms.py:144 +#: forum/utils/forms.py:150 msgid "password is required" msgstr "" -#: forum/utils/forms.py:147 +#: forum/utils/forms.py:153 msgid "retype password" msgstr "Password <i>(please retype)</i>" -#: forum/utils/forms.py:148 +#: forum/utils/forms.py:154 msgid "please, retype your password" msgstr "" -#: forum/utils/forms.py:149 +#: forum/utils/forms.py:155 msgid "sorry, entered passwords did not match, please try again" msgstr "" -#: forum/views/commands.py:217 +#: forum/views/commands.py:218 #, python-format msgid "subscription saved, %(email)s needs validation, see %(details_url)s" msgstr "" "Your subscription is saved, but email address %(email)s needs to be " "validated, please see <a href='%(details_url)s'>more details here</a>" -#: forum/views/commands.py:225 +#: forum/views/commands.py:226 msgid "email update frequency has been set to daily" msgstr "" @@ -4417,76 +4451,76 @@ msgstr "" msgid "We look forward to hearing your feedback! Please, give it next time :)" msgstr "" -#: forum/views/users.py:882 forum/views/users.py:886 +#: forum/views/users.py:893 forum/views/users.py:897 msgid "changes saved" msgstr "" -#: forum/views/users.py:892 +#: forum/views/users.py:903 msgid "email updates canceled" msgstr "" -#: forum/views/users.py:923 +#: forum/views/users.py:934 msgid "user profile" msgstr "" -#: forum/views/users.py:924 +#: forum/views/users.py:935 msgid "user profile overview" msgstr "" -#: forum/views/users.py:931 +#: forum/views/users.py:942 msgid "recent user activity" msgstr "" -#: forum/views/users.py:932 +#: forum/views/users.py:943 msgid "profile - recent activity" msgstr "" -#: forum/views/users.py:941 +#: forum/views/users.py:952 msgid "profile - responses" msgstr "" -#: forum/views/users.py:949 +#: forum/views/users.py:960 msgid "user reputation in the community" msgstr "user karma" -#: forum/views/users.py:950 +#: forum/views/users.py:961 msgid "profile - user reputation" msgstr "Profile - User's Karma" -#: forum/views/users.py:956 +#: forum/views/users.py:967 msgid "favorite questions" msgstr "" -#: forum/views/users.py:957 +#: forum/views/users.py:968 msgid "users favorite questions" msgstr "" -#: forum/views/users.py:958 +#: forum/views/users.py:969 msgid "profile - favorite questions" msgstr "" -#: forum/views/users.py:967 +#: forum/views/users.py:978 msgid "profile - votes" msgstr "" -#: forum/views/users.py:976 +#: forum/views/users.py:987 msgid "profile - email subscriptions" msgstr "" -#: forum/views/writers.py:69 +#: forum/views/writers.py:67 msgid "uploading images is limited to users with >60 reputation points" msgstr "sorry, file uploading requires karma >60" -#: forum/views/writers.py:71 +#: forum/views/writers.py:69 msgid "allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'" msgstr "" -#: forum/views/writers.py:73 +#: forum/views/writers.py:71 #, python-format msgid "maximum upload file size is %sK" msgstr "" -#: forum/views/writers.py:75 +#: forum/views/writers.py:73 #, python-format msgid "" "Error uploading file. Please contact the site administrator. Thank you. %s" @@ -4644,6 +4678,21 @@ msgstr "" msgid "Uncollapse all" msgstr "" +#, fuzzy +#~ msgid "user_subscriptions_url" +#~ msgstr "subscriptions" + +#, fuzzy +#~ msgid "" +#~ "go to %(email_settings_url)s to change frequency of email updates or %" +#~ "(admin_email)s administrator" +#~ msgstr "" +#~ "<p>Please remember that you can always <a href='%(link)s'>adjust</a> " +#~ "frequency of the email updates or turn them off entirely.<br/>If you " +#~ "believe that this message was sent in an error, please email about it the " +#~ "forum administrator at %(email)s.</p><p>Sincerely,</p><p>Your friendly " +#~ "Q&A forum server.</p>" + #~ msgid "%(q_num)s question found" #~ msgid_plural "%(q_num)s questions found" #~ msgstr[0] "One question found" @@ -4737,13 +4786,6 @@ msgstr "" #~ msgstr "<a href='%(gravatar_faq_url)s'>gravatar</a>" #~ msgid "" -#~ "Sincerely,<br />\n" -#~ " Forum Administrator" -#~ msgstr "" -#~ "Sincerely,\n" -#~ "Q&A Forum Administrator" - -#~ msgid "" #~ "\n" #~ " have total %(q_num)s unanswered questions\n" #~ " " diff --git a/settings.py b/settings.py index 1f78d0e6..ee820cd5 100644 --- a/settings.py +++ b/settings.py @@ -13,7 +13,7 @@ TEMPLATE_LOADERS = ( 'django.template.loaders.app_directories.load_template_source', #below is forum stuff for this tuple - 'forum.skins.load_template_source',#forum stuff + 'forum.skins.loaders.load_template_source',#forum stuff # 'django.template.loaders.eggs.load_template_source', ) |