summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--development.log72
-rw-r--r--django_authopenid/util.py1
-rw-r--r--forum/admin.py12
-rw-r--r--forum/auth.py2
-rw-r--r--forum/forms.py1
-rw-r--r--forum/management/commands/send_email_alerts.py2
-rw-r--r--forum/managers.py18
-rw-r--r--forum/models.py4
-rw-r--r--forum/skins/default/media/js/com.cnprog.admin.js4
-rw-r--r--forum/skins/default/media/js/com.cnprog.i18n.js4
-rw-r--r--forum/skins/default/media/style/style.css1
-rw-r--r--forum/skins/default/templates/ask.html7
-rw-r--r--forum/skins/default/templates/authopenid/complete.html1
-rw-r--r--forum/skins/default/templates/authopenid/confirm_email.txt14
-rw-r--r--forum/skins/default/templates/authopenid/email_validation.txt16
-rw-r--r--forum/skins/default/templates/authopenid/sendpw_email.txt4
-rwxr-xr-xforum/skins/default/templates/base.html3
-rw-r--r--forum/skins/default/templates/header.html1
-rw-r--r--forum/skins/default/templates/index.html5
-rw-r--r--forum/skins/default/templates/question.html521
-rw-r--r--forum/skins/default/templates/question_edit.html6
-rw-r--r--forum/skins/default/templates/questions.html275
-rw-r--r--forum/skins/default/templates/user_email_subscriptions.html3
-rw-r--r--forum/skins/default/templates/user_info.html2
-rw-r--r--forum/templatetags/extra_filters.py6
-rw-r--r--forum/views.py2410
-rw-r--r--junk.py3
-rw-r--r--locale/en/LC_MESSAGES/django.mobin26986 -> 367 bytes
-rw-r--r--locale/en/LC_MESSAGES/django.po2240
-rw-r--r--locale/es/LC_MESSAGES/django.mobin49713 -> 367 bytes
-rw-r--r--locale/es/LC_MESSAGES/django.po3213
-rw-r--r--middleware/__init__.py~HEAD0
-rwxr-xr-xrmpyc1
-rw-r--r--session_messages/.svn/all-wcprops23
-rw-r--r--session_messages/.svn/dir-prop-base6
-rw-r--r--session_messages/.svn/entries64
-rw-r--r--session_messages/.svn/format1
-rw-r--r--session_messages/.svn/text-base/__init__.py.svn-base36
-rw-r--r--session_messages/.svn/text-base/context_processors.py.svn-base48
-rw-r--r--session_messages/.svn/text-base/models.py.svn-base3
-rwxr-xr-xsettings.py1
-rwxr-xr-xsettings_local.py.dist107
-rw-r--r--templates/unanswered.html132
43 files changed, 6720 insertions, 2553 deletions
diff --git a/development.log b/development.log
new file mode 100644
index 00000000..abe1aac0
--- /dev/null
+++ b/development.log
@@ -0,0 +1,72 @@
+==Aug 5, 2009 Evgeny==
+====Interface changes===
+Merged in my code that:
+* allows anonymous posting of Q&A and then login
+* per-question email notifications via 'send_email_alerts' command
+* allows space character in username
+* improves openid login
+* makes notification messages sticky - have to click "x" to dismiss
+* unanswered questions are now those with no accepted answer
+* added following setting parameters:
+
+settings.MIN_USERNAME_LENGTH = 1
+settings.EMAIL_UNIQUE = True|False
+settings.EMAIL_VALIDATION = 'on'|'off' #thought of maybe adding other options so type is string
+settings.GOOGLE_SITEMAP_CODE = <string>
+settings.GOOGLE_ANALYTICS_KEY = <string>
+
+===Fixes===
+* fixed incorrect answer count issue in question.html
+* translated Twittwer stuff in user_preferences.html
+* translated question_retag.html, except one phrase
+* added Adolfo's python2.4 fix
+* fixed template debugging comments so that they don't break page layout
+* reorganized header template so that it takes less vertical space
+
+===Code changes===
+* wrapped template context settings into a single settings dictionary
+* on login anonymous session is recorded so that anonymously posted questions (if any) could be found later
+* added models: AnonymousQuestion, AnonymousAnswer, EmailFeed (for notifications)
+* User model has two new fields email_key - 32 byte hex hash and email_isvalid - boolean
+ file sql_scripts/update_2009_07_05_EF.sql will make upgrade to the live database
+* added auth_processor to context.py which loads notification messages without deleting them
+ NOTE: default django auth processor must be removed!
+* added ajax actions questionSubscribeUpdates/questionUnsubscribeUpdates
+
+==Aug 4 2009, Evgeny==
+===Changes===
+* commented out LocaleMiddleware - language can be now switched with settings.LANGUAGE_CODE
+* added DATABASE_ENGINE line to settings_local
+===Merges===
+* Adolfo's slugification of urls
+* Added Chaitanyas changes for traditional login/signup and INSTALL file
+
+==July 26 2009, Evgeny==
+
+django_authopenid:
+considerably changed user interface
+[comment] - sorry - this is not done yet
+
+log/forum/forms.py:
+* added tag input validation using regex
+* fixed bug with date type mismatch near self.fields['birthday'] =
+ in EditUserForm.__init__()
+
+/forum/templatetags/extra_tags.py:
+* fixed date type mismatch in get_age()
+
+/templates/content/js/com.cnprog.post.js:
+* fixed bug with post deletion/recovery
+
+javascript:
+* changed to use of non-minified code - better for editing
+and debugging
+
+/templates/question.html:
+* fixed display of delete/undelete links
+
+templates:
+added comments in the beginning/end of each template
+for the debugging purposes - so that you know which template outputs what html
+<!-- user_favorites.html -->
+<!-- end user_favorites.html -->
diff --git a/django_authopenid/util.py b/django_authopenid/util.py
index 969af0b9..c7c9d8f3 100644
--- a/django_authopenid/util.py
+++ b/django_authopenid/util.py
@@ -21,6 +21,7 @@ from models import Association, Nonce
__all__ = ['OpenID', 'DjangoOpenIDStore', 'from_openid_response', 'clean_next']
+
class OpenID:
def __init__(self, openid_, issued, attrs=None, sreg_=None):
logging.debug('init janrain openid object')
diff --git a/forum/admin.py b/forum/admin.py
index 482da048..810ae3d0 100644
--- a/forum/admin.py
+++ b/forum/admin.py
@@ -46,15 +46,6 @@ class ReputeAdmin(admin.ModelAdmin):
class ActivityAdmin(admin.ModelAdmin):
""" admin class"""
-class BookAdmin(admin.ModelAdmin):
- """ admin class"""
-
-class BookAuthorInfoAdmin(admin.ModelAdmin):
- """ admin class"""
-
-class BookAuthorRssAdmin(admin.ModelAdmin):
- """ admin class"""
-
admin.site.register(Question, QuestionAdmin)
admin.site.register(Tag, TagAdmin)
@@ -69,6 +60,3 @@ admin.site.register(Badge, BadgeAdmin)
admin.site.register(Award, AwardAdmin)
admin.site.register(Repute, ReputeAdmin)
admin.site.register(Activity, ActivityAdmin)
-admin.site.register(Book, BookAdmin)
-admin.site.register(BookAuthorInfo, BookAuthorInfoAdmin)
-admin.site.register(BookAuthorRss, BookAuthorRssAdmin)
diff --git a/forum/auth.py b/forum/auth.py
index 1569482f..eb81f853 100644
--- a/forum/auth.py
+++ b/forum/auth.py
@@ -1,4 +1,4 @@
-"""
+ """
Authorisation related functions.
The actions a User is authorised to perform are dependent on their reputation
diff --git a/forum/forms.py b/forum/forms.py
index 308f853b..22799622 100644
--- a/forum/forms.py
+++ b/forum/forms.py
@@ -181,6 +181,7 @@ class EditQuestionForm(forms.Form):
tags = TagNamesField()
summary = SummaryField()
+
def __init__(self, question, revision, *args, **kwargs):
super(EditQuestionForm, self).__init__(*args, **kwargs)
self.fields['title'].initial = revision.title
diff --git a/forum/management/commands/send_email_alerts.py b/forum/management/commands/send_email_alerts.py
index 62f13d69..5e1eb3d0 100644
--- a/forum/management/commands/send_email_alerts.py
+++ b/forum/management/commands/send_email_alerts.py
@@ -57,6 +57,7 @@ class Command(NoArgsCommand):
q_ans = Q_set.filter(answers__author=user)
q_ans.cutoff_time = cutoff_time
elif feed.feed_type == 'q_all':
+
if user.tag_filter_setting == 'ignored':
ignored_tags = Tag.objects.filter(user_selections__reason='bad',user_selections__user=user)
q_all = Q_set.exclude( tags__in=ignored_tags )
@@ -140,7 +141,6 @@ class Command(NoArgsCommand):
output.append(_(string) % {'num':number})
def send_email_alerts(self):
-
#todo: move this to template
for user in User.objects.all():
q_list = self.get_updated_questions_for_user(user)
diff --git a/forum/managers.py b/forum/managers.py
index 3f580bd3..1705184a 100644
--- a/forum/managers.py
+++ b/forum/managers.py
@@ -74,6 +74,7 @@ class QuestionManager(models.Manager):
Questions with the individual tags will be added to list if above questions are not full.
"""
#print datetime.datetime.now()
+ from forum.models import Question
questions = list(self.filter(tagnames = question.tagnames, deleted=False).all())
tags_list = question.tags.all()
@@ -147,17 +148,22 @@ class TagManager(models.Manager):
class AnswerManager(models.Manager):
GET_ANSWERS_FROM_USER_QUESTIONS = u'SELECT answer.* FROM answer INNER JOIN question ON answer.question_id = question.id WHERE question.author_id =%s AND answer.author_id <> %s'
- def get_answers_from_question(self, question, user=None):
+ def get_answers_from_question(self, question, user=None, other_orderby = None):
"""
Retrieves visibile answers for the given question. Delete answers
are only visibile to the person who deleted them.
- """
-
+ """
if user is None or not user.is_authenticated():
- return self.filter(question=question, deleted=False)
+ q = self.filter(question=question, deleted=False)
+ else:
+ q = self.filter(Q(question=question),
+ Q(deleted=False) | Q(deleted_by=user))
+ if other_orderby is None:
+ q = q.order_by("-accepted")
else:
- return self.filter(Q(question=question),
- Q(deleted=False) | Q(deleted_by=user))
+ q = q.order_by("-accepted", other_orderby)
+
+ return q
def get_answers_from_questions(self, user_id):
"""
diff --git a/forum/models.py b/forum/models.py
index 2da8ef7b..8a24e631 100644
--- a/forum/models.py
+++ b/forum/models.py
@@ -738,10 +738,10 @@ def record_comment_event(instance, created, **kwargs):
from django.contrib.contenttypes.models import ContentType
question_type = ContentType.objects.get_for_model(Question)
question_type_id = question_type.id
- if (instance.content_type_id == question_type_id):
+ if (instance.content_type_id == question_type_id):
type = TYPE_ACTIVITY_COMMENT_QUESTION
else:
- type = TYPE_ACTIVITY_COMMENT_ANSWER
+ type=TYPE_ACTIVITY_COMMENT_ANSWER
activity = Activity(user=instance.user, active_at=instance.added_at, content_object=instance, activity_type=type)
activity.save()
diff --git a/forum/skins/default/media/js/com.cnprog.admin.js b/forum/skins/default/media/js/com.cnprog.admin.js
index 39dff48c..974dce23 100644
--- a/forum/skins/default/media/js/com.cnprog.admin.js
+++ b/forum/skins/default/media/js/com.cnprog.admin.js
@@ -3,7 +3,11 @@ $(document).ready( function(){
success: function(a,b){$('.admin #action_status').html($.i18n._('changes saved'));},
dataType:'json',
timeout:5000,
+<<<<<<< HEAD:templates/content/js/com.cnprog.admin.js
+ url: $.i18n._('/') + $.i18n._('moderate-user/') + viewUserID + '/'
+=======
url: scriptUrl + $.i18n._('moderate-user/') + viewUserID + '/'
+>>>>>>> 82d35490db90878f013523c4d1a5ec3af2df8b23:templates/content/js/com.cnprog.admin.js
};
var form = $('.admin #moderate_user_form').ajaxForm(options);
var box = $('.admin input#id_is_approved').click(function(){
diff --git a/forum/skins/default/media/js/com.cnprog.i18n.js b/forum/skins/default/media/js/com.cnprog.i18n.js
index da9bf396..58cb8f16 100644
--- a/forum/skins/default/media/js/com.cnprog.i18n.js
+++ b/forum/skins/default/media/js/com.cnprog.i18n.js
@@ -59,6 +59,10 @@ var i18nZh = {
};
var i18nEn = {
+<<<<<<< HEAD:templates/content/js/com.cnprog.i18n.js
+ '/':'/',
+=======
+>>>>>>> 82d35490db90878f013523c4d1a5ec3af2df8b23:templates/content/js/com.cnprog.i18n.js
'need >15 points to report spam':'need >15 points to report spam ',
'>15 points requried to upvote':'>15 points required to upvote ',
'tags cannot be empty':'please enter at least one tag',
diff --git a/forum/skins/default/media/style/style.css b/forum/skins/default/media/style/style.css
index 175fcb66..88c7e7db 100644
--- a/forum/skins/default/media/style/style.css
+++ b/forum/skins/default/media/style/style.css
@@ -1163,6 +1163,7 @@ ul.bulleta li {background:url(../images/bullet_green.gif) no-repeat 0px 2px; pad
.message p {
margin-bottom:0px;
}
+
p.space-above {
margin-top:10px;
}
diff --git a/forum/skins/default/templates/ask.html b/forum/skins/default/templates/ask.html
index 083b01d9..84253be5 100644
--- a/forum/skins/default/templates/ask.html
+++ b/forum/skins/default/templates/ask.html
@@ -115,6 +115,13 @@
<p class="title-desc">
{{ form.tags.help_text }}
</p>
+ <p class="form-item">
+ <strong>{{ form.categories.label_tag }}:</strong> {% trans "(required)" %} <span class="form-error"></span><br>
+ {{ form.categories }} {{ form.categories.errors }}
+ </p>
+ <p class="title-desc">
+ {{ form.categories.help_text }}
+ </p>
{% if not request.user.is_authenticated %}
<input type="submit" value="{% trans "Login/signup to post your question" %}" class="submit" />
{% else %}
diff --git a/forum/skins/default/templates/authopenid/complete.html b/forum/skins/default/templates/authopenid/complete.html
index 62970e38..72dca1a5 100644
--- a/forum/skins/default/templates/authopenid/complete.html
+++ b/forum/skins/default/templates/authopenid/complete.html
@@ -92,6 +92,7 @@ parameters:
{% endif %}
{{ form1.email }}
</div>
+ <p class='nomargin'>{% trans "Tag filter tool will be your right panel, once you log in." %}</p>
<p>{% trans "receive updates motivational blurb" %}</p>
<div class='simple-subscribe-options'>
{{email_feeds_form.subscribe}}
diff --git a/forum/skins/default/templates/authopenid/confirm_email.txt b/forum/skins/default/templates/authopenid/confirm_email.txt
index 3a01f146..0b3b2505 100644
--- a/forum/skins/default/templates/authopenid/confirm_email.txt
+++ b/forum/skins/default/templates/authopenid/confirm_email.txt
@@ -1,13 +1,13 @@
-{% load i18n %}
-{% trans "Thank you for registering at our Q&A forum!" %}
+Gracias por registrarse en Hasked.com
-{% trans "Your account details are:" %}
+Los detalles de su cuenta son:
-{% trans "Username:" %} {{ username }}
-{% trans "Password:" %} {{ password }}
+Nombre de usuario: {{ username }}
+Contraseña: {{ password }}
{% trans "Please sign in here:" %}
{{signup_url}}
-{% blocktrans %}Sincerely,
-Forum Administrator{% endblocktrans %}
+Saludos,
+El equipo administrador de Hasked.com
+
diff --git a/forum/skins/default/templates/authopenid/email_validation.txt b/forum/skins/default/templates/authopenid/email_validation.txt
index 5b166a9b..d741614f 100644
--- a/forum/skins/default/templates/authopenid/email_validation.txt
+++ b/forum/skins/default/templates/authopenid/email_validation.txt
@@ -1,15 +1,13 @@
-{% load i18n %}
-{% trans "Greetings from the Q&A forum" %},
+Saludos de Hasked.com,
-{% trans "To make use of the Forum, please follow the link below:" %}
+Para poder usar Hasked haga click en el siguiente link:
{{validation_link}}
-{% trans "Following the link above will help us verify your email address." %}
+Seguir el link de arriba nos ayuda a verificar su correo electrónico.
-{% blocktrans %}If you beleive that this message was sent in mistake -
-no further action is needed. Just ingore this email, we apologize
-for any inconvenience{% endblocktrans %}
+Si cree que este mensaje se mandó por error no se requiere de mas acciones.
+Solo ignore este correo, pedimos disculpas por cualquier incoveniente
-{% blocktrans %}Sincerely,
-Forum Administrator{% endblocktrans %}
+Saludos,
+Equipo de administración de Hasked.com
diff --git a/forum/skins/default/templates/authopenid/sendpw_email.txt b/forum/skins/default/templates/authopenid/sendpw_email.txt
index f044ca45..c4910d12 100644
--- a/forum/skins/default/templates/authopenid/sendpw_email.txt
+++ b/forum/skins/default/templates/authopenid/sendpw_email.txt
@@ -5,5 +5,5 @@ If it were not you, it is safe to ignore this email.{% endblocktrans %}
{% blocktrans %}email explanation how to use new {{password}} for {{username}}
with the {{key_link}}{% endblocktrans %}
-{% blocktrans %}Sincerely,
-Forum Administrator{% endblocktrans %}
+Saludos,
+El Equipo administrador de Hasked.com
diff --git a/forum/skins/default/templates/base.html b/forum/skins/default/templates/base.html
index 9033b0c9..58ef0627 100755
--- a/forum/skins/default/templates/base.html
+++ b/forum/skins/default/templates/base.html
@@ -17,6 +17,9 @@
<link href="{% media "/media/style/style.css" %}" rel="stylesheet" type="text/css" />
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">google.load("jquery", "1.2.6");</script>
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.i18n.js" %}'></script>
+ <script type='text/javascript' src='{% href "/content/js/jquery.i18n.js" %}'></script>
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.utils.js" %}'></script>
<script type="text/javascript">
var i18nLang = '{{settings.LANGUAGE_CODE}}';
var scriptUrl = '/{{settings.FORUM_SCRIPT_ALIAS}}'
diff --git a/forum/skins/default/templates/header.html b/forum/skins/default/templates/header.html
index 3afc46c5..3b29ffc4 100644
--- a/forum/skins/default/templates/header.html
+++ b/forum/skins/default/templates/header.html
@@ -63,3 +63,4 @@
</div>
</div>
<!-- end template header.html -->
+
diff --git a/forum/skins/default/templates/index.html b/forum/skins/default/templates/index.html
index 7fa189ae..30cba1be 100644
--- a/forum/skins/default/templates/index.html
+++ b/forum/skins/default/templates/index.html
@@ -24,10 +24,11 @@
<div class="tabBar">
<div class="headQuestions">{% trans "Questions" %}</div>
<div class="tabsA">
- <a id="latest" href="{% url questions %}?sort=latest" title="{% trans "last updated questions" %}" >{% trans "newest" %}</a>
+ <a id="latest" href="{% url questions %}?sort=latest" title="{% trans "last updated questions" %}" >{% trans "newest" %}</a>
+ <a id="active" href="{% url questions %}?sort=active" title="{% trans "most recently updated questions" %}">{% trans "active" %}</a>
<a id="hottest" href="{% url questions %}?sort=hottest" title="{% trans "hottest questions" %}" >{% trans "hottest" %}</a>
<a id="mostvoted" href="{% url questions %}?sort=mostvoted" title="{% trans "most voted questions" %}" >{% trans "most voted" %}</a>
- <a id="all" href="{% url questions %}" title="{% trans "all questions" %}" >{% trans "all questions" %}</a>
+ <!--<a id="all" href="{% url questions %}" title="{% trans "all questions" %}" >{% trans "all questions" %}</a>-->
</div>
</div>
<!-- 问题列表 -->
diff --git a/forum/skins/default/templates/question.html b/forum/skins/default/templates/question.html
index fe9f5cde..ae562b6b 100644
--- a/forum/skins/default/templates/question.html
+++ b/forum/skins/default/templates/question.html
@@ -1,3 +1,523 @@
+<<<<<<< HEAD:templates/question.html
+{% extends "base.html" %}
+<!-- question.html -->
+{% load extra_tags %}
+{% load extra_filters %}
+{% load smart_if %}
+{% load humanize %}
+{% load i18n %}
+{% block title %}{% spaceless %}{{ question.get_question_title }}{% endspaceless %}{% endblock %}
+{% block forejs %}
+ <meta name="description" content="{{question.summary}}" />
+ <meta name="keywords" content="{{question.tagname_meta_generator}}" />
+ <link rel="canonical" href="{{settings.APP_URL}}{{question.get_absolute_url}}" />
+ {% if not question.closed %}
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.editor.js" %}'></script>
+ <script type='text/javascript' src='{% href "/content/js/wmd/showdown.js" %}'></script>
+ <script type='text/javascript' src='{% href "/content/js/wmd/wmd.js" %}'></script>
+ <link rel="stylesheet" type="text/css" href="{% href "/content/js/wmd/wmd.css" %}" />
+ {% endif %}
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.post.js" %}'></script>
+ <script type='text/javascript' src='{% href "/content/js/jquery.validate.pack.js" %}'></script>
+
+ <script type="text/javascript">
+ // define reputation needs for comments
+ var repNeededForComments = 50;
+ $().ready(function(){
+ $("#nav_questions").attr('className',"on");
+ var answer_sort_tab = "{{ tab_id }}";
+ $("#" + answer_sort_tab).attr('className',"on");
+
+ Vote.init({{ question.id }}, '{{ question.author.id }}','{{ request.user.id }}');
+
+ {% if not question.closed and request.user.is_authenticated %}initEditor();{% endif %}
+
+ lanai.highlightSyntax();
+ $('#btLogin').bind('click', function(){window.location.href='{% url user_signin %}'; } )
+ });
+
+ function initEditor(){
+ $('#editor').TextAreaResizer();
+ //highlight code synctax when editor has new text
+ $("#editor").typeWatch({highlight: false, wait: 3000,
+ captureLength: 5, callback: lanai.highlightSyntax});
+
+ var display = true;
+ var txt = "[{% trans "hide preview" %}]";
+ $('#pre-collapse').text(txt);
+ $('#pre-collapse').bind('click', function(){
+ txt = display ? "[{% trans "show preview" %}]" : "[{% trans "hide preview" %}]";
+ display = !display;
+ $('#previewer').toggle();
+ $('#pre-collapse').text(txt);
+ });
+
+ setupFormValidation("#fmanswer", CPValidator.getQuestionFormRules(), CPValidator.getQuestionFormMessages());
+ }
+
+ </script>
+{% endblock %}
+
+{% block content %}
+<div class="headNormal">
+ <a href="{{ question.get_absolute_url }}">{{ question.get_question_title }}</a>
+</div>
+<div id="main-body" class="">
+ <div id="askform">
+ <table style="width:100%;" id="question-table" {% if question.deleted %}class="deleted"{%endif%}>
+ <tr>
+ <td style="width:30px;vertical-align:top">
+ <div class="vote-buttons">
+ {% if question_vote %}
+ <img id="question-img-upvote-{{ question.id }}" class="question-img-upvote"
+ {% if question_vote.is_upvote %}
+ src="{% href "/content/images/vote-arrow-up-on.png" %}"
+ {% else %}
+ src="{% href "/content/images/vote-arrow-up.png" %}"
+ {% endif %}
+ alt="{% trans "i like this post (click again to cancel)" %}"
+ title="{% trans "i like this post (click again to cancel)" %}" />
+ <div id="question-vote-number-{{ question.id }}" class="vote-number"
+ title="{% trans "current number of votes" %}">
+ {{ question.score }}
+ </div>
+ <img id="question-img-downvote-{{ question.id }}" class="question-img-downvote"
+ {% if question_vote.is_downvote %}
+ src="{% href "/content/images/vote-arrow-down-on.png" %}"
+ {% else %}
+ src="{% href "/content/images/vote-arrow-down.png" %}"
+ {% endif %}
+ alt="{% trans "i dont like this post (click again to cancel)" %}"
+ title="{% trans "i dont like this post (click again to cancel)" %}" />
+
+ {% else %}
+ <img id="question-img-upvote-{{ question.id }}" class="question-img-upvote"
+ alt="{% trans "i like this post (click again to cancel)" %}"
+ src="{% href "/content/images/vote-arrow-up.png" %}"
+ title="{% trans "i like this post (click again to cancel)" %}" />
+ <div id="question-vote-number-{{ question.id }}" class="vote-number"
+ title="{% trans "current number of votes" %}">
+ {{ question.score }}
+ </div>
+ <img id="question-img-downvote-{{ question.id }}" class="question-img-downvote"
+ src="{% href "/content/images/vote-arrow-down.png" %}"
+ alt="{% trans "i dont like this post (click again to cancel)" %}"
+ title="{% trans "i dont like this post (click again to cancel)" %}" />
+
+ {% endif %}
+ {% if favorited %}
+ <img class="question-img-favorite" src="{% href "/content/images/vote-favorite-on.png" %}"
+ alt="{% trans "mark this question as favorite (click again to cancel)" %}"
+ title="{% trans "mark this question as favorite (click again to cancel)" %}" />
+ <div id="favorite-number" class="favorite-number my-favorite-number">
+ {{ question.favourite_count }}
+ </div>
+ {% else %}
+ <img class="question-img-favorite" src="{% href "/content/images/vote-favorite-off.png" %}"
+ alt="{% trans "remove favorite mark from this question (click again to restore mark)" %}"
+ title="{% trans "remove favorite mark from this question (click again to restore mark)" %}" />
+ <div id="favorite-number" class="favorite-number">
+ {% ifnotequal question.favourite_count 0 %}{{ question.favourite_count }}{% endifnotequal %}
+ </div>
+
+ {% endif %}
+
+ </div>
+ </td>
+ <td>
+ <div id="item-right">
+ <div class="question-body">
+ {{ question.html|safe }}
+ </div>
+ <div id="question-controls" class="post-controls">
+ <div id="question-tags" class="tags">
+ {% for tag in question.tagname_list %}
+ <a href="{% url forum.views.tag tag|urlencode %}" class="post-tag"
+ title="{% blocktrans with tag as tagname %}see questions tagged '{{ tagname }}'{% endblocktrans %}" rel="tag">{{ tag }}</a>
+ {% endfor %}
+ </div>
+ {% joinitems using '<span class="action-link-separator">|</span>' %}
+ {% if request.user|can_edit_post:question %}
+ <span class="action-link"><a href="{% url edit_question question.id %}">{% trans 'edit' %}</a></span>
+ {% endif %}
+ {% separator %}
+ {% if question.closed %}
+ {% if request.user|can_reopen_question:question %}
+ <span class="action-link"><a href="{% url reopen question.id %}">{% trans "reopen" %}</a></span>
+ {% endif %}
+ {% else %}
+ {% if request.user|can_close_question:question %}
+ <span class="action-link"><a href="{% url close question.id %}">{% trans "close" %}</a></span>
+ {% endif %}
+ {% endif %}
+ {% separator %}
+ {% if request.user|can_flag_offensive %}
+ <span id="question-offensive-flag-{{ question.id }}" class="offensive-flag"
+ title="{% trans "report as offensive (i.e containing spam, advertising, malicious text, etc.)" %}">
+ <a>{% trans "flag offensive" %}</a>
+ {% if request.user|can_view_offensive_flags and question.offensive_flag_count %}
+ <span class="darkred">({{ question.offensive_flag_count }})</span>
+ {% endif %}
+ </span>
+ {% endif %}
+ {% separator %}
+ {% if request.user|can_delete_post:question %}
+ <span class="action-link"><a id="question-delete-link-{{question.id}}">{% trans "delete" %}</a></span>
+ {% endif %}
+ {% endjoinitems %}
+ </div>
+ <div class="post-update-info-container">
+ {% post_contributor_info question "original_author" %}
+ {% post_contributor_info question "last_updater" %}
+ </div>
+ <div class="comments-container" id="comments-container-question-{{question.id}}">
+ {% for comment in question.get_comments|slice:":5" %}
+ <p class="comment" id="comment-{{comment.id}}">
+ {{comment.comment}}
+ - <a class="comment-user" href="{{comment.user.get_profile_url}}">{{comment.user}}</a>
+ {% spaceless %}
+ <span class="comment-age">({% diff_date comment.added_at %})</span>
+ {% if request.user|can_delete_comment:comment %}
+ <img class="delete-icon"
+ src="{% href "/content/images/close-small.png" %}"
+ title="{% trans "delete this comment" %}"/>
+ {% endif %}
+ {% endspaceless %}
+ </p>
+ {% endfor %}
+ </div>
+ <div class="post-comments" style="margin-bottom:20px">
+ <input id="can-post-comments-question-{{question.id}}" type="hidden" value="{{ request.user|can_add_comments:question }}"/>
+ {% if request.user|can_add_comments:question or question.comment_count > 5 %}
+ <a id="comments-link-question-{{question.id}}" class="comments-link">
+ {% if request.user|can_add_comments:question %}
+ {% trans "add comment" %}
+ {% endif %}
+ {% if question.comment_count > 5 %}
+ {% if request.user|can_add_comments:question %}/
+ {% blocktrans count question.get_comments|slice:"5:"|length as counter %}
+ see <strong>one</strong> more
+ {% plural %}
+ see <strong>{{counter}}</strong> more
+ {% endblocktrans %}
+ {% else %}
+ {% blocktrans count question.get_comments|slice:"5:"|length as counter %}
+ see <strong>one</strong> more comment
+ {% plural %}
+ see <strong>{{counter}}</strong> more comments
+ {% endblocktrans %}
+ {% endif %}
+ {% endif %}</a>
+ {% endif %}
+ </div>
+ </div>
+
+ </td>
+ </tr>
+ </table>
+ {% if question.closed %}
+ <div class="question-status" style="margin-bottom:15px">
+ <h3>{% blocktrans with question.get_close_reason_display as close_reason %}The question has been closed for the following reason "{{ close_reason }}" by{% endblocktrans %}
+ <a href="{{ question.closed_by.get_profile_url }}">{{ question.closed_by.username }}</a>
+ {% blocktrans with question.closed_at as closed_at %}close date {{closed_at}}{% endblocktrans %}</h3>
+ </div>
+ {% endif %}
+ {% if answers %}
+ <hr/>
+ <div class="tabBar">
+ <a name="sort-top"></a>
+ <div class="headQuestions">
+ {% blocktrans count answers|length as counter %}
+ One Answer:
+ {% plural %}
+ {{counter}} Answers:
+ {% endblocktrans %}
+ </div>
+ <div class="tabsA">
+ <a id="oldest" href="{% url question question.id %}?sort=oldest#sort-top"
+ title="{% trans "oldest answers will be shown first" %}">{% trans "oldest answers" %}</a>
+ <a id="latest" href="{% url question question.id %}?sort=latest#sort-top"
+ title="{% trans "newest answers will be shown first" %}">{% trans "newest answers" %}</a>
+ <a id="votes" href="{% url question question.id %}?sort=votes#sort-top"
+ title="{% trans "most voted answers will be shown first" %}">{% trans "popular answers" %}</a>
+ </div>
+ </div>
+ {% cnprog_paginator context %}
+
+ {% for answer in answers %}
+ <a name="{{ answer.id }}"></a>
+ <div id="answer-container-{{ answer.id }}" class="answer {% if answer.accepted %}accepted-answer{% endif %} {% ifequal answer.author_id question.author_id %} answered-by-owner{% endifequal %} {% if answer.deleted %}deleted{% endif %}">
+ <table style="width:100%;">
+ <tr>
+ <td style="width:30px;vertical-align:top">
+ <div class="vote-buttons">
+ <img id="answer-img-upvote-{{ answer.id }}" class="answer-img-upvote"
+ src="{% blockresource %}/content/images/vote-arrow-up{% get_user_vote_image user_answer_votes answer.id 1 %}.png{% endblockresource %}"
+ alt="{% trans "i like this answer (click again to cancel)" %}"
+ title="{% trans "i like this answer (click again to cancel)" %}"/>
+ <div id="answer-vote-number-{{ answer.id }}" class="vote-number" title="{% trans "current number of votes" %}">
+ {{ answer.score }}
+ </div>
+ <img id="answer-img-downvote-{{ answer.id }}" class="answer-img-downvote"
+ src="{% blockresource %}/content/images/vote-arrow-down{% get_user_vote_image user_answer_votes answer.id -1 %}.png{% endblockresource %}"
+ alt="{% trans "i dont like this answer (click again to cancel)" %}"
+ title="{% trans "i dont like this answer (click again to cancel)" %}" />
+
+ {% ifequal request.user question.author %}
+ <img id="answer-img-accept-{{ answer.id }}" class="answer-img-accept"
+ src="{% blockresource %}/content/images/vote-accepted{% if answer.accepted %}-on{% endif %}.png{% endblockresource %}"
+ alt="{% trans "mark this answer as favorite (click again to undo)" %}"
+ title="{% trans "mark this answer as favorite (click again to undo)" %}" />
+ {% else %}
+ {% if answer.accepted %}
+ <img id="answer-img-accept-{{ answer.id }}" class="answer-img-accept"
+ src="{% blockresource %}/content/images/vote-accepted{% if answer.accepted %}-on{% endif %}.png{% endblockresource %}"
+ alt="{% trans "the author of the question has selected this answer as correct" %}"
+ title="{% trans "the author of the question has selected this answer as correct" %}" />
+ {% endif %}
+ {% endifequal %}
+ </div>
+ </td>
+ <td>
+ <div class="item-right">
+ <div class="answer-body">
+ {{ answer.html|safe }}
+ </div>
+ <div class="answer-controls post-controls">
+ {% joinitems using '<span class="action-link-separator">|</span>' %}
+ <span class="linksopt">
+ <a href="#{{ answer.id }}" title="{% trans "answer permanent link" %}">
+ {% trans "permanent link" %}
+ </a>
+ </span>
+ {% separator %}
+ {% if request.user|can_edit_post:answer %}
+ <span class="action-link"><a href="{% url edit_answer answer.id %}">{% trans 'edit' %}</a></span>
+ {% endif %}
+ {% separator %}
+
+ {% if request.user|can_flag_offensive %}
+ <span id="answer-offensive-flag-{{ answer.id }}" class="offensive-flag"
+ title="{% trans "report as offensive (i.e containing spam, advertising, malicious text, etc.)" %}">
+ <a>{% trans "flag offensive" %}</a>
+ {% if request.user|can_view_offensive_flags and answer.offensive_flag_count %}
+ <span class="darkred">({{ answer.offensive_flag_count }})</span>
+ {% endif %}
+ </span>
+ {% endif %}
+ {% separator %}
+ {% if request.user|can_delete_post:answer %}
+ {% spaceless %}
+ <span class="action-link">
+ <a id="answer-delete-link-{{answer.id}}">
+ {% if answer.deleted %}{% trans "undelete" %}{% else %}{% trans "delete" %}{% endif %}</a>
+ </span>
+ {% endspaceless %}
+ {% endif %}
+ {% endjoinitems %}
+ </div>
+ <div class="post-update-info-container">
+ {% post_contributor_info answer "original_author" %}
+ {% post_contributor_info answer "last_updater" %}
+ </div>
+ <div class="comments-container" id="comments-container-answer-{{answer.id}}">
+ {% for comment in answer.get_comments|slice:":5" %}
+ <p id="comment-{{comment.id}}" class="comment">
+ {{comment.comment}}
+ - <a class="comment-user" href="{{comment.user.get_profile_url}}">{{comment.user}}</a>
+ {% spaceless %}
+ <span class="comment-age">({% diff_date comment.added_at %})</span>
+ {% if request.user|can_delete_comment:comment %}
+ <img class="delete-icon"
+ src="{% href "/content/images/close-small.png" %}"
+ title="{% trans "delete this comment" %}"/>
+ {% endif %}
+ {% endspaceless %}
+ </p>
+ {% endfor %}
+ </div>
+ <div class="post-comments" style="margin-bottom:20px">
+ <input id="can-post-comments-answer-{{answer.id}}" type="hidden" value="{{ request.user|can_add_comments:answer}}"/>
+ {% if request.user|can_add_comments:answer or answer.comment_count > 5 %}
+ <a id="comments-link-answer-{{answer.id}}" class="comments-link">
+ {% if request.user|can_add_comments:answer %}
+ {% trans "add comment" %}
+ {% endif %}
+ {% if answer.comment_count > 5 %}
+ {% if request.user|can_add_comments:answer %}/
+ {% blocktrans count answer.get_comments|slice:"5:"|length as counter %}
+ see <strong>one</strong> more
+ {% plural %}
+ see <strong>{{counter}}</strong> more
+ {% endblocktrans %}
+ {% else %}
+ {% blocktrans count answer.get_comments|slice:"5:"|length as counter %}
+ see <strong>one</strong> more comment
+ {% plural %}
+ see <strong>{{counter}}</strong> more comments
+ {% endblocktrans %}
+ {% endif %}
+ {% endif %}</a>
+ {% endif %}
+ </div>
+ </div>
+ <div id="comment-{{ answer.id }}" class="post-comments" >
+ <input id="can-post-comments-answer-{{answer.id}}" type="hidden" value="{{ request.user|can_add_comments }}"/>
+ <a id="comments-link-answer-{{answer.id}}" class="comments-link">
+ {% if answer.comment_count %}{% trans "comments" %}
+ <strong>({{answer.comment_count}})</strong>{% else %}{% trans "add comment" %}{% endif %}</a>
+ <div id="comments-answer-{{answer.id}}" class="comments-container">
+ <div class="comments"/></div>
+
+ </td>
+ </tr>
+ </table>
+ </div>
+ {% endfor %}
+ <div class="paginator-container-left">
+ {% cnprog_paginator context %}
+ </div>
+ {% endif %}
+ <form id="fmanswer" action="{% url answer question.id %}" method="post">
+ {% if request.user.is_authenticated %}
+ <p style="padding-left:3px">
+ {{ answer.email_notify }}
+ <label for="question-subscribe-updates">
+ {% ifequal request.user.get_q_sel_email_feed_frequency 'n' %}
+ {% trans "Notify me once a day when there are any new answers" %}
+ {% else %}
+ {% ifequal request.user.get_q_sel_email_feed_frequency 'd' %}
+ {% trans "Notify me once a day when there are any new answers" %}
+ {% else %}
+ {% ifequal request.user.get_q_sel_email_feed_frequency 'w' %}
+ {% trans "Notify me weekly when there are any new answers" %}
+ {% endifequal %}
+ {% endifequal %}
+ {% endifequal %}
+ </label>
+ {% blocktrans with request.user.get_profile_url as profile_url %}
+ You can always adjust frequency of email updates from your {{profile_url}}
+ {% endblocktrans %}
+ </p>
+ {% else %}
+ <p style="padding-left:3px">
+ <input class="nomargin" type="checkbox" disabled="disabled" />
+ <label>{% trans "once you sign in you will be able to subscribe for any updates here" %}</label>
+ </p>
+ {% endif %}
+ <div style="clear:both">
+ </div>
+
+ {% if not question.closed %}
+ <div style="padding:10px 0 0 0;">
+ {% spaceless %}
+ <div class="headNormal">
+ {% if answers %}
+ {% trans "Your answer" %}
+ {% else %}
+ {% trans "Be the first one to answer this question!" %}
+ {% endif %}
+ </div>
+ {% endspaceless %}
+ </div>
+ {% if not request.user.is_authenticated %}
+ <div class="message">{% trans "you can answer anonymously and then login" %}</div>
+ {% else %}
+ <p class="message">
+ {% ifequal request.user question.author %}
+ {% trans "answer your own question only to give an answer" %}
+ {% else %}
+ {% trans "please only give an answer, no discussions" %}
+ {% endifequal %}
+ </p>
+ {% endif %}
+
+ <div id="description" class="" >
+ <div id="wmd-button-bar" class="wmd-panel"></div>
+ {{ answer.text }}
+ <div class="preview-toggle">
+ <table width="100%">
+ <tr>
+ <td>
+ <span id="pre-collapse"
+ title="{% trans "Toggle the real time Markdown editor preview" %}">
+ {% trans "toggle preview" %}
+ </span>
+ </td>
+ {% if settings.WIKI_ON %}
+ <td style="text-align:right;">
+ {{ answer.wiki }}
+ <span style="font-weight:normal;cursor:help"
+ title="{{answer.wiki.help_text}}">
+ {{ answer.wiki.label_tag }}
+ </span>
+ </td>
+ {% endif %}
+ </tr>
+
+ </table>
+ </div>
+ <div id="previewer" class="wmd-preview"></div>
+ {{ answer.text.errors }}
+ </div>
+ <p><span class="form-error"></span></p>
+ <input type="submit"
+ {% if user.is_anonymous %}
+ value="{% trans "Login/Signup to Post Your Answer" %}"
+ {% else %}
+ {% if user == question.author %}
+ value="{% trans "Answer Your Own Question" %}"
+ {% else %}
+ value="{% trans "Answer the question" %}"
+ {% endif %}
+ {% endif %}
+ class="submit" style="float:left"/>
+ {% endif %}
+ </form>
+ </div>
+</div>
+{% endblock %}
+
+{% block sidebar %}
+<div class="boxC">
+ <p>
+ {% trans "Question tags" %}:
+ </p>
+ <p class="tags" >
+ {% for tag in tags %}
+ <a href="{% url forum.views.tag tag.name|urlencode %}"
+ title="{% trans "see questions tagged"%}'{{tag.name}}'{% trans "using tags" %}"
+ rel="tag">{{ tag.name }}</a> <span class="tag-number">&#215;{{ tag.used_count|intcomma }}</span><br/>
+ {% endfor %}
+ </p>
+ <p>
+ {% trans "question asked" %}: <strong title="{{ question.added_at }}">{% diff_date question.added_at %}</strong>
+ </p>
+ <p>
+ {% trans "question was seen" %}: <strong>{{ question.view_count|intcomma }} {% trans "times" %}</strong>
+ </p>
+ <p>
+ {% trans "last updated" %}: <strong title="{{ question.last_activity_at }}">{% diff_date question.last_activity_at %}</strong>
+ </p>
+</div>
+
+<div class="boxC">
+ <h3 class="subtitle">{% trans "Related questions" %}</h3>
+ <div class="questions-related">
+ {% for question in similar_questions %}
+ <p>
+ <a href="{{ question.get_absolute_url }}">{{ question.get_question_title }}</a>
+ </p>
+ {% endfor %}
+ </div>
+</div>
+
+{% endblock %}
+
+{% block endjs %}
+{% endblock %}
+<!-- end question.html -->
+=======
{% extends "base.html" %}
<!-- question.html -->
{% load extra_tags %}
@@ -506,3 +1026,4 @@
{% block endjs %}
{% endblock %}
<!-- end question.html -->
+>>>>>>> evgenyfadeev/master:templates/question.html
diff --git a/forum/skins/default/templates/question_edit.html b/forum/skins/default/templates/question_edit.html
index fe711849..5a6268c9 100644
--- a/forum/skins/default/templates/question_edit.html
+++ b/forum/skins/default/templates/question_edit.html
@@ -114,6 +114,12 @@
<div class="title-desc">
{{ form.summary.help_text }}
</div>
+ <br>
+
+ <p class="form-item">
+ <strong>{{ form.categories.label_tag }}:</strong> {% trans "(required)" %} <span class="form-error"></span><br>
+ {{ form.categories }} {{ form.categories.errors }}
+ </p>
<div class="error" ></div>
<input type="submit" value="{% trans "Save edit" %}" class="submit" />
<input type="button" value="{% trans "Cancel" %}" class="submit" onclick="history.back(-1);" />
diff --git a/forum/skins/default/templates/questions.html b/forum/skins/default/templates/questions.html
index 4c3b96d2..2e593f90 100644
--- a/forum/skins/default/templates/questions.html
+++ b/forum/skins/default/templates/questions.html
@@ -1,3 +1,277 @@
+<<<<<<< HEAD:templates/questions.html
+{% extends "base.html" %}
+<!-- questions.html -->
+{% load extra_tags %}
+{% load i18n %}
+{% load humanize %}
+{% load extra_filters %}
+{% load smart_if %}
+{% block title %}{% spaceless %}{% trans "Questions" %}{% endspaceless %}{% endblock %}
+{% block forejs %}
+ <script type="text/javascript">
+ var tags = {{ tags_autocomplete|safe }};
+ $().ready(function(){
+ var tab_id = "{{ tab_id }}";
+ $("#"+tab_id).attr('className',"on");
+ var on_tab = {% if is_unanswered %}'#nav_unanswered'{% else %}'#nav_questions'{% endif %};
+ $(on_tab).attr('className','on');
+ Hilite.exact = false;
+ Hilite.elementid = "listA";
+ Hilite.debug_referrer = location.href;
+ });
+ </script>
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.editor.js" %}'></script>
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.tag_selector.js" %}'></script>
+{% endblock %}
+{% block content %}
+<div class="tabBar">
+<<<<<<< HEAD:templates/questions.html
+ <div class="headQuestions">{% if searchtag %}{% trans "Found by tags" %}{% else %}{% if searchtitle %}{% trans "Found by title" %}{% else %}{% trans "All questions" %}{% endif %}{% endif %}</div>
+=======
+ <div class="headQuestions">
+ {% if searchtag %}
+ {% trans "Found by tags" %}
+ {% else %}
+ {% if searchtitle %}
+ {% if settings.USE_SPHINX_SEARCH %}
+ {% trans "Search results" %}
+ {% else %}
+ {% trans "Found by title" %}
+ {% endif %}
+ {% else %}
+ {% if is_unanswered %}
+ {% trans "Unanswered questions" %}
+ {% else %}
+ {% trans "All questions" %}
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ </div>
+>>>>>>> 82d35490db90878f013523c4d1a5ec3af2df8b23:templates/questions.html
+ <div class="tabsA">
+ <a id="latest" href="?sort=latest" class="off" title="{% trans "most recently asked questions" %}">{% trans "newest" %}</a>
+ <a id="active" href="?sort=active" class="off" title="{% trans "most recently updated questions" %}">{% trans "active" %}</a>
+ <a id="hottest" href="?sort=hottest" class="off" title="{% trans "hottest questions" %}">{% trans "hottest" %}</a>
+ <a id="mostvoted" href="?sort=mostvoted" class="off" title="{% trans "most voted questions" %}">{% trans "most voted" %}</a>
+ </div>
+</div>
+<div id="listA">
+ {% for question in questions.object_list %}
+ <div class="qstA"
+ {% if request.user.is_authenticated %}
+ {% if question.interesting_score > 0 %}
+ style="background:#ffff99;"
+ {% else %}
+ {% if not request.user.hide_ignored_questions %}
+ {% if question.ignored_score > 0 %}
+ style="background:#f3f3f3;"
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ >
+ <h2>
+ <a href="{{ question.get_absolute_url }}">{{ question.get_question_title }}</a>
+ </h2>
+ <div class="stat">
+ <table>
+ <tr>
+ <td><span class="num">{{ question.answer_count|intcomma }}</span> </td>
+ <td><span class="num">{{ question.score|intcomma }}</span> </td>
+ <td><span class="num">{{ question.view_count|cnprog_intword|safe }}</span> </td>
+ </tr>
+ <tr>
+ <td><span class="unit">{% trans "answers" %}</span></td>
+ <td><span class="unit">{% trans "votes" %}</span></td>
+ <td><span class="unit">{% trans "views" %}</span></td>
+ </tr>
+ </table>
+ </div>
+
+ <div class="summary">
+ {{ question.summary }}...
+ </div>
+
+ {% ifequal tab_id 'active'%}
+ {% if question.wiki and settings.WIKI_ON %}
+ <span class="from wiki">{% trans "community wiki" %}</span>
+ <span class="date" title="{{ question.added_at }}">{% diff_date question.added_at %}</span>
+ {% else %}
+ <div class="from">
+ {% comment %}{% gravatar question.last_activity_by 24 %}{% endcomment %}
+ <span class="author"><a href="{{ question.last_activity_by.get_profile_url }}">{{ question.last_activity_by }}</a></span>
+ <span class="score">{% get_score_badge question.last_activity_by %} </span>
+ <span class="date" title="{{ question.last_activity_at }}">{% diff_date question.last_activity_at %}</span>
+ </div>
+ {% endif %}
+ {% else %}
+ {% if question.wiki and settings.WIKI_ON %}
+ <span class="from wiki">{% trans "community wiki" %}</span>
+ <span class="date" title="{{ question.added_at }}">{% diff_date question.added_at %}</span>
+ {% else %}
+ <div class="from">
+ {% comment %}{% gravatar question.author 24 %}{% endcomment %}
+ {% if question.last_activity_at != question.added_at %}
+ {% if question.author.id != question.last_activity_by.id %}
+ {% trans "Posted:" %}
+ <span class="author"><a href="{{ question.author.get_profile_url }}">{{ question.author }}</a></span>
+ <span class="score">{% get_score_badge question.author %} </span>
+ / {% trans "Updated:" %}
+ <span class="author"><a href="{{ question.last_activity_by.get_profile_url }}">{{ question.last_activity_by }}</a></span>
+ <span class="score">{% get_score_badge question.last_activity_by %} </span>
+ <span class="date" title="{{ question.last_activity_at }}">{% diff_date question.last_activity_at %}</span>
+ {% else %}
+ {% trans "Updated:" %}
+ <span class="author"><a href="{{ question.last_activity_by.get_profile_url }}">{{ question.last_activity_by }}</a></span>
+ <span class="score">{% get_score_badge question.last_activity_by %} </span>
+ <span class="date" title="{{ question.last_activity_at }}">{% diff_date question.last_activity_at %}</span>
+ {% endif %}
+ {% else %}
+ {% trans "Posted:" %}
+ <span class="author"><a href="{{ question.author.get_profile_url }}">{{ question.author }}</a></span>
+ <span class="score">{% get_score_badge question.author %} </span>
+ <span class="date" title="{{ question.added_at }}">{% diff_date question.added_at %}</span>
+ {% endif %}
+ </div>
+ {% endif %}
+ {% endifequal %}
+
+ <div class="tags">
+ {% for tag in question.tagname_list %}
+ <a href="{% url forum.views.tag tag|urlencode %}" title="{% trans "see questions tagged" %}'{{ tag }}'{% trans "using tags" %}" rel="tag">{{ tag }}</a>
+ {% endfor %}
+ </div>
+ {%trans "Category: "%}<a href="{% url forum.views.category question.category|urlencode %}">{{ question.category}}</a>
+ </div>
+ {% endfor %}
+ {% if searchtitle %}
+ {% if questions_count == 0 %}
+ <p class="evenMore" style="padding-top:30px;text-align:center;">
+ {% trans "Did not find anything?" %}
+ {% else %}
+ <p class="evenMore" style="padding-left:9px">
+ {% trans "Did not find what you were looking for?" %}
+ {% endif %}
+ <a href="{% url ask %}">{% trans "Please, post your question!" %}</a>
+ </p>
+ {% endif %}
+</div>
+{% endblock %}
+
+{% block tail %}
+ <div class="pager">{% cnprog_paginator context %}</div>
+ <div class="pagesize">{% cnprog_pagesize context %}</div>
+{% endblock %}
+
+{% block sidebar %}
+<div class="boxC">
+ {% if searchtag %}
+<<<<<<< HEAD:templates/questions.html
+ {% blocktrans count questions_count as cnt with questions_count|intcomma as q_num and searchtag as tagname %}
+ have total {{q_num}} questions tagged {{tagname}}
+ {% plural %}
+ have total {{q_num}} questions tagged {{tagname}}
+ {% endblocktrans %}
+ {% else %}
+ {% if searchtitle %}
+ {% blocktrans count questions_count as cnt with questions_count|intcomma as q_num %}
+ have total {{q_num}} questions containing {{searchtitle}}
+ {% plural %}
+ have total {{q_num}} questions containing {{searchtitle}}
+ {% endblocktrans %}
+ {% else %}
+ {% blocktrans count questions as cnt with questions_count|intcomma as q_num %}
+ have total {{q_num}} questions
+ {% plural %}
+ have total {{q_num}} questions
+ {% endblocktrans %}
+ {% endif %}
+ {% endif %}
+ <p>
+=======
+ {% blocktrans count questions_count as cnt with questions_count|intcomma as q_num and searchtag as tagname %}
+ have total {{q_num}} questions tagged {{tagname}}
+ {% plural %}
+ have total {{q_num}} questions tagged {{tagname}}
+ {% endblocktrans %}
+ {% else %}
+ {% if searchtitle %}
+ {% if settings.USE_SPHINX_SEARCH %}
+ {% blocktrans count questions_count as cnt with questions_count|intcomma as q_num %}
+ have total {{q_num}} questions containing {{searchtitle}} in full text
+ {% plural %}
+ have total {{q_num}} questions containing {{searchtitle}} in full text
+ {% endblocktrans %}
+ {% else %}
+ {% blocktrans count questions_count as cnt with questions_count|intcomma as q_num %}
+ have total {{q_num}} questions containing {{searchtitle}}
+ {% plural %}
+ have total {{q_num}} questions containing {{searchtitle}}
+ {% endblocktrans %}
+ {% endif %}
+ {% else %}
+ {% if is_unanswered %}
+ {% blocktrans count questions as cnt with questions_count|intcomma as q_num %}
+ have total {{q_num}} unanswered questions
+ {% plural %}
+ have total {{q_num}} unanswered questions
+ {% endblocktrans %}
+ {% else %}
+ {% blocktrans count questions as cnt with questions_count|intcomma as q_num %}
+ have total {{q_num}} questions
+ {% plural %}
+ have total {{q_num}} questions
+ {% endblocktrans %}
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ <p class="nomargin">
+>>>>>>> 82d35490db90878f013523c4d1a5ec3af2df8b23:templates/questions.html
+ {% ifequal tab_id "latest" %}
+ {% trans "latest questions info" %}
+ {% endifequal %}
+
+ {% ifequal tab_id "active" %}
+ {% trans "Questions are sorted by the <strong>time of last update</strong>." %}
+ {% trans "Most recently answered ones are shown first." %}
+ {% endifequal %}
+
+ {% ifequal tab_id "hottest" %}
+ {% trans "Questions sorted by <strong>number of responses</strong>." %}
+ {% trans "Most answered questions are shown first." %}
+ {% endifequal %}
+
+ {% ifequal tab_id "mostvoted" %}
+ {% trans "Questions are sorted by the <strong>number of votes</strong>." %}
+ {% trans "Most voted questions are shown first." %}
+ {% endifequal %}
+ </p>
+</div>
+{% if request.user.is_authenticated %}
+{% include "tag_selector.html" %}
+{% endif %}
+<div class="boxC">
+ <h3 class="subtitle">{% trans "Related tags" %}</h3>
+ <div class="tags">
+ {% for tag in tags %}
+<<<<<<< HEAD:templates/questions.html
+ <a rel="tag" title="{% trans "see questions tagged" %}'{{ tag.name }}'{% trans "using tags" %}" href="{% url forum.views.tag tag.name|urlencode %}">{{ tag.name }}</a>
+ <span class="tag-number">&#215; {{ tag.used_count|intcomma }}</span>
+ <br />
+ {% endfor %}
+ <br />
+=======
+ <a rel="tag" title="{% blocktrans with tag.name as tag_name %}see questions tagged '{{ tag_name }}'{% endblocktrans %}" href="{% url forum.views.tag tag.name|urlencode %}">{{ tag.name }}</a>
+ <span class="tag-number">&#215; {{ tag.used_count|intcomma }}</span>
+ <br />
+ {% endfor %}
+>>>>>>> 82d35490db90878f013523c4d1a5ec3af2df8b23:templates/questions.html
+ </div>
+</div>
+
+{% endblock %}
+<!-- end questions.html -->
+=======
{% extends "base.html" %}
<!-- questions.html -->
{% load extra_tags %}
@@ -233,3 +507,4 @@
{% endblock %}
<!-- end questions.html -->
+>>>>>>> evgenyfadeev/master:templates/questions.html
diff --git a/forum/skins/default/templates/user_email_subscriptions.html b/forum/skins/default/templates/user_email_subscriptions.html
index c0204cbc..10440529 100644
--- a/forum/skins/default/templates/user_email_subscriptions.html
+++ b/forum/skins/default/templates/user_email_subscriptions.html
@@ -13,9 +13,12 @@
{% endif %}
<form method="POST">
{% include "edit_user_email_feeds_form.html" %}
+<<<<<<< HEAD:templates/user_email_subscriptions.html
+=======
<table class='form-as-table'>
{{tag_filter_selection_form}}
</table>
+>>>>>>> 82d35490db90878f013523c4d1a5ec3af2df8b23:templates/user_email_subscriptions.html
<div class="submit-row text-align-right">
<input type="submit" class="submit" name="save" value="{% trans "Update" %}"/>
<input type="submit" class="submit" name="stop_email" value="{% trans "Stop sending email" %}"/>
diff --git a/forum/skins/default/templates/user_info.html b/forum/skins/default/templates/user_info.html
index c550e13f..4ebcddd6 100644
--- a/forum/skins/default/templates/user_info.html
+++ b/forum/skins/default/templates/user_info.html
@@ -19,7 +19,7 @@
<tr>
<td align="center">
<div class="scoreNumber">{{view_user.reputation|intcomma}}</div>
- <p><b style="color:#777;">{% trans "reputation" %}</b></p>
+ <p><b style="color:#777;">{% trans "karma" %}</b></p>
</td>
</tr>
</table>
diff --git a/forum/templatetags/extra_filters.py b/forum/templatetags/extra_filters.py
index 22ec0109..865cd33d 100644
--- a/forum/templatetags/extra_filters.py
+++ b/forum/templatetags/extra_filters.py
@@ -1,5 +1,8 @@
from django import template
+<<<<<<< HEAD:forum/templatetags/extra_filters.py
+=======
from django.core import serializers
+>>>>>>> 82d35490db90878f013523c4d1a5ec3af2df8b23:forum/templatetags/extra_filters.py
from forum import auth
import logging
@@ -92,7 +95,10 @@ def cnprog_intword(number):
return number
except:
return number
+<<<<<<< HEAD:forum/templatetags/extra_filters.py
+=======
@register.filter
def json_serialize(object):
return serializers.serialize('json',object)
+>>>>>>> 82d35490db90878f013523c4d1a5ec3af2df8b23:forum/templatetags/extra_filters.py
diff --git a/forum/views.py b/forum/views.py
new file mode 100644
index 00000000..2ca4202e
--- /dev/null
+++ b/forum/views.py
@@ -0,0 +1,2410 @@
+# encoding:utf-8
+import calendar
+from django.conf import settings
+from django.contrib.auth.decorators import login_required
+from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidden, Http404
+from django.core.paginator import Paginator, EmptyPage, InvalidPage
+from django.template import RequestContext, loader
+from django.utils.html import *
+from django.utils import simplejson
+from django.core import serializers
+from django.core.mail import mail_admins
+from django.db import transaction
+from django.db.models import Count, Q
+from django.contrib.contenttypes.models import ContentType
+from django.utils.translation import ugettext as _
+from django.utils.datastructures import SortedDict
+from django.template.defaultfilters import slugify
+from django.core.exceptions import PermissionDenied
+
+from utils.html import sanitize_html
+from utils.decorators import ajax_method, ajax_login_required
+from markdown2 import Markdown
+import os.path
+import random
+import time
+
+import datetime
+from forum import auth
+from forum.auth import *
+from forum.const import *
+from forum.diff import textDiff as htmldiff
+from forum.forms import *
+from forum.models import *
+from forum.user import *
+from forum import auth
+from utils.forms import get_next_url
+
+# used in index page
+INDEX_PAGE_SIZE = 20
+INDEX_AWARD_SIZE = 15
+INDEX_TAGS_SIZE = 100
+# used in tags list
+DEFAULT_PAGE_SIZE = 60
+# used in questions
+QUESTIONS_PAGE_SIZE = 10
+# used in users
+USERS_PAGE_SIZE = 35
+# used in answers
+ANSWERS_PAGE_SIZE = 10
+markdowner = Markdown(html4tags=True)
+question_type = ContentType.objects.get_for_model(Question)
+answer_type = ContentType.objects.get_for_model(Answer)
+comment_type = ContentType.objects.get_for_model(Comment)
+question_revision_type = ContentType.objects.get_for_model(QuestionRevision)
+answer_revision_type = ContentType.objects.get_for_model(AnswerRevision)
+repute_type = ContentType.objects.get_for_model(Repute)
+question_type_id = question_type.id
+answer_type_id = answer_type.id
+comment_type_id = comment_type.id
+question_revision_type_id = question_revision_type.id
+answer_revision_type_id = answer_revision_type.id
+repute_type_id = repute_type.id
+def _get_tags_cache_json():
+ tags = Tag.objects.filter(deleted=False).all()
+ tags_list = []
+ for tag in tags:
+ dic = {'n': tag.name, 'c': tag.used_count}
+ tags_list.append(dic)
+ tags = simplejson.dumps(tags_list)
+ return tags
+
+def _get_and_remember_questions_sort_method(request, view_dic, default):
+ if default not in view_dic:
+ raise Exception('default value must be in view_dic')
+
+ q_sort_method = request.REQUEST.get('sort', None)
+ if q_sort_method == None:
+ q_sort_method = request.session.get('questions_sort_method', default)
+
+ if q_sort_method not in view_dic:
+ q_sort_method = default
+ request.session['questions_sort_method'] = q_sort_method
+ return q_sort_method, view_dic[q_sort_method]
+
+def index(request):
+ view_dic = {
+ "latest":"-last_activity_at",
+ "hottest":"-answer_count",
+ "mostvoted":"-score",
+ }
+ view_id, orderby = _get_and_remember_questions_sort_method(request, view_dic, 'latest')
+
+ page_size = request.session.get('pagesize', QUESTIONS_PAGE_SIZE)
+ questions = Question.objects.exclude(deleted=True).order_by(orderby)[:page_size]
+ # RISK - inner join queries
+ questions = questions.select_related()
+ tags = Tag.objects.get_valid_tags(INDEX_TAGS_SIZE)
+
+ awards = Award.objects.get_recent_awards()
+
+ (interesting_tag_names, ignored_tag_names) = (None, None)
+ if request.user.is_authenticated():
+ pt = MarkedTag.objects.filter(user=request.user)
+ interesting_tag_names = pt.filter(reason='good').values_list('tag__name', flat=True)
+ ignored_tag_names = pt.filter(reason='bad').values_list('tag__name', flat=True)
+
+ tags_autocomplete = _get_tags_cache_json()
+
+ return render_to_response('index.html', {
+ 'interesting_tag_names': interesting_tag_names,
+ 'tags_autocomplete': tags_autocomplete,
+ 'ignored_tag_names': ignored_tag_names,
+ "questions" : questions,
+ "tab_id" : view_id,
+ "tags" : tags,
+ "awards" : awards[:INDEX_AWARD_SIZE],
+ }, context_instance=RequestContext(request))
+
+def about(request):
+ return render_to_response('about.html', context_instance=RequestContext(request))
+
+def faq(request):
+ data = {
+ 'gravatar_faq_url': reverse('faq') + '#gravatar',
+ 'send_email_key_url': reverse('send_email_key'),
+ 'ask_question_url': reverse('ask'),
+ }
+ return render_to_response('faq.html', data, context_instance=RequestContext(request))
+
+def feedback(request):
+ data = {}
+ form = None
+ if request.method == "POST":
+ form = FeedbackForm(request.POST)
+ if form.is_valid():
+ if not request.user.is_authenticated:
+ data['email'] = form.cleaned_data.get('email',None)
+ data['message'] = form.cleaned_data['message']
+ data['name'] = form.cleaned_data.get('name',None)
+ message = render_to_response('feedback_email.txt',data,context_instance=RequestContext(request))
+ mail_admins(_('Q&A forum feedback'), message)
+ msg = _('Thanks for the feedback!')
+ request.user.message_set.create(message=msg)
+ return HttpResponseRedirect(get_next_url(request))
+ else:
+ form = FeedbackForm(initial={'next':get_next_url(request)})
+
+ data['form'] = form
+ return render_to_response('feedback.html', data, context_instance=RequestContext(request))
+feedback.CANCEL_MESSAGE=_('We look forward to hearing your feedback! Please, give it next time :)')
+
+def privacy(request):
+ return render_to_response('privacy.html', context_instance=RequestContext(request))
+
+def unanswered(request):
+ return questions(request, unanswered=True)
+
+def questions(request, tagname=None, unanswered=False):
+ """
+ List of Questions, Tagged questions, and Unanswered questions.
+ """
+ # template file
+ # "questions.html" or maybe index.html in the future
+ template_file = "questions.html"
+ # get pagesize from session, if failed then get default value
+ pagesize = request.session.get("pagesize", 10)
+ try:
+ page = int(request.GET.get('page', '1'))
+ except ValueError:
+ page = 1
+
+ view_dic = {"latest":"-added_at", "active":"-last_activity_at", "hottest":"-answer_count", "mostvoted":"-score" }
+ view_id, orderby = _get_and_remember_questions_sort_method(request,view_dic,'latest')
+
+ # check if request is from tagged questions
+ qs = Question.objects.exclude(deleted=True)
+
+ if tagname is not None:
+ qs = qs.filter(tags__name = unquote(tagname))
+
+ if unanswered:
+ qs = qs.exclude(answer_accepted=True)
+
+ author_name = None
+ #user contributed questions & answers
+ if 'user' in request.GET:
+ try:
+ author_name = request.GET['user']
+ u = User.objects.get(username=author_name)
+ qs = qs.filter(Q(author=u) | Q(answers__author=u))
+ except User.DoesNotExist:
+ author_name = None
+
+ if request.user.is_authenticated():
+ uid_str = str(request.user.id)
+ qs = qs.extra(
+ select = SortedDict([
+ (
+ 'interesting_score',
+ 'SELECT COUNT(1) FROM forum_markedtag, question_tags '
+ + 'WHERE forum_markedtag.user_id = %s '
+ + 'AND forum_markedtag.tag_id = question_tags.tag_id '
+ + 'AND forum_markedtag.reason = \'good\' '
+ + 'AND question_tags.question_id = question.id'
+ ),
+ ]),
+ select_params = (uid_str,),
+ )
+ if request.user.hide_ignored_questions:
+ ignored_tags = Tag.objects.filter(user_selections__reason='bad',
+ user_selections__user = request.user)
+ qs = qs.exclude(tags__in=ignored_tags)
+ else:
+ qs = qs.extra(
+ select = SortedDict([
+ (
+ 'ignored_score',
+ 'SELECT COUNT(1) FROM forum_markedtag, question_tags '
+ + 'WHERE forum_markedtag.user_id = %s '
+ + 'AND forum_markedtag.tag_id = question_tags.tag_id '
+ + 'AND forum_markedtag.reason = \'bad\' '
+ + 'AND question_tags.question_id = question.id'
+ )
+ ]),
+ select_params = (uid_str, )
+ )
+
+ qs = qs.select_related(depth=1).order_by(orderby)
+
+ objects_list = Paginator(qs, pagesize)
+ questions = objects_list.page(page)
+
+ # Get related tags from this page objects
+ if questions.object_list.count() > 0:
+ related_tags = Tag.objects.get_tags_by_questions(questions.object_list)
+ else:
+ related_tags = None
+ tags_autocomplete = _get_tags_cache_json()
+
+ # get the list of interesting and ignored tags
+ (interesting_tag_names, ignored_tag_names) = (None, None)
+ if request.user.is_authenticated():
+ pt = MarkedTag.objects.filter(user=request.user)
+ interesting_tag_names = pt.filter(reason='good').values_list('tag__name', flat=True)
+ ignored_tag_names = pt.filter(reason='bad').values_list('tag__name', flat=True)
+
+ return render_to_response(template_file, {
+ "questions" : questions,
+ "author_name" : author_name,
+ "tab_id" : view_id,
+ "questions_count" : objects_list.count,
+ "tags" : related_tags,
+ "tags_autocomplete" : tags_autocomplete,
+ "searchtag" : tagname,
+ "is_unanswered" : unanswered,
+ "interesting_tag_names": interesting_tag_names,
+ 'ignored_tag_names': ignored_tag_names,
+ "context" : {
+ 'is_paginated' : True,
+ 'pages': objects_list.num_pages,
+ 'page': page,
+ 'has_previous': questions.has_previous(),
+ 'has_next': questions.has_next(),
+ 'previous': questions.previous_page_number(),
+ 'next': questions.next_page_number(),
+ 'base_url' : request.path + '?sort=%s&' % view_id,
+ 'pagesize' : pagesize
+ }}, context_instance=RequestContext(request))
+
+def create_new_answer( question=None, author=None,\
+ added_at=None, wiki=False,\
+ text='', email_notify=False):
+
+ html = sanitize_html(markdowner.convert(text))
+
+ #create answer
+ answer = Answer(
+ question=question,
+ author=author,
+ added_at=added_at,
+ wiki=wiki,
+ html=html
+ )
+ if answer.wiki:
+ answer.last_edited_by = answer.author
+ answer.last_edited_at = added_at
+ answer.wikified_at = added_at
+
+ answer.save()
+
+ #update question data
+ question.last_activity_at = added_at
+ question.last_activity_by = author
+ question.save()
+ Question.objects.update_answer_count(question)
+
+ #update revision
+ AnswerRevision.objects.create(
+ answer=answer,
+ revision=1,
+ author=author,
+ revised_at=added_at,
+ summary=CONST['default_version'],
+ text=text
+ )
+
+ #set notification/delete
+ if email_notify:
+ if author not in question.followed_by.all():
+ question.followed_by.add(author)
+ else:
+ #not sure if this is necessary. ajax should take care of this...
+ try:
+ question.followed_by.remove(author)
+ except:
+ pass
+
+def create_new_question(title=None, author=None, added_at=None,
+ wiki=False, tagnames=None, summary=None,
+ text=None):
+ """this is not a view
+ and maybe should become one of the methods on Question object?
+ """
+ html = sanitize_html(markdowner.convert(text))
+ question = Question(
+ title=title,
+ author=author,
+ added_at=added_at,
+ last_activity_at=added_at,
+ last_activity_by=author,
+ wiki=wiki,
+ tagnames=tagnames,
+ html=html,
+ summary=summary
+ )
+ if question.wiki:
+ question.last_edited_by = question.author
+ question.last_edited_at = added_at
+ question.wikified_at = added_at
+
+ question.save()
+
+ # create the first revision
+ QuestionRevision.objects.create(
+ question=question,
+ revision=1,
+ title=question.title,
+ author=author,
+ revised_at=added_at,
+ tagnames=question.tagnames,
+ summary=CONST['default_version'],
+ text=text
+ )
+ return question
+
+#TODO: allow anynomus user to ask question by providing email and username.
+@login_required
+def ask(request):
+ if request.method == "POST":
+ form = AskForm(request.POST)
+ if form.is_valid():
+
+ added_at = datetime.datetime.now()
+ title = strip_tags(form.cleaned_data['title'].strip())
+ wiki = form.cleaned_data['wiki']
+ tagnames = form.cleaned_data['tags'].strip()
+ text = form.cleaned_data['text']
+ html = sanitize_html(markdowner.convert(text))
+ summary = strip_tags(html)[:120]
+
+ if request.user.is_authenticated():
+ author = request.user
+
+ question = create_new_question(
+ title=title,
+ author=author,
+ added_at=added_at,
+ wiki=wiki,
+ tagnames=tagnames,
+ summary=summary,
+ text=text
+ )
+ return HttpResponseRedirect(question.get_absolute_url())
+ else:
+ request.session.flush()
+ session_key = request.session.session_key
+ question = AnonymousQuestion(
+ session_key=session_key,
+ title=title,
+ tagnames=tagnames,
+ wiki=wiki,
+ text=text,
+ summary=summary,
+ added_at=added_at,
+ ip_addr=request.META['REMOTE_ADDR'],
+ )
+ question.save()
+ return HttpResponseRedirect(reverse('user_signin_new_question'))
+ else:
+ form = AskForm()
+
+ tags = _get_tags_cache_json()
+ return render_to_response('ask.html', {
+ 'form' : form,
+ 'tags' : tags,
+ 'email_validation_faq_url':reverse('faq') + '#validate',
+ }, context_instance=RequestContext(request))
+
+def question(request, id):
+ try:
+ page = int(request.GET.get('page', '1'))
+ except ValueError:
+ page = 1
+
+ view_id = request.GET.get('sort', None)
+ view_dic = {"latest":"-added_at", "oldest":"added_at", "votes":"-score" }
+ try:
+ orderby = view_dic[view_id]
+ except KeyError:
+ qsm = request.session.get('questions_sort_method',None)
+ if qsm in ('mostvoted','latest'):
+ logging.debug('loaded from session ' + qsm)
+ if qsm == 'mostvoted':
+ view_id = 'votes'
+ orderby = '-score'
+ else:
+ view_id = 'latest'
+ orderby = '-added_at'
+ else:
+ view_id = "votes"
+ orderby = "-score"
+
+ logging.debug('view_id=' + str(view_id))
+
+ question = get_object_or_404(Question, id=id)
+ try:
+ pattern = r'/%s%s%d/([\w-]+)' % (settings.FORUM_SCRIPT_ALIAS,_('question/'), question.id)
+ path_re = re.compile(pattern)
+ logging.debug(pattern)
+ logging.debug(request.path)
+ m = path_re.match(request.path)
+ if m:
+ slug = m.group(1)
+ logging.debug('have slug %s' % slug)
+ assert(slug == slugify(question.title))
+ else:
+ logging.debug('no match!')
+ except:
+ return HttpResponseRedirect(question.get_absolute_url())
+
+ if question.deleted and not can_view_deleted_post(request.user, question):
+ raise Http404
+ answer_form = AnswerForm(question, request.user)
+ answers = Answer.objects.get_answers_from_question(question, request.user, orderby)
+ answers = answers.select_related(depth=1)
+
+ favorited = question.has_favorite_by_user(request.user)
+ if request.user.is_authenticated():
+ question_vote = question.votes.select_related().filter(user=request.user)
+ else:
+ question_vote = None #is this correct?
+ if question_vote is not None and question_vote.count() > 0:
+ question_vote = question_vote[0]
+
+ user_answer_votes = {}
+ for vote in question.get_user_votes_in_answers(request.user):
+ if not user_answer_votes.has_key(vote.object_id):
+ vote_value = -1
+ if vote.is_upvote():
+ vote_value = 1
+ user_answer_votes[answer.id] = vote_value
+
+ if answers is not None:
+ answers = answers.order_by("-accepted", orderby)
+
+ filtered_answers = []
+ for answer in answers:
+ if answer.deleted == True:
+ if answer.author_id == request.user.id:
+ filtered_answers.append(answer)
+ else:
+ filtered_answers.append(answer)
+
+ objects_list = Paginator(filtered_answers, ANSWERS_PAGE_SIZE)
+ page_objects = objects_list.page(page)
+
+ #todo: merge view counts per user and per session
+ #1) view count per session
+ update_view_count = False
+ if 'question_view_times' not in request.session:
+ request.session['question_view_times'] = {}
+
+ last_seen = request.session['question_view_times'].get(question.id,None)
+ updated_when, updated_who = question.get_last_update_info()
+
+ if updated_who != request.user:
+ if last_seen:
+ if last_seen < updated_when:
+ update_view_count = True
+ else:
+ update_view_count = True
+
+ request.session['question_view_times'][question.id] = datetime.datetime.now()
+
+ if update_view_count:
+ question.view_count += 1
+ question.save()
+
+ #2) question view count per user
+ if request.user.is_authenticated():
+ try:
+ question_view = QuestionView.objects.get(who=request.user, question=question)
+ except QuestionView.DoesNotExist:
+ question_view = QuestionView(who=request.user, question=question)
+ question_view.when = datetime.datetime.now()
+ question_view.save()
+
+ return render_to_response('question.html', {
+ "question": question,
+ "question_vote": question_vote,
+ "question_comment_count":question.comments.count(),
+ "answer": answer_form,
+ "answers": page_objects.object_list,
+ "user_answer_votes": user_answer_votes,
+ "tags": question.tags.all(),
+ "tab_id": view_id,
+ "favorited": favorited,
+ "similar_questions": Question.objects.get_similar_questions(question),
+ "context": {
+ 'is_paginated': True,
+ 'pages': objects_list.num_pages,
+ 'page': page,
+ 'has_previous': page_objects.has_previous(),
+ 'has_next': page_objects.has_next(),
+ 'previous': page_objects.previous_page_number(),
+ 'next': page_objects.next_page_number(),
+ 'base_url': request.path + '?sort=%s&' % view_id,
+ 'extend_url': "#sort-top"
+ }
+ }, context_instance=RequestContext(request))
+
+@login_required
+def close(request, id):
+ question = get_object_or_404(Question, id=id)
+ if not can_close_question(request.user, question):
+ return HttpResponse('Permission denied.')
+ if request.method == 'POST':
+ form = CloseForm(request.POST)
+ if form.is_valid():
+ reason = form.cleaned_data['reason']
+ question.closed = True
+ question.closed_by = request.user
+ question.closed_at = datetime.datetime.now()
+ question.close_reason = reason
+ question.save()
+ return HttpResponseRedirect(question.get_absolute_url())
+ else:
+ form = CloseForm()
+ return render_to_response('close.html', {
+ 'form': form,
+ 'question': question,
+ }, context_instance=RequestContext(request))
+
+@login_required
+def reopen(request, id):
+ question = get_object_or_404(Question, id=id)
+ # open question
+ if not can_reopen_question(request.user, question):
+ return HttpResponse('Permission denied.')
+ if request.method == 'POST':
+ Question.objects.filter(id=question.id).update(closed=False,
+ closed_by=None, closed_at=None, close_reason=None)
+ return HttpResponseRedirect(question.get_absolute_url())
+ else:
+ return render_to_response('reopen.html', {
+ 'question': question,
+ }, context_instance=RequestContext(request))
+
+@login_required
+def edit_question(request, id):
+ question = get_object_or_404(Question, id=id)
+ if question.deleted and not can_view_deleted_post(request.user, question):
+ raise Http404
+ if can_edit_post(request.user, question):
+ return _edit_question(request, question)
+ elif can_retag_questions(request.user):
+ return _retag_question(request, question)
+ else:
+ raise Http404
+
+def _retag_question(request, question):
+ if request.method == 'POST':
+ form = RetagQuestionForm(question, request.POST)
+ if form.is_valid():
+ if form.has_changed():
+ latest_revision = question.get_latest_revision()
+ retagged_at = datetime.datetime.now()
+ # Update the Question itself
+ Question.objects.filter(id=question.id).update(
+ tagnames=form.cleaned_data['tags'],
+ last_edited_at=retagged_at,
+ last_edited_by=request.user,
+ last_activity_at=retagged_at,
+ last_activity_by=request.user
+ )
+ # Update the Question's tag associations
+ tags_updated = Question.objects.update_tags(question,
+ form.cleaned_data['tags'], request.user)
+ # Create a new revision
+ QuestionRevision.objects.create(
+ question=question,
+ title=latest_revision.title,
+ author=request.user,
+ revised_at=retagged_at,
+ tagnames=form.cleaned_data['tags'],
+ summary=CONST['retagged'],
+ text=latest_revision.text
+ )
+ # send tags updated singal
+ tags_updated.send(sender=question.__class__, question=question)
+
+ return HttpResponseRedirect(question.get_absolute_url())
+ else:
+ form = RetagQuestionForm(question)
+ return render_to_response('question_retag.html', {
+ 'question': question,
+ 'form': form,
+ 'tags': _get_tags_cache_json(),
+ }, context_instance=RequestContext(request))
+
+def _edit_question(request, question):
+ latest_revision = question.get_latest_revision()
+ revision_form = None
+ if request.method == 'POST':
+ if 'select_revision' in request.POST:
+ # user has changed revistion number
+ revision_form = RevisionForm(question, latest_revision, request.POST)
+ if revision_form.is_valid():
+ # Replace with those from the selected revision
+ form = EditQuestionForm(question,
+ QuestionRevision.objects.get(question=question,
+ revision=revision_form.cleaned_data['revision']))
+ else:
+ form = EditQuestionForm(question, latest_revision, request.POST)
+ else:
+ # Always check modifications against the latest revision
+ form = EditQuestionForm(question, latest_revision, request.POST)
+ if form.is_valid():
+ html = sanitize_html(markdowner.convert(form.cleaned_data['text']))
+ if form.has_changed():
+ edited_at = datetime.datetime.now()
+ tags_changed = (latest_revision.tagnames !=
+ form.cleaned_data['tags'])
+ tags_updated = False
+ # Update the Question itself
+ updated_fields = {
+ 'title': form.cleaned_data['title'],
+ 'last_edited_at': edited_at,
+ 'last_edited_by': request.user,
+ 'last_activity_at': edited_at,
+ 'last_activity_by': request.user,
+ 'tagnames': form.cleaned_data['tags'],
+ 'summary': strip_tags(html)[:120],
+ 'html': html,
+ }
+
+ # only save when it's checked
+ # because wiki doesn't allow to be edited if last version has been enabled already
+ # and we make sure this in forms.
+ if ('wiki' in form.cleaned_data and
+ form.cleaned_data['wiki']):
+ updated_fields['wiki'] = True
+ updated_fields['wikified_at'] = edited_at
+
+ Question.objects.filter(
+ id=question.id).update(** updated_fields)
+ # Update the Question's tag associations
+ if tags_changed:
+ tags_updated = Question.objects.update_tags(
+ question, form.cleaned_data['tags'], request.user)
+ # Create a new revision
+ revision = QuestionRevision(
+ question=question,
+ title=form.cleaned_data['title'],
+ author=request.user,
+ revised_at=edited_at,
+ tagnames=form.cleaned_data['tags'],
+ text=form.cleaned_data['text'],
+ )
+ if form.cleaned_data['summary']:
+ revision.summary = form.cleaned_data['summary']
+ else:
+ revision.summary = 'No.%s Revision' % latest_revision.revision
+ revision.save()
+
+ return HttpResponseRedirect(question.get_absolute_url())
+ else:
+
+ revision_form = RevisionForm(question, latest_revision)
+ form = EditQuestionForm(question, latest_revision)
+ return render_to_response('question_edit.html', {
+ 'question': question,
+ 'revision_form': revision_form,
+ 'form': form,
+ 'tags': _get_tags_cache_json()
+ }, context_instance=RequestContext(request))
+
+
+@login_required
+def edit_answer(request, id):
+ answer = get_object_or_404(Answer, id=id)
+ if answer.deleted and not can_view_deleted_post(request.user, answer):
+ raise Http404
+ elif not can_edit_post(request.user, answer):
+ raise Http404
+ else:
+ latest_revision = answer.get_latest_revision()
+ if request.method == "POST":
+ if 'select_revision' in request.POST:
+ # user has changed revistion number
+ revision_form = RevisionForm(answer, latest_revision, request.POST)
+ if revision_form.is_valid():
+ # Replace with those from the selected revision
+ form = EditAnswerForm(answer,
+ AnswerRevision.objects.get(answer=answer,
+ revision=revision_form.cleaned_data['revision']))
+ else:
+ form = EditAnswerForm(answer, latest_revision, request.POST)
+ else:
+ form = EditAnswerForm(answer, latest_revision, request.POST)
+ if form.is_valid():
+ html = sanitize_html(markdowner.convert(form.cleaned_data['text']))
+ if form.has_changed():
+ edited_at = datetime.datetime.now()
+ updated_fields = {
+ 'last_edited_at': edited_at,
+ 'last_edited_by': request.user,
+ 'html': html,
+ }
+ Answer.objects.filter(id=answer.id).update(** updated_fields)
+
+ revision = AnswerRevision(
+ answer=answer,
+ author=request.user,
+ revised_at=edited_at,
+ text=form.cleaned_data['text']
+ )
+
+ if form.cleaned_data['summary']:
+ revision.summary = form.cleaned_data['summary']
+ else:
+ revision.summary = 'No.%s Revision' % latest_revision.revision
+ revision.save()
+
+ answer.question.last_activity_at = edited_at
+ answer.question.last_activity_by = request.user
+ answer.question.save()
+
+ return HttpResponseRedirect(answer.get_absolute_url())
+ else:
+ revision_form = RevisionForm(answer, latest_revision)
+ form = EditAnswerForm(answer, latest_revision)
+ return render_to_response('answer_edit.html', {
+ 'answer': answer,
+ 'revision_form': revision_form,
+ 'form': form,
+ }, context_instance=RequestContext(request))
+
+QUESTION_REVISION_TEMPLATE = ('<h1>%(title)s</h1>\n'
+ '<div class="text">%(html)s</div>\n'
+ '<div class="tags">%(tags)s</div>')
+def question_revisions(request, id):
+ post = get_object_or_404(Question, id=id)
+ revisions = list(post.revisions.all())
+ revisions.reverse()
+ for i, revision in enumerate(revisions):
+ revision.html = QUESTION_REVISION_TEMPLATE % {
+ 'title': revision.title,
+ 'html': sanitize_html(markdowner.convert(revision.text)),
+ 'tags': ' '.join(['<a class="post-tag">%s</a>' % tag
+ for tag in revision.tagnames.split(' ')]),
+ }
+ if i > 0:
+ revisions[i].diff = htmldiff(revisions[i-1].html, revision.html)
+ else:
+ revisions[i].diff = QUESTION_REVISION_TEMPLATE % {
+ 'title': revisions[0].title,
+ 'html': sanitize_html(markdowner.convert(revisions[0].text)),
+ 'tags': ' '.join(['<a class="post-tag">%s</a>' % tag
+ for tag in revisions[0].tagnames.split(' ')]),
+ }
+ revisions[i].summary = _('initial version')
+ return render_to_response('revisions_question.html', {
+ 'post': post,
+ 'revisions': revisions,
+ }, context_instance=RequestContext(request))
+
+ANSWER_REVISION_TEMPLATE = ('<div class="text">%(html)s</div>')
+def answer_revisions(request, id):
+ post = get_object_or_404(Answer, id=id)
+ revisions = list(post.revisions.all())
+ revisions.reverse()
+ for i, revision in enumerate(revisions):
+ revision.html = ANSWER_REVISION_TEMPLATE % {
+ 'html': sanitize_html(markdowner.convert(revision.text))
+ }
+ if i > 0:
+ revisions[i].diff = htmldiff(revisions[i-1].html, revision.html)
+ else:
+ revisions[i].diff = revisions[i].text
+ revisions[i].summary = _('initial version')
+ return render_to_response('revisions_answer.html', {
+ 'post': post,
+ 'revisions': revisions,
+ }, context_instance=RequestContext(request))
+
+@login_required
+def answer(request, id):
+ question = get_object_or_404(Question, id=id)
+ if request.method == "POST":
+ form = AnswerForm(question, request.user, request.POST)
+ if form.is_valid():
+ wiki = form.cleaned_data['wiki']
+ text = form.cleaned_data['text']
+ update_time = datetime.datetime.now()
+
+ if request.user.is_authenticated():
+ create_new_answer(
+ question=question,
+ author=request.user,
+ added_at=update_time,
+ wiki=wiki,
+ text=text,
+ email_notify=form.cleaned_data['email_notify']
+ )
+ else:
+ request.session.flush()
+ html = sanitize_html(markdowner.convert(text))
+ summary = strip_tags(html)[:120]
+ anon = AnonymousAnswer(
+ question=question,
+ wiki=wiki,
+ text=text,
+ summary=summary,
+ session_key=request.session.session_key,
+ ip_addr=request.META['REMOTE_ADDR'],
+ )
+ anon.save()
+ return HttpResponseRedirect(reverse('user_signin_new_answer'))
+
+ return HttpResponseRedirect(question.get_absolute_url())
+
+def tags(request):
+ stag = ""
+ is_paginated = True
+ sortby = request.GET.get('sort', 'used')
+ try:
+ page = int(request.GET.get('page', '1'))
+ except ValueError:
+ page = 1
+
+ if request.method == "GET":
+ stag = request.GET.get("q", "").strip()
+ if stag != '':
+ objects_list = Paginator(Tag.objects.filter(deleted=False).exclude(used_count=0).extra(where=['name like %s'], params=['%' + stag + '%']), DEFAULT_PAGE_SIZE)
+ else:
+ if sortby == "used":
+ sortby = "-used_count"
+ else:
+ sortby = "name"
+ objects_list = Paginator(Tag.objects.all().filter(deleted=False).exclude(used_count=0).order_by(sortby), DEFAULT_PAGE_SIZE)
+ try:
+ tags = objects_list.page(page)
+ except (EmptyPage, InvalidPage):
+ tags = objects_list.page(objects_list.num_pages)
+
+ return render_to_response('tags.html', {
+ "tags" : tags,
+ "stag" : stag,
+ "tab_id" : sortby,
+ "keywords" : stag,
+ "context" : {
+ 'is_paginated' : is_paginated,
+ 'pages': objects_list.num_pages,
+ 'page': page,
+ 'has_previous': tags.has_previous(),
+ 'has_next': tags.has_next(),
+ 'previous': tags.previous_page_number(),
+ 'next': tags.next_page_number(),
+ 'base_url' : reverse('tags') + '?sort=%s&' % sortby
+ }
+ }, context_instance=RequestContext(request))
+
+def tag(request, tag):
+ return questions(request, tagname=tag)
+
+def vote(request, id):
+ """
+ vote_type:
+ acceptAnswer : 0,
+ questionUpVote : 1,
+ questionDownVote : 2,
+ favorite : 4,
+ answerUpVote: 5,
+ answerDownVote:6,
+ offensiveQuestion : 7,
+ offensiveAnswer:8,
+ removeQuestion: 9,
+ removeAnswer:10
+ questionSubscribeUpdates:11
+
+ accept answer code:
+ response_data['allowed'] = -1, Accept his own answer 0, no allowed - Anonymous 1, Allowed - by default
+ response_data['success'] = 0, failed 1, Success - by default
+ response_data['status'] = 0, By default 1, Answer has been accepted already(Cancel)
+
+ vote code:
+ allowed = -3, Don't have enough votes left
+ -2, Don't have enough reputation score
+ -1, Vote his own post
+ 0, no allowed - Anonymous
+ 1, Allowed - by default
+ status = 0, By default
+ 1, Cancel
+ 2, Vote is too old to be canceled
+
+ offensive code:
+ allowed = -3, Don't have enough flags left
+ -2, Don't have enough reputation score to do this
+ 0, not allowed
+ 1, allowed
+ status = 0, by default
+ 1, can't do it again
+ """
+ response_data = {
+ "allowed": 1,
+ "success": 1,
+ "status": 0,
+ "count": 0,
+ "message": ''
+ }
+
+ def can_vote(vote_score, user):
+ if vote_score == 1:
+ return can_vote_up(request.user)
+ else:
+ return can_vote_down(request.user)
+
+ try:
+ if not request.user.is_authenticated():
+ response_data['allowed'] = 0
+ response_data['success'] = 0
+
+ elif request.is_ajax():
+ question = get_object_or_404(Question, id=id)
+ vote_type = request.POST.get('type')
+
+ #accept answer
+ if vote_type == '0':
+ answer_id = request.POST.get('postId')
+ answer = get_object_or_404(Answer, id=answer_id)
+ # make sure question author is current user
+ if question.author == request.user:
+ # answer user who is also question author is not allow to accept answer
+ if answer.author == question.author:
+ response_data['success'] = 0
+ response_data['allowed'] = -1
+ # check if answer has been accepted already
+ elif answer.accepted:
+ onAnswerAcceptCanceled(answer, request.user)
+ response_data['status'] = 1
+ else:
+ # set other answers in this question not accepted first
+ for answer_of_question in Answer.objects.get_answers_from_question(question, request.user):
+ if answer_of_question != answer and answer_of_question.accepted:
+ onAnswerAcceptCanceled(answer_of_question, request.user)
+
+ #make sure retrieve data again after above author changes, they may have related data
+ answer = get_object_or_404(Answer, id=answer_id)
+ onAnswerAccept(answer, request.user)
+ else:
+ response_data['allowed'] = 0
+ response_data['success'] = 0
+ # favorite
+ elif vote_type == '4':
+ has_favorited = False
+ fav_questions = FavoriteQuestion.objects.filter(question=question)
+ # if the same question has been favorited before, then delete it
+ if fav_questions is not None:
+ for item in fav_questions:
+ if item.user == request.user:
+ item.delete()
+ response_data['status'] = 1
+ response_data['count'] = len(fav_questions) - 1
+ if response_data['count'] < 0:
+ response_data['count'] = 0
+ has_favorited = True
+ # if above deletion has not been executed, just insert a new favorite question
+ if not has_favorited:
+ new_item = FavoriteQuestion(question=question, user=request.user)
+ new_item.save()
+ response_data['count'] = FavoriteQuestion.objects.filter(question=question).count()
+ Question.objects.update_favorite_count(question)
+
+ elif vote_type in ['1', '2', '5', '6']:
+ post_id = id
+ post = question
+ vote_score = 1
+ if vote_type in ['5', '6']:
+ answer_id = request.POST.get('postId')
+ answer = get_object_or_404(Answer, id=answer_id)
+ post_id = answer_id
+ post = answer
+ if vote_type in ['2', '6']:
+ vote_score = -1
+
+ if post.author == request.user:
+ response_data['allowed'] = -1
+ elif not can_vote(vote_score, request.user):
+ response_data['allowed'] = -2
+ elif post.votes.filter(user=request.user).count() > 0:
+ vote = post.votes.filter(user=request.user)[0]
+ # unvote should be less than certain time
+ if (datetime.datetime.now().day - vote.voted_at.day) >= VOTE_RULES['scope_deny_unvote_days']:
+ response_data['status'] = 2
+ else:
+ voted = vote.vote
+ if voted > 0:
+ # cancel upvote
+ onUpVotedCanceled(vote, post, request.user)
+
+ else:
+ # cancel downvote
+ onDownVotedCanceled(vote, post, request.user)
+
+ response_data['status'] = 1
+ response_data['count'] = post.score
+ elif Vote.objects.get_votes_count_today_from_user(request.user) >= VOTE_RULES['scope_votes_per_user_per_day']:
+ response_data['allowed'] = -3
+ else:
+ vote = Vote(user=request.user, content_object=post, vote=vote_score, voted_at=datetime.datetime.now())
+ if vote_score > 0:
+ # upvote
+ onUpVoted(vote, post, request.user)
+ else:
+ # downvote
+ onDownVoted(vote, post, request.user)
+
+ votes_left = VOTE_RULES['scope_votes_per_user_per_day'] - Vote.objects.get_votes_count_today_from_user(request.user)
+ if votes_left <= VOTE_RULES['scope_warn_votes_left']:
+ response_data['message'] = u'%s votes left' % votes_left
+ response_data['count'] = post.score
+ elif vote_type in ['7', '8']:
+ post = question
+ post_id = id
+ if vote_type == '8':
+ post_id = request.POST.get('postId')
+ post = get_object_or_404(Answer, id=post_id)
+
+ if FlaggedItem.objects.get_flagged_items_count_today(request.user) >= VOTE_RULES['scope_flags_per_user_per_day']:
+ response_data['allowed'] = -3
+ elif not can_flag_offensive(request.user):
+ response_data['allowed'] = -2
+ elif post.flagged_items.filter(user=request.user).count() > 0:
+ response_data['status'] = 1
+ else:
+ item = FlaggedItem(user=request.user, content_object=post, flagged_at=datetime.datetime.now())
+ onFlaggedItem(item, post, request.user)
+ response_data['count'] = post.offensive_flag_count
+ # send signal when question or answer be marked offensive
+ mark_offensive.send(sender=post.__class__, instance=post, mark_by=request.user)
+ elif vote_type in ['9', '10']:
+ post = question
+ post_id = id
+ if vote_type == '10':
+ post_id = request.POST.get('postId')
+ post = get_object_or_404(Answer, id=post_id)
+
+ if not can_delete_post(request.user, post):
+ response_data['allowed'] = -2
+ elif post.deleted == True:
+ logging.debug('debug restoring post in view')
+ onDeleteCanceled(post, request.user)
+ response_data['status'] = 1
+ else:
+ onDeleted(post, request.user)
+ delete_post_or_answer.send(sender=post.__class__, instance=post, delete_by=request.user)
+ elif vote_type == '11':#subscribe q updates
+ user = request.user
+ if user.is_authenticated():
+ if user not in question.followed_by.all():
+ question.followed_by.add(user)
+ if settings.EMAIL_VALIDATION == 'on' and user.email_isvalid == False:
+ response_data['message'] = \
+ _('subscription saved, %(email)s needs validation, see %(details_url)s') \
+ % {'email':user.email,'details_url':reverse('faq') + '#validate'}
+ feed_setting = EmailFeedSetting.objects.get(subscriber=user,feed_type='q_sel')
+ if feed_setting.frequency == 'n':
+ feed_setting.frequency = 'd'
+ feed_setting.save()
+ if 'message' in response_data:
+ response_data['message'] += '<br/>'
+ response_data['message'] = _('email update frequency has been set to daily')
+ #response_data['status'] = 1
+ #responst_data['allowed'] = 1
+ else:
+ pass
+ #response_data['status'] = 0
+ #response_data['allowed'] = 0
+ elif vote_type == '12':#unsubscribe q updates
+ user = request.user
+ if user.is_authenticated():
+ if user in question.followed_by.all():
+ question.followed_by.remove(user)
+ else:
+ response_data['success'] = 0
+ response_data['message'] = u'Request mode is not supported. Please try again.'
+
+ data = simplejson.dumps(response_data)
+
+ except Exception, e:
+ response_data['message'] = str(e)
+ data = simplejson.dumps(response_data)
+ return HttpResponse(data, mimetype="application/json")
+
+@ajax_login_required
+def mark_tag(request, tag=None, **kwargs):
+ action = kwargs['action']
+ ts = MarkedTag.objects.filter(user=request.user, tag__name=tag)
+ if action == 'remove':
+ logging.debug('deleting tag %s' % tag)
+ ts.delete()
+ else:
+ reason = kwargs['reason']
+ if len(ts) == 0:
+ try:
+ t = Tag.objects.get(name=tag)
+ mt = MarkedTag(user=request.user, reason=reason, tag=t)
+ mt.save()
+ except:
+ pass
+ else:
+ ts.update(reason=reason)
+ return HttpResponse(simplejson.dumps(''), mimetype="application/json")
+
+@ajax_login_required
+def ajax_toggle_ignored_questions(request):
+ if request.user.hide_ignored_questions:
+ new_hide_setting = False
+ else:
+ new_hide_setting = True
+ request.user.hide_ignored_questions = new_hide_setting
+ request.user.save()
+
+@ajax_method
+def ajax_command(request):
+ if 'command' not in request.POST:
+ return HttpResponseForbidden(mimetype="application/json")
+ if request.POST['command'] == 'toggle-ignored-questions':
+ return ajax_toggle_ignored_questions(request)
+
+def users(request):
+ is_paginated = True
+ sortby = request.GET.get('sort', 'reputation')
+ suser = request.REQUEST.get('q', "")
+ try:
+ page = int(request.GET.get('page', '1'))
+ except ValueError:
+ page = 1
+
+ if suser == "":
+ if sortby == "newest":
+ objects_list = Paginator(User.objects.all().order_by('-date_joined'), USERS_PAGE_SIZE)
+ elif sortby == "last":
+ objects_list = Paginator(User.objects.all().order_by('date_joined'), USERS_PAGE_SIZE)
+ elif sortby == "user":
+ objects_list = Paginator(User.objects.all().order_by('username'), USERS_PAGE_SIZE)
+ # default
+ else:
+ objects_list = Paginator(User.objects.all().order_by('-reputation'), USERS_PAGE_SIZE)
+ base_url = reverse('users') + '?sort=%s&' % sortby
+ else:
+ sortby = "reputation"
+ objects_list = Paginator(User.objects.extra(where=['username like %s'], params=['%' + suser + '%']).order_by('-reputation'), USERS_PAGE_SIZE)
+ base_url = reverse('users') + '?name=%s&sort=%s&' % (suser, sortby)
+
+ try:
+ users = objects_list.page(page)
+ except (EmptyPage, InvalidPage):
+ users = objects_list.page(objects_list.num_pages)
+
+ return render_to_response('users.html', {
+ "users" : users,
+ "suser" : suser,
+ "keywords" : suser,
+ "tab_id" : sortby,
+ "context" : {
+ 'is_paginated' : is_paginated,
+ 'pages': objects_list.num_pages,
+ 'page': page,
+ 'has_previous': users.has_previous(),
+ 'has_next': users.has_next(),
+ 'previous': users.previous_page_number(),
+ 'next': users.next_page_number(),
+ 'base_url' : base_url
+ }
+
+ }, context_instance=RequestContext(request))
+
+def user(request, id):
+ sort = request.GET.get('sort', 'stats')
+ user_view = dict((v.id, v) for v in USER_TEMPLATE_VIEWS).get(sort, USER_TEMPLATE_VIEWS[0])
+ from forum import views
+ func = getattr(views, user_view.view_name)
+ return func(request, id, user_view)
+
+@login_required
+def moderate_user(request, id):
+ """ajax handler of user moderation
+ """
+ if not auth.can_moderate_users(request.user) or request.method != 'POST':
+ raise Http404
+ if not request.is_ajax():
+ return HttpResponseForbidden(mimetype="application/json")
+
+ user = get_object_or_404(User, id=id)
+ form = ModerateUserForm(request.POST, instance=user)
+
+ if form.is_valid():
+ form.save()
+ logging.debug('data saved')
+ response = HttpResponse(simplejson.dumps(''), mimetype="application/json")
+ else:
+ response = HttpResponseForbidden(mimetype="application/json")
+ return response
+
+@login_required
+def edit_user(request, id):
+ user = get_object_or_404(User, id=id)
+ if request.user != user:
+ raise Http404
+ if request.method == "POST":
+ form = EditUserForm(user, request.POST)
+ if form.is_valid():
+ new_email = sanitize_html(form.cleaned_data['email'])
+
+ from django_authopenid.views import set_new_email
+ set_new_email(user, new_email)
+
+ #user.username = sanitize_html(form.cleaned_data['username'])
+ user.real_name = sanitize_html(form.cleaned_data['realname'])
+ user.website = sanitize_html(form.cleaned_data['website'])
+ user.location = sanitize_html(form.cleaned_data['city'])
+ user.date_of_birth = sanitize_html(form.cleaned_data['birthday'])
+ if len(user.date_of_birth) == 0:
+ user.date_of_birth = '1900-01-01'
+ user.about = sanitize_html(form.cleaned_data['about'])
+
+ user.save()
+ # send user updated singal if full fields have been updated
+ if user.email and user.real_name and user.website and user.location and \
+ user.date_of_birth and user.about:
+ user_updated.send(sender=user.__class__, instance=user, updated_by=user)
+ return HttpResponseRedirect(user.get_profile_url())
+ else:
+ form = EditUserForm(user)
+ return render_to_response('user_edit.html', {
+ 'form' : form,
+ 'gravatar_faq_url' : reverse('faq') + '#gravatar',
+ }, context_instance=RequestContext(request))
+
+def user_stats(request, user_id, user_view):
+ user = get_object_or_404(User, id=user_id)
+ questions = Question.objects.extra(
+ select={
+ 'vote_count' : 'question.score',
+ 'favorited_myself' : 'SELECT count(*) FROM favorite_question f WHERE f.user_id = %s AND f.question_id = question.id',
+ 'la_user_id' : 'auth_user.id',
+ 'la_username' : 'auth_user.username',
+ 'la_user_gold' : 'auth_user.gold',
+ 'la_user_silver' : 'auth_user.silver',
+ 'la_user_bronze' : 'auth_user.bronze',
+ 'la_user_reputation' : 'auth_user.reputation'
+ },
+ select_params=[user_id],
+ tables=['question', 'auth_user'],
+ where=['question.deleted=False AND question.author_id=%s AND question.last_activity_by_id = auth_user.id'],
+ params=[user_id],
+ order_by=['-vote_count', '-last_activity_at']
+ ).values('vote_count',
+ 'favorited_myself',
+ 'id',
+ 'title',
+ 'author_id',
+ 'added_at',
+ 'answer_accepted',
+ 'answer_count',
+ 'comment_count',
+ 'view_count',
+ 'favourite_count',
+ 'summary',
+ 'tagnames',
+ 'vote_up_count',
+ 'vote_down_count',
+ 'last_activity_at',
+ 'la_user_id',
+ 'la_username',
+ 'la_user_gold',
+ 'la_user_silver',
+ 'la_user_bronze',
+ 'la_user_reputation')[:100]
+
+ answered_questions = Question.objects.extra(
+ select={
+ 'vote_up_count' : 'answer.vote_up_count',
+ 'vote_down_count' : 'answer.vote_down_count',
+ 'answer_id' : 'answer.id',
+ 'accepted' : 'answer.accepted',
+ 'vote_count' : 'answer.score',
+ 'comment_count' : 'answer.comment_count'
+ },
+ tables=['question', 'answer'],
+ where=['answer.deleted=False AND question.deleted=False AND answer.author_id=%s AND answer.question_id=question.id'],
+ params=[user_id],
+ order_by=['-vote_count', '-answer_id'],
+ select_params=[user_id]
+ ).distinct().values('comment_count',
+ 'id',
+ 'answer_id',
+ 'title',
+ 'author_id',
+ 'accepted',
+ 'vote_count',
+ 'answer_count',
+ 'vote_up_count',
+ 'vote_down_count')[:100]
+
+ up_votes = Vote.objects.get_up_vote_count_from_user(user)
+ down_votes = Vote.objects.get_down_vote_count_from_user(user)
+ votes_today = Vote.objects.get_votes_count_today_from_user(user)
+ votes_total = VOTE_RULES['scope_votes_per_user_per_day']
+
+ question_id_set = set(map(lambda v: v['id'], list(questions))) \
+ | set(map(lambda v: v['id'], list(answered_questions)))
+
+ user_tags = Tag.objects.filter(questions__id__in = question_id_set)
+ try:
+ from django.db.models import Count
+ awards = Award.objects.extra(
+ select={'id': 'badge.id',
+ 'name':'badge.name',
+ 'description': 'badge.description',
+ 'type': 'badge.type'},
+ tables=['award', 'badge'],
+ order_by=['-awarded_at'],
+ where=['user_id=%s AND badge_id=badge.id'],
+ params=[user.id]
+ ).values('id', 'name', 'description', 'type')
+ total_awards = awards.count()
+ awards = awards.annotate(count = Count('badge__id'))
+ user_tags = user_tags.annotate(user_tag_usage_count=Count('name'))
+
+ except ImportError:
+ awards = Award.objects.extra(
+ select={'id': 'badge.id',
+ 'count': 'count(badge_id)',
+ 'name':'badge.name',
+ 'description': 'badge.description',
+ 'type': 'badge.type'},
+ tables=['award', 'badge'],
+ order_by=['-awarded_at'],
+ where=['user_id=%s AND badge_id=badge.id'],
+ params=[user.id]
+ ).values('id', 'count', 'name', 'description', 'type')
+ total_awards = awards.count()
+ awards.query.group_by = ['badge_id']
+
+ user_tags = user_tags.extra(
+ select={'user_tag_usage_count': 'COUNT(1)',},
+ order_by=['-user_tag_usage_count'],
+ )
+ user_tags.query.group_by = ['name']
+
+ if auth.can_moderate_users(request.user):
+ moderate_user_form = ModerateUserForm(instance=user)
+ else:
+ moderate_user_form = None
+
+ return render_to_response(user_view.template_file,{
+ 'moderate_user_form': moderate_user_form,
+ "tab_name" : user_view.id,
+ "tab_description" : user_view.tab_description,
+ "page_title" : user_view.page_title,
+ "view_user" : user,
+ "questions" : questions,
+ "answered_questions" : answered_questions,
+ "up_votes" : up_votes,
+ "down_votes" : down_votes,
+ "total_votes": up_votes + down_votes,
+ "votes_today_left": votes_total-votes_today,
+ "votes_total_per_day": votes_total,
+ "user_tags" : user_tags[:50],
+ "tags" : tags,
+ "awards": awards,
+ "total_awards" : total_awards,
+ }, context_instance=RequestContext(request))
+
+def user_recent(request, user_id, user_view):
+ user = get_object_or_404(User, id=user_id)
+ def get_type_name(type_id):
+ for item in TYPE_ACTIVITY:
+ if type_id in item:
+ return item[1]
+
+ class Event:
+ def __init__(self, time, type, title, summary, answer_id, question_id):
+ self.time = time
+ self.type = get_type_name(type)
+ self.type_id = type
+ self.title = title
+ self.summary = summary
+ slug_title = slugify(title)
+ self.title_link = reverse('question', kwargs={'id':question_id}) + u'%s' % slug_title
+ if int(answer_id) > 0:
+ self.title_link += '#%s' % answer_id
+
+ class AwardEvent:
+ def __init__(self, time, type, id):
+ self.time = time
+ self.type = get_type_name(type)
+ self.type_id = type
+ self.badge = get_object_or_404(Badge, id=id)
+
+ activities = []
+ # ask questions
+ questions = Activity.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'question.id',
+ 'active_at' : 'activity.active_at',
+ 'activity_type' : 'activity.activity_type'
+ },
+ tables=['activity', 'question'],
+ where=['activity.content_type_id = %s AND activity.object_id = ' +
+ 'question.id AND question.deleted=False AND activity.user_id = %s AND activity.activity_type = %s'],
+ params=[question_type_id, user_id, TYPE_ACTIVITY_ASK_QUESTION],
+ order_by=['-activity.active_at']
+ ).values(
+ 'title',
+ 'question_id',
+ 'active_at',
+ 'activity_type'
+ )
+ if len(questions) > 0:
+ questions = [(Event(q['active_at'], q['activity_type'], q['title'], '', '0', \
+ q['question_id'])) for q in questions]
+ activities.extend(questions)
+
+ # answers
+ answers = Activity.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'question.id',
+ 'answer_id' : 'answer.id',
+ 'active_at' : 'activity.active_at',
+ 'activity_type' : 'activity.activity_type'
+ },
+ tables=['activity', 'answer', 'question'],
+ where=['activity.content_type_id = %s AND activity.object_id = answer.id AND ' +
+ 'answer.question_id=question.id AND answer.deleted=False AND activity.user_id=%s AND '+
+ 'activity.activity_type=%s AND question.deleted=False'],
+ params=[answer_type_id, user_id, TYPE_ACTIVITY_ANSWER],
+ order_by=['-activity.active_at']
+ ).values(
+ 'title',
+ 'question_id',
+ 'answer_id',
+ 'active_at',
+ 'activity_type'
+ )
+ if len(answers) > 0:
+ answers = [(Event(q['active_at'], q['activity_type'], q['title'], '', q['answer_id'], \
+ q['question_id'])) for q in answers]
+ activities.extend(answers)
+
+ # question comments
+ comments = Activity.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'comment.object_id',
+ 'added_at' : 'comment.added_at',
+ 'activity_type' : 'activity.activity_type'
+ },
+ tables=['activity', 'question', 'comment'],
+
+ where=['activity.content_type_id = %s AND activity.object_id = comment.id AND '+
+ 'activity.user_id = comment.user_id AND comment.object_id=question.id AND '+
+ 'comment.content_type_id=%s AND activity.user_id = %s AND activity.activity_type=%s AND ' +
+ 'question.deleted=False'],
+ params=[comment_type_id, question_type_id, user_id, TYPE_ACTIVITY_COMMENT_QUESTION],
+ order_by=['-comment.added_at']
+ ).values(
+ 'title',
+ 'question_id',
+ 'added_at',
+ 'activity_type'
+ )
+
+ if len(comments) > 0:
+ comments = [(Event(q['added_at'], q['activity_type'], q['title'], '', '0', \
+ q['question_id'])) for q in comments]
+ activities.extend(comments)
+
+ # answer comments
+ comments = Activity.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'question.id',
+ 'answer_id' : 'answer.id',
+ 'added_at' : 'comment.added_at',
+ 'activity_type' : 'activity.activity_type'
+ },
+ tables=['activity', 'question', 'answer', 'comment'],
+
+ where=['activity.content_type_id = %s AND activity.object_id = comment.id AND '+
+ 'activity.user_id = comment.user_id AND comment.object_id=answer.id AND '+
+ 'comment.content_type_id=%s AND question.id = answer.question_id AND '+
+ 'activity.user_id = %s AND activity.activity_type=%s AND '+
+ 'answer.deleted=False AND question.deleted=False'],
+ params=[comment_type_id, answer_type_id, user_id, TYPE_ACTIVITY_COMMENT_ANSWER],
+ order_by=['-comment.added_at']
+ ).values(
+ 'title',
+ 'question_id',
+ 'answer_id',
+ 'added_at',
+ 'activity_type'
+ )
+
+ if len(comments) > 0:
+ comments = [(Event(q['added_at'], q['activity_type'], q['title'], '', q['answer_id'], \
+ q['question_id'])) for q in comments]
+ activities.extend(comments)
+
+ # question revisions
+ revisions = Activity.objects.extra(
+ select={
+ 'title' : 'question_revision.title',
+ 'question_id' : 'question_revision.question_id',
+ 'added_at' : 'activity.active_at',
+ 'activity_type' : 'activity.activity_type',
+ 'summary' : 'question_revision.summary'
+ },
+ tables=['activity', 'question_revision', 'question'],
+ where=['activity.content_type_id = %s AND activity.object_id = question_revision.id AND '+
+ 'question_revision.id=question.id AND question.deleted=False AND '+
+ 'activity.user_id = question_revision.author_id AND activity.user_id = %s AND '+
+ 'activity.activity_type=%s'],
+ params=[question_revision_type_id, user_id, TYPE_ACTIVITY_UPDATE_QUESTION],
+ order_by=['-activity.active_at']
+ ).values(
+ 'title',
+ 'question_id',
+ 'added_at',
+ 'activity_type',
+ 'summary'
+ )
+
+ if len(revisions) > 0:
+ revisions = [(Event(q['added_at'], q['activity_type'], q['title'], q['summary'], '0', \
+ q['question_id'])) for q in revisions]
+ activities.extend(revisions)
+
+ # answer revisions
+ revisions = Activity.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'question.id',
+ 'answer_id' : 'answer.id',
+ 'added_at' : 'activity.active_at',
+ 'activity_type' : 'activity.activity_type',
+ 'summary' : 'answer_revision.summary'
+ },
+ tables=['activity', 'answer_revision', 'question', 'answer'],
+
+ where=['activity.content_type_id = %s AND activity.object_id = answer_revision.id AND '+
+ 'activity.user_id = answer_revision.author_id AND activity.user_id = %s AND '+
+ 'answer_revision.answer_id=answer.id AND answer.question_id = question.id AND '+
+ 'question.deleted=False AND answer.deleted=False AND '+
+ 'activity.activity_type=%s'],
+ params=[answer_revision_type_id, user_id, TYPE_ACTIVITY_UPDATE_ANSWER],
+ order_by=['-activity.active_at']
+ ).values(
+ 'title',
+ 'question_id',
+ 'added_at',
+ 'answer_id',
+ 'activity_type',
+ 'summary'
+ )
+
+ if len(revisions) > 0:
+ revisions = [(Event(q['added_at'], q['activity_type'], q['title'], q['summary'], \
+ q['answer_id'], q['question_id'])) for q in revisions]
+ activities.extend(revisions)
+
+ # accepted answers
+ accept_answers = Activity.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'question.id',
+ 'added_at' : 'activity.active_at',
+ 'activity_type' : 'activity.activity_type',
+ },
+ tables=['activity', 'answer', 'question'],
+ where=['activity.content_type_id = %s AND activity.object_id = answer.id AND '+
+ 'activity.user_id = question.author_id AND activity.user_id = %s AND '+
+ 'answer.deleted=False AND question.deleted=False AND '+
+ 'answer.question_id=question.id AND activity.activity_type=%s'],
+ params=[answer_type_id, user_id, TYPE_ACTIVITY_MARK_ANSWER],
+ order_by=['-activity.active_at']
+ ).values(
+ 'title',
+ 'question_id',
+ 'added_at',
+ 'activity_type',
+ )
+ if len(accept_answers) > 0:
+ accept_answers = [(Event(q['added_at'], q['activity_type'], q['title'], '', '0', \
+ q['question_id'])) for q in accept_answers]
+ activities.extend(accept_answers)
+ #award history
+ awards = Activity.objects.extra(
+ select={
+ 'badge_id': 'badge.id',
+ 'awarded_at': 'award.awarded_at',
+ 'activity_type': 'activity.activity_type'
+ },
+ tables=['activity', 'award', 'badge'],
+ where=['activity.user_id = award.user_id AND activity.user_id = %s AND ' +
+ 'award.badge_id=badge.id AND activity.object_id=award.id AND activity.activity_type=%s'],
+ params=[user_id, TYPE_ACTIVITY_PRIZE],
+ order_by=['-activity.active_at']
+ ).values(
+ 'badge_id',
+ 'awarded_at',
+ 'activity_type'
+ )
+ if len(awards) > 0:
+ awards = [(AwardEvent(q['awarded_at'], q['activity_type'], q['badge_id'])) for q in awards]
+ activities.extend(awards)
+
+ activities.sort(lambda x, y: cmp(y.time, x.time))
+
+ return render_to_response(user_view.template_file,{
+ "tab_name" : user_view.id,
+ "tab_description" : user_view.tab_description,
+ "page_title" : user_view.page_title,
+ "view_user" : user,
+ "activities" : activities[:user_view.data_size]
+ }, context_instance=RequestContext(request))
+
+def user_responses(request, user_id, user_view):
+ """
+ We list answers for question, comments, and answer accepted by others for this user.
+ """
+ class Response:
+ def __init__(self, type, title, question_id, answer_id, time, username, user_id, content):
+ self.type = type
+ self.title = title
+ self.titlelink = reverse('question', args=[question_id]) + u'%s#%s' % (slugify(title), answer_id)
+ self.time = time
+ self.userlink = reverse('users') + u'%s/%s/' % (user_id, username)
+ self.username = username
+ self.content = u'%s ...' % strip_tags(content)[:300]
+
+ def __unicode__(self):
+ return u'%s %s' % (self.type, self.titlelink)
+
+ user = get_object_or_404(User, id=user_id)
+ responses = []
+ answers = Answer.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'question.id',
+ 'answer_id' : 'answer.id',
+ 'added_at' : 'answer.added_at',
+ 'html' : 'answer.html',
+ 'username' : 'auth_user.username',
+ 'user_id' : 'auth_user.id'
+ },
+ select_params=[user_id],
+ tables=['answer', 'question', 'auth_user'],
+ where=['answer.question_id = question.id AND answer.deleted=False AND question.deleted=False AND '+
+ 'question.author_id = %s AND answer.author_id <> %s AND answer.author_id=auth_user.id'],
+ params=[user_id, user_id],
+ order_by=['-answer.id']
+ ).values(
+ 'title',
+ 'question_id',
+ 'answer_id',
+ 'added_at',
+ 'html',
+ 'username',
+ 'user_id'
+ )
+
+ if len(answers) > 0:
+ answers = [(Response(TYPE_RESPONSE['QUESTION_ANSWERED'], a['title'], a['question_id'],
+ a['answer_id'], a['added_at'], a['username'], a['user_id'], a['html'])) for a in answers]
+ responses.extend(answers)
+
+
+ # question comments
+ comments = Comment.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'comment.object_id',
+ 'added_at' : 'comment.added_at',
+ 'comment' : 'comment.comment',
+ 'username' : 'auth_user.username',
+ 'user_id' : 'auth_user.id'
+ },
+ tables=['question', 'auth_user', 'comment'],
+ where=['question.deleted=False AND question.author_id = %s AND comment.object_id=question.id AND '+
+ 'comment.content_type_id=%s AND comment.user_id <> %s AND comment.user_id = auth_user.id'],
+ params=[user_id, question_type_id, user_id],
+ order_by=['-comment.added_at']
+ ).values(
+ 'title',
+ 'question_id',
+ 'added_at',
+ 'comment',
+ 'username',
+ 'user_id'
+ )
+
+ if len(comments) > 0:
+ comments = [(Response(TYPE_RESPONSE['QUESTION_COMMENTED'], c['title'], c['question_id'],
+ '', c['added_at'], c['username'], c['user_id'], c['comment'])) for c in comments]
+ responses.extend(comments)
+
+ # answer comments
+ comments = Comment.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'question.id',
+ 'answer_id' : 'answer.id',
+ 'added_at' : 'comment.added_at',
+ 'comment' : 'comment.comment',
+ 'username' : 'auth_user.username',
+ 'user_id' : 'auth_user.id'
+ },
+ tables=['answer', 'auth_user', 'comment', 'question'],
+ where=['answer.deleted=False AND answer.author_id = %s AND comment.object_id=answer.id AND '+
+ 'comment.content_type_id=%s AND comment.user_id <> %s AND comment.user_id = auth_user.id '+
+ 'AND question.id = answer.question_id'],
+ params=[user_id, answer_type_id, user_id],
+ order_by=['-comment.added_at']
+ ).values(
+ 'title',
+ 'question_id',
+ 'answer_id',
+ 'added_at',
+ 'comment',
+ 'username',
+ 'user_id'
+ )
+
+ if len(comments) > 0:
+ comments = [(Response(TYPE_RESPONSE['ANSWER_COMMENTED'], c['title'], c['question_id'],
+ c['answer_id'], c['added_at'], c['username'], c['user_id'], c['comment'])) for c in comments]
+ responses.extend(comments)
+
+ # answer has been accepted
+ answers = Answer.objects.extra(
+ select={
+ 'title' : 'question.title',
+ 'question_id' : 'question.id',
+ 'answer_id' : 'answer.id',
+ 'added_at' : 'answer.accepted_at',
+ 'html' : 'answer.html',
+ 'username' : 'auth_user.username',
+ 'user_id' : 'auth_user.id'
+ },
+ select_params=[user_id],
+ tables=['answer', 'question', 'auth_user'],
+ where=['answer.question_id = question.id AND answer.deleted=False AND question.deleted=False AND '+
+ 'answer.author_id = %s AND answer.accepted=True AND question.author_id=auth_user.id'],
+ params=[user_id],
+ order_by=['-answer.id']
+ ).values(
+ 'title',
+ 'question_id',
+ 'answer_id',
+ 'added_at',
+ 'html',
+ 'username',
+ 'user_id'
+ )
+ if len(answers) > 0:
+ answers = [(Response(TYPE_RESPONSE['ANSWER_ACCEPTED'], a['title'], a['question_id'],
+ a['answer_id'], a['added_at'], a['username'], a['user_id'], a['html'])) for a in answers]
+ responses.extend(answers)
+
+ # sort posts by time
+ responses.sort(lambda x, y: cmp(y.time, x.time))
+
+ return render_to_response(user_view.template_file, {
+ "tab_name": user_view.id,
+ "tab_description": user_view.tab_description,
+ "page_title": user_view.page_title,
+ "view_user": user,
+ "responses": responses[:user_view.data_size],
+
+ }, context_instance=RequestContext(request))
+
+def user_votes(request, user_id, user_view):
+ user = get_object_or_404(User, id=user_id)
+ if not can_view_user_votes(request.user, user):
+ raise Http404
+ votes = []
+ question_votes = Vote.objects.extra(
+ select={
+ 'title': 'question.title',
+ 'question_id': 'question.id',
+ 'answer_id': 0,
+ 'voted_at': 'vote.voted_at',
+ 'vote': 'vote',
+ },
+ select_params=[user_id],
+ tables=['vote', 'question', 'auth_user'],
+ where=['vote.content_type_id = %s AND vote.user_id = %s AND vote.object_id = question.id ' +
+ 'AND vote.user_id=auth_user.id'],
+ params=[question_type_id, user_id],
+ order_by=['-vote.id']
+ ).values(
+ 'title',
+ 'question_id',
+ 'answer_id',
+ 'voted_at',
+ 'vote',
+ )
+ if(len(question_votes) > 0):
+ votes.extend(question_votes)
+
+ answer_votes = Vote.objects.extra(
+ select={
+ 'title': 'question.title',
+ 'question_id': 'question.id',
+ 'answer_id': 'answer.id',
+ 'voted_at': 'vote.voted_at',
+ 'vote': 'vote',
+ },
+ select_params=[user_id],
+ tables=['vote', 'answer', 'question', 'auth_user'],
+ where=['vote.content_type_id = %s AND vote.user_id = %s AND vote.object_id = answer.id ' +
+ 'AND answer.question_id = question.id AND vote.user_id=auth_user.id'],
+ params=[answer_type_id, user_id],
+ order_by=['-vote.id']
+ ).values(
+ 'title',
+ 'question_id',
+ 'answer_id',
+ 'voted_at',
+ 'vote',
+ )
+ if(len(answer_votes) > 0):
+ votes.extend(answer_votes)
+ votes.sort(lambda x, y: cmp(y['voted_at'], x['voted_at']))
+ return render_to_response(user_view.template_file, {
+ "tab_name": user_view.id,
+ "tab_description": user_view.tab_description,
+ "page_title": user_view.page_title,
+ "view_user": user,
+ "votes": votes[:user_view.data_size]
+
+ }, context_instance=RequestContext(request))
+
+def user_reputation(request, user_id, user_view):
+ user = get_object_or_404(User, id=user_id)
+ try:
+ from django.db.models import Sum
+ reputation = Repute.objects.extra(
+ select={'question_id':'question_id',
+ 'title': 'question.title'},
+ tables=['repute', 'question'],
+ order_by=['-reputed_at'],
+ where=['user_id=%s AND question_id=question.id'],
+ params=[user.id]
+ ).values('question_id', 'title', 'reputed_at', 'reputation')
+ reputation = reputation.annotate(positive=Sum("positive"), negative=Sum("negative"))
+ except ImportError:
+ reputation = Repute.objects.extra(
+ select={'positive':'sum(positive)', 'negative':'sum(negative)', 'question_id':'question_id',
+ 'title': 'question.title'},
+ tables=['repute', 'question'],
+ order_by=['-reputed_at'],
+ where=['user_id=%s AND question_id=question.id'],
+ params=[user.id]
+ ).values('positive', 'negative', 'question_id', 'title', 'reputed_at', 'reputation')
+ reputation.query.group_by = ['question_id']
+
+ rep_list = []
+ for rep in Repute.objects.filter(user=user).order_by('reputed_at'):
+ dic = '[%s,%s]' % (calendar.timegm(rep.reputed_at.timetuple()) * 1000, rep.reputation)
+ rep_list.append(dic)
+ reps = ','.join(rep_list)
+ reps = '[%s]' % reps
+
+ return render_to_response(user_view.template_file, {
+ "tab_name": user_view.id,
+ "tab_description": user_view.tab_description,
+ "page_title": user_view.page_title,
+ "view_user": user,
+ "reputation": reputation,
+ "reps": reps
+ }, context_instance=RequestContext(request))
+
+def user_favorites(request, user_id, user_view):
+ user = get_object_or_404(User, id=user_id)
+ questions = Question.objects.extra(
+ select={
+ 'vote_count' : 'question.vote_up_count + question.vote_down_count',
+ 'favorited_myself' : 'SELECT count(*) FROM favorite_question f WHERE f.user_id = %s '+
+ 'AND f.question_id = question.id',
+ 'la_user_id' : 'auth_user.id',
+ 'la_username' : 'auth_user.username',
+ 'la_user_gold' : 'auth_user.gold',
+ 'la_user_silver' : 'auth_user.silver',
+ 'la_user_bronze' : 'auth_user.bronze',
+ 'la_user_reputation' : 'auth_user.reputation'
+ },
+ select_params=[user_id],
+ tables=['question', 'auth_user', 'favorite_question'],
+ where=['question.deleted=True AND question.last_activity_by_id = auth_user.id '+
+ 'AND favorite_question.question_id = question.id AND favorite_question.user_id = %s'],
+ params=[user_id],
+ order_by=['-vote_count', '-question.id']
+ ).values('vote_count',
+ 'favorited_myself',
+ 'id',
+ 'title',
+ 'author_id',
+ 'added_at',
+ 'answer_accepted',
+ 'answer_count',
+ 'comment_count',
+ 'view_count',
+ 'favourite_count',
+ 'summary',
+ 'tagnames',
+ 'vote_up_count',
+ 'vote_down_count',
+ 'last_activity_at',
+ 'la_user_id',
+ 'la_username',
+ 'la_user_gold',
+ 'la_user_silver',
+ 'la_user_bronze',
+ 'la_user_reputation')
+ return render_to_response(user_view.template_file,{
+ "tab_name" : user_view.id,
+ "tab_description" : user_view.tab_description,
+ "page_title" : user_view.page_title,
+ "questions" : questions[:user_view.data_size],
+ "view_user" : user
+ }, context_instance=RequestContext(request))
+
+def user_email_subscriptions(request, user_id, user_view):
+ user = get_object_or_404(User, id=user_id)
+ if request.method == 'POST':
+ email_feeds_form = EditUserEmailFeedsForm(request.POST)
+ tag_filter_form = TagFilterSelectionForm(request.POST, instance=user)
+ if email_feeds_form.is_valid() and tag_filter_form.is_valid():
+
+ action_status = None
+ tag_filter_saved = tag_filter_form.save()
+ if tag_filter_saved:
+ action_status = _('changes saved')
+ if 'save' in request.POST:
+ feeds_saved = email_feeds_form.save(user)
+ if feeds_saved:
+ action_status = _('changes saved')
+ elif 'stop_email' in request.POST:
+ email_stopped = email_feeds_form.reset().save(user)
+ initial_values = EditUserEmailFeedsForm.NO_EMAIL_INITIAL
+ email_feeds_form = EditUserEmailFeedsForm(initial=initial_values)
+ if email_stopped:
+ action_status = _('email updates canceled')
+ else:
+ email_feeds_form = EditUserEmailFeedsForm()
+ email_feeds_form.set_initial_values(user)
+ tag_filter_form = TagFilterSelectionForm(instance=user)
+ action_status = None
+ return render_to_response(user_view.template_file,{
+ 'tab_name':user_view.id,
+ 'tab_description':user_view.tab_description,
+ 'page_title':user_view.page_title,
+ 'view_user':user,
+ 'email_feeds_form':email_feeds_form,
+ 'tag_filter_selection_form':tag_filter_form,
+ 'action_status':action_status,
+ }, context_instance=RequestContext(request))
+
+def question_comments(request, id):
+ question = get_object_or_404(Question, id=id)
+ user = request.user
+ return __comments(request, question, 'question')
+
+def answer_comments(request, id):
+ answer = get_object_or_404(Answer, id=id)
+ user = request.user
+ return __comments(request, answer, 'answer')
+
+def __comments(request, obj, type):
+ # only support get comments by ajax now
+ user = request.user
+ if request.is_ajax():
+ if request.method == "GET":
+ response = __generate_comments_json(obj, type, user)
+ elif request.method == "POST":
+ if auth.can_add_comments(user,obj):
+ comment_data = request.POST.get('comment')
+ comment = Comment(content_object=obj, comment=comment_data, user=request.user)
+ comment.save()
+ obj.comment_count = obj.comment_count + 1
+ obj.save()
+ response = __generate_comments_json(obj, type, user)
+ else:
+ response = HttpResponseForbidden(mimetype="application/json")
+ return response
+
+def __generate_comments_json(obj, type, user):
+ comments = obj.comments.all().order_by('id')
+ # {"Id":6,"PostId":38589,"CreationDate":"an hour ago","Text":"hello there!","UserDisplayName":"Jarrod Dixon","UserUrl":"/users/3/jarrod-dixon","DeleteUrl":null}
+ json_comments = []
+ from forum.templatetags.extra_tags import diff_date
+ for comment in comments:
+ comment_user = comment.user
+ delete_url = ""
+ if user != None and auth.can_delete_comment(user, comment):
+ #/posts/392845/comments/219852/delete
+ #todo translate this url
+ delete_url = reverse(index) + type + "s/%s/comments/%s/delete/" % (obj.id, comment.id)
+ json_comments.append({"id" : comment.id,
+ "object_id" : obj.id,
+ "comment_age" : diff_date(comment.added_at),
+ "text" : comment.comment,
+ "user_display_name" : comment_user.username,
+ "user_url" : comment_user.get_profile_url(),
+ "delete_url" : delete_url
+ })
+
+ data = simplejson.dumps(json_comments)
+ return HttpResponse(data, mimetype="application/json")
+
+def delete_comment(request, object_id='', comment_id='', commented_object_type=None):
+ response = None
+ commented_object = None
+ if commented_object_type == 'question':
+ commented_object = Question
+ elif commented_object_type == 'answer':
+ commented_object = Answer
+
+ if request.is_ajax():
+ comment = get_object_or_404(Comment, id=comment_id)
+ if auth.can_delete_comment(request.user, comment):
+ obj = get_object_or_404(commented_object, id=object_id)
+ obj.comments.remove(comment)
+ obj.comment_count = obj.comment_count - 1
+ obj.save()
+ user = request.user
+ return __generate_comments_json(obj, commented_object_type, user)
+ raise PermissionDenied()
+
+def logout(request):
+ return render_to_response('logout.html', {
+ 'next' : get_next_url(request),
+ }, context_instance=RequestContext(request))
+
+def badges(request):
+ badges = Badge.objects.all().order_by('type')
+ my_badges = []
+ if request.user.is_authenticated():
+ my_badges = Award.objects.filter(user=request.user)
+ my_badges.query.group_by = ['badge_id']
+
+ return render_to_response('badges.html', {
+ 'badges' : badges,
+ 'mybadges' : my_badges,
+ 'feedback_faq_url' : reverse('feedback'),
+ }, context_instance=RequestContext(request))
+
+def badge(request, id):
+ badge = get_object_or_404(Badge, id=id)
+ awards = Award.objects.extra(
+ select={'id': 'auth_user.id',
+ 'name': 'auth_user.username',
+ 'rep':'auth_user.reputation',
+ 'gold': 'auth_user.gold',
+ 'silver': 'auth_user.silver',
+ 'bronze': 'auth_user.bronze'},
+ tables=['award', 'auth_user'],
+ where=['badge_id=%s AND user_id=auth_user.id'],
+ params=[id]
+ ).distinct('id')
+
+ return render_to_response('badge.html', {
+ 'awards': awards,
+ 'badge': badge,
+ }, context_instance=RequestContext(request))
+
+def read_message(request):
+ if request.method == "POST":
+ if request.POST['formdata'] == 'required':
+ request.session['message_silent'] = 1
+ if request.user.is_authenticated():
+ request.user.delete_messages()
+ return HttpResponse('')
+
+def upload(request):
+ class FileTypeNotAllow(Exception):
+ pass
+ class FileSizeNotAllow(Exception):
+ pass
+ class UploadPermissionNotAuthorized(Exception):
+ pass
+
+ #<result><msg><![CDATA[%s]]></msg><error><![CDATA[%s]]></error><file_url>%s</file_url></result>
+ xml_template = "<result><msg><![CDATA[%s]]></msg><error><![CDATA[%s]]></error><file_url>%s</file_url></result>"
+
+ try:
+ f = request.FILES['file-upload']
+ # check upload permission
+ if not can_upload_files(request.user):
+ raise UploadPermissionNotAuthorized
+
+ # check file type
+ file_name_suffix = os.path.splitext(f.name)[1].lower()
+ if not file_name_suffix in settings.ALLOW_FILE_TYPES:
+ raise FileTypeNotAllow
+
+ # generate new file name
+ new_file_name = str(time.time()).replace('.', str(random.randint(0,100000))) + file_name_suffix
+ # use default storage to store file
+ default_storage.save(new_file_name, f)
+ # check file size
+ # byte
+ size = default_storage.size(new_file_name)
+ if size > settings.ALLOW_MAX_FILE_SIZE:
+ default_storage.delete(new_file_name)
+ raise FileSizeNotAllow
+
+ result = xml_template % ('Good', '', default_storage.url(new_file_name))
+ except UploadPermissionNotAuthorized:
+ result = xml_template % ('', _('uploading images is limited to users with >60 reputation points'), '')
+ except FileTypeNotAllow:
+ result = xml_template % ('', _("allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"), '')
+ except FileSizeNotAllow:
+ result = xml_template % ('', _("maximum upload file size is %sK") % settings.ALLOW_MAX_FILE_SIZE / 1024, '')
+ except Exception:
+ result = xml_template % ('', _('Error uploading file. Please contact the site administrator. Thank you. %s' % Exception), '')
+
+ return HttpResponse(result, mimetype="application/xml")
+
+def books(request):
+ return HttpResponseRedirect(reverse('books') + '/mysql-zhaoyang')
+
+def book(request, short_name, unanswered=False):
+ """
+ 1. questions list
+ 2. book info
+ 3. author info and blog rss items
+ """
+ """
+ List of Questions, Tagged questions, and Unanswered questions.
+ """
+ books = Book.objects.extra(where=['short_name = %s'], params=[short_name])
+ match_count = len(books)
+ if match_count == 0:
+ raise Http404
+ else:
+ # the book info
+ book = books[0]
+ # get author info
+ author_info = BookAuthorInfo.objects.get(book=book)
+ # get author rss info
+ author_rss = BookAuthorRss.objects.filter(book=book)
+
+ # get pagesize from session, if failed then get default value
+ user_page_size = request.session.get("pagesize", QUESTIONS_PAGE_SIZE)
+ # set pagesize equal to logon user specified value in database
+ if request.user.is_authenticated() and request.user.questions_per_page > 0:
+ user_page_size = request.user.questions_per_page
+
+ try:
+ page = int(request.GET.get('page', '1'))
+ except ValueError:
+ page = 1
+
+ view_id = request.GET.get('sort', None)
+ view_dic = {"latest":"-added_at", "active":"-last_activity_at", "hottest":"-answer_count", "mostvoted":"-score"}
+ try:
+ orderby = view_dic[view_id]
+ except KeyError:
+ view_id = "latest"
+ orderby = "-added_at"
+
+ # check if request is from tagged questions
+ if unanswered:
+ # check if request is from unanswered questions
+ # Article.objects.filter(publications__id__exact=1)
+ objects = Question.objects.filter(book__id__exact=book.id, deleted=False, answer_count=0).order_by(orderby)
+ else:
+ objects = Question.objects.filter(book__id__exact=book.id, deleted=False).order_by(orderby)
+
+ # RISK - inner join queries
+ objects = objects.select_related();
+ objects_list = Paginator(objects, user_page_size)
+ questions = objects_list.page(page)
+
+ return render_to_response('book.html', {
+ "book": book,
+ "author_info": author_info,
+ "author_rss": author_rss,
+ "questions": questions,
+ "context": {
+ 'is_paginated': True,
+ 'pages': objects_list.num_pages,
+ 'page': page,
+ 'has_previous': questions.has_previous(),
+ 'has_next': questions.has_next(),
+ 'previous': questions.previous_page_number(),
+ 'next': questions.next_page_number(),
+ 'base_url': request.path + '?sort=%s&' % view_id,
+ 'pagesize': user_page_size
+ }
+ }, context_instance=RequestContext(request))
+
+@login_required
+def ask_book(request, short_name):
+ if request.method == "POST":
+ form = AskForm(request.POST)
+ if form.is_valid():
+ added_at = datetime.datetime.now()
+ html = sanitize_html(markdowner.convert(form.cleaned_data['text']))
+ question = Question(
+ title=strip_tags(form.cleaned_data['title']),
+ author=request.user,
+ added_at=added_at,
+ last_activity_at=added_at,
+ last_activity_by=request.user,
+ wiki=form.cleaned_data['wiki'],
+ tagnames=form.cleaned_data['tags'].strip(),
+ html=html,
+ summary=strip_tags(html)[:120]
+ )
+ if question.wiki:
+ question.last_edited_by = question.author
+ question.last_edited_at = added_at
+ question.wikified_at = added_at
+
+ question.save()
+
+ # create the first revision
+ QuestionRevision.objects.create(
+ question=question,
+ revision=1,
+ title=question.title,
+ author=request.user,
+ revised_at=added_at,
+ tagnames=question.tagnames,
+ summary=CONST['default_version'],
+ text=form.cleaned_data['text']
+ )
+
+ books = Book.objects.extra(where=['short_name = %s'], params=[short_name])
+ match_count = len(books)
+ if match_count == 1:
+ # the book info
+ book = books[0]
+ book.questions.add(question)
+
+ return HttpResponseRedirect(question.get_absolute_url())
+ else:
+ form = AskForm()
+
+ tags = _get_tags_cache_json()
+ return render_to_response('ask.html', {
+ 'form' : form,
+ 'tags' : tags,
+ 'email_validation_faq_url': reverse('faq') + '#validate',
+ }, context_instance=RequestContext(request))
+
+def search(request):
+ """
+ Search by question, user and tag keywords.
+ For questions now we only search keywords in question title.
+ """
+ if request.method == "GET":
+ keywords = request.GET.get("q")
+ search_type = request.GET.get("t")
+ try:
+ page = int(request.GET.get('page', '1'))
+ except ValueError:
+ page = 1
+ if keywords is None:
+ return HttpResponseRedirect(reverse(index))
+ if search_type == 'tag':
+ return HttpResponseRedirect(reverse('tags') + '?q=%s&page=%s' % (keywords.strip(), page))
+ elif search_type == "user":
+ return HttpResponseRedirect(reverse('users') + '?q=%s&page=%s' % (keywords.strip(), page))
+ elif search_type == "question":
+
+ template_file = "questions.html"
+ # Set flag to False by default. If it is equal to True, then need to be saved.
+ pagesize_changed = False
+ # get pagesize from session, if failed then get default value
+ user_page_size = request.session.get("pagesize", QUESTIONS_PAGE_SIZE)
+ # set pagesize equal to logon user specified value in database
+ if request.user.is_authenticated() and request.user.questions_per_page > 0:
+ user_page_size = request.user.questions_per_page
+
+ try:
+ page = int(request.GET.get('page', '1'))
+ # get new pagesize from UI selection
+ pagesize = int(request.GET.get('pagesize', user_page_size))
+ if pagesize <> user_page_size:
+ pagesize_changed = True
+
+ except ValueError:
+ page = 1
+ pagesize = user_page_size
+
+ # save this pagesize to user database
+ if pagesize_changed:
+ request.session["pagesize"] = pagesize
+ if request.user.is_authenticated():
+ user = request.user
+ user.questions_per_page = pagesize
+ user.save()
+
+ view_id = request.GET.get('sort', None)
+ view_dic = {"latest":"-added_at", "active":"-last_activity_at", "hottest":"-answer_count", "mostvoted":"-score"}
+ try:
+ orderby = view_dic[view_id]
+ except KeyError:
+ view_id = "latest"
+ orderby = "-added_at"
+
+ if settings.USE_PG_FTS:
+ objects = Question.objects.filter(deleted=False).extra(
+ select={
+ 'ranking': "ts_rank_cd(tsv, plainto_tsquery(%s), 32)",
+ },
+ where=["tsv @@ plainto_tsquery(%s)"],
+ params=[keywords],
+ select_params=[keywords]
+ ).order_by('-ranking')
+
+ elif settings.USE_SPHINX_SEARCH == True:
+ #search index is now free of delete questions and answers
+ #so there is not "antideleted" filtering here
+ objects = Question.search.query(keywords)
+ #no related selection either because we're relying on full text search here
+ else:
+ objects = Question.objects.filter(deleted=False).extra(where=['title like %s'], params=['%' + keywords + '%']).order_by(orderby)
+ # RISK - inner join queries
+ objects = objects.select_related();
+
+ objects_list = Paginator(objects, pagesize)
+ questions = objects_list.page(page)
+
+ # Get related tags from this page objects
+ related_tags = []
+ for question in questions.object_list:
+ tags = list(question.tags.all())
+ for tag in tags:
+ if tag not in related_tags:
+ related_tags.append(tag)
+
+ #if is_search is true in the context, prepend this string to soting tabs urls
+ search_uri = "?q=%s&page=%d&t=question" % ("+".join(keywords.split()), page)
+
+ return render_to_response(template_file, {
+ "questions" : questions,
+ "tab_id" : view_id,
+ "questions_count" : objects_list.count,
+ "tags" : related_tags,
+ "searchtag" : None,
+ "searchtitle" : keywords,
+ "keywords" : keywords,
+ "is_unanswered" : False,
+ "is_search": True,
+ "search_uri": search_uri,
+ "context" : {
+ 'is_paginated' : True,
+ 'pages': objects_list.num_pages,
+ 'page': page,
+ 'has_previous': questions.has_previous(),
+ 'has_next': questions.has_next(),
+ 'previous': questions.previous_page_number(),
+ 'next': questions.next_page_number(),
+ 'base_url' : request.path + '?t=question&q=%s&sort=%s&' % (keywords, view_id),
+ 'pagesize' : pagesize
+ }}, context_instance=RequestContext(request))
+
+ else:
+ raise Http404
diff --git a/junk.py b/junk.py
new file mode 100644
index 00000000..c6c03d27
--- /dev/null
+++ b/junk.py
@@ -0,0 +1,3 @@
+import os
+
+print os.path.normpath('/haha//haha')
diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo
index 38120e49..b87457df 100644
--- a/locale/en/LC_MESSAGES/django.mo
+++ b/locale/en/LC_MESSAGES/django.mo
Binary files differ
diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po
index bfec60c0..3b8a13cd 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-02-08 18:43-0500\n"
+"POT-Creation-Date: 2010-02-16 00:17-0500\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"
@@ -74,12 +74,12 @@ msgstr ""
#: django_authopenid/forms.py:320
msgid "Incorrect username."
-msgstr "sorry, there is no such user name"
+msgstr ""
#: django_authopenid/urls.py:23 django_authopenid/urls.py:24
#: django_authopenid/urls.py:25 django_authopenid/urls.py:27
#: fbconnect/urls.py:12 fbconnect/urls.py:13 fbconnect/urls.py:14
-#: forum/urls.py:29
+#: forum/urls.py:30
msgid "signin/"
msgstr ""
@@ -149,7 +149,7 @@ msgstr ""
msgid "openid/"
msgstr ""
-#: django_authopenid/urls.py:43 forum/urls.py:49 forum/urls.py:53
+#: django_authopenid/urls.py:43 forum/urls.py:50 forum/urls.py:54
msgid "delete/"
msgstr ""
@@ -168,7 +168,7 @@ msgstr ""
#: django_authopenid/views.py:593
msgid "Welcome email subject line"
-msgstr "Welcome to the Q&A forum"
+msgstr ""
#: django_authopenid/views.py:699
msgid "Password changed."
@@ -178,12 +178,10 @@ msgstr ""
#, 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:738
msgid "Email verification subject line"
-msgstr "Verification Email from Q&A forum"
+msgstr ""
#: django_authopenid/views.py:829
msgid "your email was not changed"
@@ -294,7 +292,7 @@ msgstr ""
msgid "question"
msgstr ""
-#: forum/const.py:58 templates/book.html:110
+#: forum/const.py:58 forum/skins/default/templates/book.html:110
msgid "answer"
msgstr ""
@@ -316,7 +314,7 @@ msgstr ""
#: forum/const.py:63
msgid "received award"
-msgstr "received badge"
+msgstr ""
#: forum/const.py:64
msgid "marked best answer"
@@ -370,7 +368,8 @@ msgstr ""
msgid "[deleted]"
msgstr ""
-#: forum/const.py:87 forum/views.py:796 forum/views.py:815
+#: forum/const.py:87 forum/views.py:792 forum/views.py:811
+#: forum/views/content.py:560 forum/views/content.py:579
msgid "initial version"
msgstr ""
@@ -394,9 +393,10 @@ msgstr ""
msgid "latest questions"
msgstr ""
-#: forum/forms.py:18 templates/answer_edit_tips.html:35
-#: templates/answer_edit_tips.html.py:39 templates/question_edit_tips.html:32
-#: templates/question_edit_tips.html:37
+#: forum/forms.py:18 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 ""
@@ -416,7 +416,8 @@ msgstr ""
msgid "question content must be > 10 characters"
msgstr ""
-#: forum/forms.py:49 templates/header.html:28 templates/header.html.py:56
+#: forum/forms.py:49 forum/skins/default/templates/header.html:28
+#: forum/skins/default/templates/header.html:56
msgid "tags"
msgstr ""
@@ -425,7 +426,7 @@ msgid ""
"Tags are short keywords, with no spaces within. Up to five tags can be used."
msgstr ""
-#: forum/forms.py:58 templates/question_retag.html:39
+#: forum/forms.py:58 forum/skins/default/templates/question_retag.html:39
msgid "tags are required"
msgstr ""
@@ -443,11 +444,16 @@ msgid ""
"characters '.-_#'"
msgstr ""
-#: forum/forms.py:81 templates/index.html:61 templates/index.html.py:73
-#: templates/post_contributor_info.html:7
-#: templates/question_summary_list_roll.html:26
-#: templates/question_summary_list_roll.html:38 templates/questions.html:92
-#: templates/questions.html.py:104
+#: forum/forms.py:81 forum/skins/default/templates/index.html:62
+#: forum/skins/default/templates/index.html:74
+#: 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
+#: forum/skins/default/templates/questions.html:97
+#: forum/skins/default/templates/questions.html:109
+#: forum/skins/default/templates/questions.html:366
+#: forum/skins/default/templates/questions.html:378
+#: templates/unanswered.html:51 templates/unanswered.html.py:63
msgid "community wiki"
msgstr ""
@@ -483,83 +489,84 @@ msgstr ""
msgid "Your message:"
msgstr ""
-#: forum/forms.py:202
+#: forum/forms.py:203
msgid "this email does not have to be linked to gravatar"
msgstr ""
-#: forum/forms.py:204
+#: forum/forms.py:205
msgid "Screen name"
msgstr ""
-#: forum/forms.py:205
+#: forum/forms.py:206
msgid "Real name"
msgstr ""
-#: forum/forms.py:206
+#: forum/forms.py:207
msgid "Website"
msgstr ""
-#: forum/forms.py:207
+#: forum/forms.py:208
msgid "Location"
msgstr ""
-#: forum/forms.py:208
+#: forum/forms.py:209
msgid "Date of birth"
msgstr ""
-#: forum/forms.py:208
+#: forum/forms.py:209
msgid "will not be shown, used to calculate age, format: YYYY-MM-DD"
msgstr ""
-#: forum/forms.py:209 templates/authopenid/settings.html:21
+#: forum/forms.py:210
+#: forum/skins/default/templates/authopenid/settings.html:21
msgid "Profile"
msgstr ""
-#: forum/forms.py:240 forum/forms.py:241
+#: forum/forms.py:241 forum/forms.py:242
msgid "this email has already been registered, please use another one"
msgstr ""
-#: forum/forms.py:247
+#: forum/forms.py:248
msgid "Choose email tag filter"
msgstr ""
-#: forum/forms.py:262 forum/forms.py:263
+#: forum/forms.py:263 forum/forms.py:264
msgid "weekly"
msgstr ""
-#: forum/forms.py:262 forum/forms.py:263
+#: forum/forms.py:263 forum/forms.py:264
msgid "no email"
msgstr ""
-#: forum/forms.py:263
+#: forum/forms.py:264
msgid "daily"
msgstr ""
-#: forum/forms.py:278
+#: forum/forms.py:279
msgid "Asked by me"
msgstr ""
-#: forum/forms.py:281
+#: forum/forms.py:282
msgid "Answered by me"
msgstr ""
-#: forum/forms.py:284
+#: forum/forms.py:285
msgid "Individually selected"
msgstr ""
-#: forum/forms.py:287
+#: forum/forms.py:288
msgid "Entire forum (tag filtered)"
msgstr ""
-#: forum/forms.py:341
+#: forum/forms.py:342
msgid "okay, let's try!"
msgstr ""
-#: forum/forms.py:342
+#: forum/forms.py:343
msgid "no OSQA community email please, thanks"
msgstr ""
-#: forum/forms.py:345
+#: forum/forms.py:346
msgid "please choose one of the options above"
msgstr ""
@@ -624,286 +631,201 @@ msgstr ""
msgid "ignored"
msgstr ""
-#: forum/models.py:541 templates/badges.html:53
+#: forum/models.py:541 forum/skins/default/templates/badges.html:53
msgid "gold"
msgstr ""
-#: forum/models.py:542 templates/badges.html:61
+#: forum/models.py:542 forum/skins/default/templates/badges.html:61
msgid "silver"
msgstr ""
-#: forum/models.py:543 templates/badges.html:68
+#: forum/models.py:543 forum/skins/default/templates/badges.html:68
msgid "bronze"
msgstr ""
-#: forum/urls.py:26
+#: forum/urls.py:27
msgid "upfiles/"
msgstr ""
-#: forum/urls.py:30
+#: forum/urls.py:31
msgid "about/"
msgstr ""
-#: forum/urls.py:31
+#: forum/urls.py:32
msgid "faq/"
msgstr ""
-#: forum/urls.py:32
+#: forum/urls.py:33
msgid "privacy/"
msgstr ""
-#: forum/urls.py:33
+#: forum/urls.py:34
msgid "logout/"
msgstr ""
-#: forum/urls.py:34 forum/urls.py:35 forum/urls.py:36 forum/urls.py:53
+#: forum/urls.py:35 forum/urls.py:36 forum/urls.py:37 forum/urls.py:54
msgid "answers/"
msgstr ""
-#: forum/urls.py:34 forum/urls.py:46 forum/urls.py:49 forum/urls.py:53
+#: forum/urls.py:35 forum/urls.py:47 forum/urls.py:50 forum/urls.py:54
msgid "comments/"
msgstr ""
-#: forum/urls.py:35 forum/urls.py:40 forum/urls.py:75
-#: templates/user_info.html:45
+#: forum/urls.py:36 forum/urls.py:41 forum/urls.py:76
+#: forum/skins/default/templates/user_info.html:45
msgid "edit/"
msgstr ""
-#: forum/urls.py:36 forum/urls.py:45
+#: forum/urls.py:37 forum/urls.py:46
msgid "revisions/"
msgstr ""
-#: forum/urls.py:37 forum/urls.py:38 forum/urls.py:39 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:49
+#: forum/urls.py:38 forum/urls.py:39 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:50
msgid "questions/"
msgstr ""
-#: forum/urls.py:38 forum/urls.py:85
+#: forum/urls.py:39 forum/urls.py:86
msgid "ask/"
msgstr ""
-#: forum/urls.py:39
+#: forum/urls.py:40
msgid "unanswered/"
msgstr ""
-#: forum/urls.py:41
+#: forum/urls.py:42
msgid "close/"
msgstr ""
-#: forum/urls.py:42
+#: forum/urls.py:43
msgid "reopen/"
msgstr ""
-#: forum/urls.py:43
+#: forum/urls.py:44
msgid "answer/"
msgstr ""
-#: forum/urls.py:44
+#: forum/urls.py:45
msgid "vote/"
msgstr ""
-#: forum/urls.py:47
+#: forum/urls.py:48
msgid "command/"
msgstr ""
-#: forum/urls.py:57 forum/views.py:440
+#: forum/urls.py:58 forum/views.py:437 forum/views/content.py:431
msgid "question/"
msgstr ""
-#: forum/urls.py:58 forum/urls.py:59
+#: forum/urls.py:59 forum/urls.py:60
msgid "tags/"
msgstr ""
-#: forum/urls.py:61 forum/urls.py:65
+#: forum/urls.py:62 forum/urls.py:66
msgid "mark-tag/"
msgstr ""
-#: forum/urls.py:61
+#: forum/urls.py:62
msgid "interesting/"
msgstr ""
-#: forum/urls.py:65
+#: forum/urls.py:66
msgid "ignored/"
msgstr ""
-#: forum/urls.py:69
+#: forum/urls.py:70
msgid "unmark-tag/"
msgstr ""
-#: forum/urls.py:73 forum/urls.py:75 forum/urls.py:76
+#: forum/urls.py:74 forum/urls.py:76 forum/urls.py:77
msgid "users/"
msgstr ""
-#: forum/urls.py:74
+#: forum/urls.py:75
msgid "moderate-user/"
msgstr ""
-#: forum/urls.py:77 forum/urls.py:78
+#: forum/urls.py:78 forum/urls.py:79
msgid "badges/"
msgstr ""
-#: forum/urls.py:79
+#: forum/urls.py:80
msgid "messages/"
msgstr ""
-#: forum/urls.py:79
+#: forum/urls.py:80
msgid "markread/"
msgstr ""
-#: forum/urls.py:81
+#: forum/urls.py:82
msgid "nimda/"
msgstr ""
-#: forum/urls.py:83
+#: forum/urls.py:84
msgid "upload/"
msgstr ""
-#: forum/urls.py:84 forum/urls.py:85 forum/urls.py:86
+#: forum/urls.py:85 forum/urls.py:86 forum/urls.py:87
msgid "books/"
msgstr ""
-#: forum/urls.py:87
+#: forum/urls.py:88
msgid "search/"
msgstr ""
-#: forum/urls.py:88
+#: forum/urls.py:89
msgid "feedback/"
msgstr ""
-#: forum/urls.py:89 forum/urls.py:90
+#: forum/urls.py:90 forum/urls.py:91
msgid "account/"
msgstr ""
-#: forum/user.py:16 templates/user_tabs.html:7
-msgid "overview"
-msgstr ""
-
-#: forum/user.py:17
-msgid "user profile"
-msgstr ""
-
-#: forum/user.py:18
-msgid "user profile overview"
-msgstr ""
-
-#: forum/user.py:24 templates/user_tabs.html:9
-msgid "recent activity"
-msgstr ""
-
-#: forum/user.py:25
-msgid "recent user activity"
-msgstr ""
-
-#: forum/user.py:26
-msgid "profile - recent activity"
-msgstr ""
-
-#: forum/user.py:33 templates/user_tabs.html:13
-msgid "responses"
-msgstr ""
-
-#: forum/user.py:34 templates/user_tabs.html:12
-msgid "comments and answers to others questions"
-msgstr ""
-
-#: forum/user.py:35
-msgid "profile - responses"
-msgstr ""
-
-#: forum/user.py:42 templates/user_info.html:22 templates/users.html:26
-msgid "reputation"
-msgstr "karma"
-
-#: forum/user.py:43
-msgid "user reputation in the community"
-msgstr "user karma"
-
-#: forum/user.py:44
-msgid "profile - user reputation"
-msgstr "Profile - User's Karma"
-
-#: forum/user.py:50
-msgid "favorite questions"
-msgstr ""
-
-#: forum/user.py:51
-msgid "users favorite questions"
-msgstr ""
-
-#: forum/user.py:52
-msgid "profile - favorite questions"
-msgstr ""
-
-#: forum/user.py:59 templates/user_tabs.html:20
-msgid "casted votes"
-msgstr "votes"
-
-#: forum/user.py:60 templates/user_tabs.html:20
-msgid "user vote record"
-msgstr ""
-
-#: forum/user.py:61
-msgid "profile - votes"
-msgstr ""
-
-#: forum/user.py:68 templates/user_tabs.html:28
-msgid "email subscriptions"
-msgstr ""
-
-#: forum/user.py:69 templates/user_tabs.html:27
-msgid "email subscription settings"
-msgstr ""
-
-#: forum/user.py:70
-msgid "profile - email subscriptions"
-msgstr ""
-
-#: forum/views.py:141
+#: forum/views.py:141 forum/views/meta.py:33
msgid "Q&A forum feedback"
msgstr ""
-#: forum/views.py:142
+#: forum/views.py:142 forum/views/meta.py:34
msgid "Thanks for the feedback!"
msgstr ""
-#: forum/views.py:150
+#: forum/views.py:150 forum/views/meta.py:42
msgid "We look forward to hearing your feedback! Please, give it next time :)"
msgstr ""
-#: forum/views.py:1098
+#: forum/views.py:1095 forum/views/content.py:1327
#, 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.py:1106
+#: forum/views.py:1103 forum/views/content.py:1335
msgid "email update frequency has been set to daily"
msgstr ""
-#: forum/views.py:1982 forum/views.py:1986
+#: forum/views.py:1980 forum/views.py:1984 forum/views/users.py:836
+#: forum/views/users.py:840
msgid "changes saved"
msgstr ""
-#: forum/views.py:1992
+#: forum/views.py:1990 forum/views/users.py:846
msgid "email updates canceled"
msgstr ""
-#: forum/views.py:2159
+#: forum/views.py:2157 forum/views/content.py:713
msgid "uploading images is limited to users with >60 reputation points"
-msgstr "sorry, file uploading requires karma >60"
+msgstr ""
-#: forum/views.py:2161
+#: forum/views.py:2159 forum/views/content.py:715
msgid "allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"
msgstr ""
-#: forum/views.py:2163
+#: forum/views.py:2161 forum/views/content.py:717
#, python-format
msgid "maximum upload file size is %sK"
msgstr ""
-#: forum/views.py:2165
+#: forum/views.py:2163 forum/views/content.py:719
#, python-format
msgid ""
"Error uploading file. Please contact the site administrator. Thank you. %s"
@@ -911,18 +833,14 @@ msgstr ""
#: forum/management/commands/send_email_alerts.py:156
msgid "email update message subject"
-msgstr "news from Q&A forum"
+msgstr ""
#: forum/management/commands/send_email_alerts.py:158
#, python-format
msgid "%(name)s, this is an update message header for a question"
msgid_plural "%(name)s, this is an update message header for %(num)d questions"
msgstr[0] ""
-"<p>Dear %(name)s,</p></p>The following question has been updated on the Q&A "
-"forum:</p>"
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:169
msgid "new question"
@@ -947,289 +865,280 @@ msgid ""
"go to %(link)s to change frequency of email updates or %(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>"
-
-#: forum/templatetags/extra_tags.py:164 forum/templatetags/extra_tags.py:193
-#: templates/header.html:33
-msgid "badges"
-msgstr ""
-
-#: forum/templatetags/extra_tags.py:165 forum/templatetags/extra_tags.py:192
-msgid "reputation points"
-msgstr "karma"
-
-#: forum/templatetags/extra_tags.py:252
-msgid "2 days ago"
-msgstr ""
-#: forum/templatetags/extra_tags.py:254
-msgid "yesterday"
-msgstr ""
-
-#: forum/templatetags/extra_tags.py:256
-#, python-format
-msgid "%(hr)d hour ago"
-msgid_plural "%(hr)d hours ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: forum/templatetags/extra_tags.py:258
-#, python-format
-msgid "%(min)d min ago"
-msgid_plural "%(min)d mins ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: middleware/anon_user.py:33
-#, python-format
-msgid "first time greeting with %(url)s"
-msgstr ""
-
-#: templates/404.html:24
+#: forum/skins/default/templates/404.html:24
msgid "Sorry, could not find the page you requested."
msgstr ""
-#: templates/404.html:26
+#: forum/skins/default/templates/404.html:26
msgid "This might have happened for the following reasons:"
msgstr ""
-#: templates/404.html:28
+#: forum/skins/default/templates/404.html:28
msgid "this question or answer has been deleted;"
msgstr ""
-#: templates/404.html:29
+#: forum/skins/default/templates/404.html:29
msgid "url has error - please check it;"
msgstr ""
-#: templates/404.html:30
+#: forum/skins/default/templates/404.html:30
msgid ""
"the page you tried to visit is protected or you don't have sufficient "
"points, see"
msgstr ""
-#: templates/404.html:31
+#: forum/skins/default/templates/404.html:31
msgid "if you believe this error 404 should not have occured, please"
msgstr ""
-#: templates/404.html:32
+#: forum/skins/default/templates/404.html:32
msgid "report this problem"
msgstr ""
-#: templates/404.html:41 templates/500.html:27
+#: forum/skins/default/templates/404.html:41
+#: forum/skins/default/templates/500.html:27
msgid "back to previous page"
msgstr ""
-#: templates/404.html:42
+#: forum/skins/default/templates/404.html:42
msgid "see all questions"
msgstr ""
-#: templates/404.html:43
+#: forum/skins/default/templates/404.html:43
msgid "see all tags"
msgstr ""
-#: templates/500.html:22
+#: forum/skins/default/templates/500.html:22
msgid "sorry, system error"
msgstr ""
-#: templates/500.html:24
+#: forum/skins/default/templates/500.html:24
msgid "system error log is recorded, error will be fixed as soon as possible"
msgstr ""
-#: templates/500.html:25
+#: forum/skins/default/templates/500.html:25
msgid "please report the error to the site administrators if you wish"
msgstr ""
-#: templates/500.html:28
+#: forum/skins/default/templates/500.html:28
msgid "see latest questions"
msgstr ""
-#: templates/500.html:29
+#: forum/skins/default/templates/500.html:29
msgid "see tags"
msgstr ""
-#: templates/about.html:6 templates/about.html.py:11
+#: forum/skins/default/templates/about.html:6
+#: forum/skins/default/templates/about.html:11
msgid "About"
msgstr ""
-#: templates/answer_edit.html:5 templates/answer_edit.html.py:48
+#: forum/skins/default/templates/answer_edit.html:5
+#: forum/skins/default/templates/answer_edit.html:48
msgid "Edit answer"
msgstr ""
-#: templates/answer_edit.html:25 templates/answer_edit.html.py:28
-#: templates/ask.html:26 templates/ask.html.py:29 templates/question.html:45
-#: templates/question.html.py:48 templates/question_edit.html:25
-#: templates/question_edit.html.py:28
+#: forum/skins/default/templates/answer_edit.html:25
+#: forum/skins/default/templates/answer_edit.html:28
+#: forum/skins/default/templates/ask.html:26
+#: forum/skins/default/templates/ask.html:29
+#: forum/skins/default/templates/question.html:46
+#: forum/skins/default/templates/question.html:49
+#: forum/skins/default/templates/question.html:565
+#: forum/skins/default/templates/question.html:568
+#: forum/skins/default/templates/question_edit.html:25
+#: forum/skins/default/templates/question_edit.html:28
msgid "hide preview"
msgstr ""
-#: templates/answer_edit.html:28 templates/ask.html:29
-#: templates/question.html:48 templates/question_edit.html:28
+#: forum/skins/default/templates/answer_edit.html:28
+#: forum/skins/default/templates/ask.html:29
+#: forum/skins/default/templates/question.html:49
+#: forum/skins/default/templates/question.html:568
+#: forum/skins/default/templates/question_edit.html:28
msgid "show preview"
msgstr ""
-#: templates/answer_edit.html:48 templates/question_edit.html:66
-#: templates/question_retag.html:53 templates/revisions_answer.html:38
-#: templates/revisions_question.html:38
+#: forum/skins/default/templates/answer_edit.html:48
+#: forum/skins/default/templates/question_edit.html:66
+#: forum/skins/default/templates/question_retag.html:53
+#: forum/skins/default/templates/revisions_answer.html:38
+#: forum/skins/default/templates/revisions_question.html:38
msgid "back"
msgstr ""
-#: templates/answer_edit.html:53 templates/question_edit.html:71
-#: templates/revisions_answer.html:52 templates/revisions_question.html:52
+#: forum/skins/default/templates/answer_edit.html:53
+#: forum/skins/default/templates/question_edit.html:71
+#: forum/skins/default/templates/revisions_answer.html:52
+#: forum/skins/default/templates/revisions_question.html:52
msgid "revision"
msgstr ""
-#: templates/answer_edit.html:56 templates/question_edit.html:75
+#: forum/skins/default/templates/answer_edit.html:56
+#: forum/skins/default/templates/question_edit.html:75
msgid "select revision"
msgstr ""
-#: templates/answer_edit.html:63 templates/ask.html:97
-#: templates/question.html:434 templates/question_edit.html:92
+#: forum/skins/default/templates/answer_edit.html:63
+#: forum/skins/default/templates/ask.html:97
+#: forum/skins/default/templates/question.html:443
+#: forum/skins/default/templates/question.html:952
+#: forum/skins/default/templates/question_edit.html:92
msgid "Toggle the real time Markdown editor preview"
msgstr ""
-#: templates/answer_edit.html:63 templates/ask.html:97
-#: templates/question.html:435 templates/question_edit.html:92
+#: forum/skins/default/templates/answer_edit.html:63
+#: forum/skins/default/templates/ask.html:97
+#: forum/skins/default/templates/question.html:444
+#: forum/skins/default/templates/question.html:953
+#: forum/skins/default/templates/question_edit.html:92
msgid "toggle preview"
msgstr ""
-#: templates/answer_edit.html:72 templates/question_edit.html:118
-#: templates/question_retag.html:74
+#: forum/skins/default/templates/answer_edit.html:72
+#: forum/skins/default/templates/question_edit.html:124
+#: forum/skins/default/templates/question_retag.html:74
msgid "Save edit"
msgstr ""
-#: templates/answer_edit.html:73 templates/close.html:29
-#: templates/feedback.html:50 templates/question_edit.html:119
-#: templates/question_retag.html:75 templates/reopen.html:30
-#: templates/user_edit.html:87 templates/authopenid/changeemail.html:40
+#: forum/skins/default/templates/answer_edit.html:73
+#: forum/skins/default/templates/close.html:29
+#: forum/skins/default/templates/feedback.html:50
+#: forum/skins/default/templates/question_edit.html:125
+#: forum/skins/default/templates/question_retag.html:75
+#: forum/skins/default/templates/reopen.html:30
+#: forum/skins/default/templates/user_edit.html:87
+#: forum/skins/default/templates/authopenid/changeemail.html:40
msgid "Cancel"
msgstr ""
-#: templates/answer_edit_tips.html:4
+#: forum/skins/default/templates/answer_edit_tips.html:4
msgid "answer tips"
-msgstr "Tips"
+msgstr ""
-#: templates/answer_edit_tips.html:7
+#: forum/skins/default/templates/answer_edit_tips.html:7
msgid "please make your answer relevant to this community"
msgstr ""
-#: templates/answer_edit_tips.html:10
+#: forum/skins/default/templates/answer_edit_tips.html:10
msgid "try to give an answer, rather than engage into a discussion"
msgstr ""
-#: templates/answer_edit_tips.html:13
+#: forum/skins/default/templates/answer_edit_tips.html:13
msgid "please try to provide details"
msgstr ""
-#: templates/answer_edit_tips.html:16 templates/question_edit_tips.html:13
+#: forum/skins/default/templates/answer_edit_tips.html:16
+#: forum/skins/default/templates/question_edit_tips.html:13
msgid "be clear and concise"
msgstr ""
-#: templates/answer_edit_tips.html:20 templates/question_edit_tips.html:17
+#: forum/skins/default/templates/answer_edit_tips.html:20
+#: forum/skins/default/templates/question_edit_tips.html:17
msgid "see frequently asked questions"
msgstr ""
-#: templates/answer_edit_tips.html:26 templates/question_edit_tips.html:23
+#: forum/skins/default/templates/answer_edit_tips.html:26
+#: forum/skins/default/templates/question_edit_tips.html:23
msgid "Markdown tips"
-msgstr "Markdown basics"
+msgstr ""
-#: templates/answer_edit_tips.html:29 templates/question_edit_tips.html:26
+#: forum/skins/default/templates/answer_edit_tips.html:29
+#: forum/skins/default/templates/question_edit_tips.html:26
msgid "*italic* or __italic__"
msgstr ""
-#: templates/answer_edit_tips.html:32 templates/question_edit_tips.html:29
+#: forum/skins/default/templates/answer_edit_tips.html:32
+#: forum/skins/default/templates/question_edit_tips.html:29
msgid "**bold** or __bold__"
msgstr ""
-#: templates/answer_edit_tips.html:35 templates/question_edit_tips.html:32
+#: forum/skins/default/templates/answer_edit_tips.html:35
+#: forum/skins/default/templates/question_edit_tips.html:32
msgid "link"
msgstr ""
-#: templates/answer_edit_tips.html:35 templates/answer_edit_tips.html.py:39
-#: templates/question_edit_tips.html:32 templates/question_edit_tips.html:37
+#: 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 "text"
msgstr ""
-#: templates/answer_edit_tips.html:39 templates/question_edit_tips.html:37
+#: forum/skins/default/templates/answer_edit_tips.html:39
+#: forum/skins/default/templates/question_edit_tips.html:37
msgid "image"
msgstr ""
-#: templates/answer_edit_tips.html:43 templates/question_edit_tips.html:41
+#: forum/skins/default/templates/answer_edit_tips.html:43
+#: forum/skins/default/templates/question_edit_tips.html:41
msgid "numbered list:"
msgstr ""
-#: templates/answer_edit_tips.html:48 templates/question_edit_tips.html:46
+#: forum/skins/default/templates/answer_edit_tips.html:48
+#: forum/skins/default/templates/question_edit_tips.html:46
msgid "basic HTML tags are also supported"
msgstr ""
-#: templates/answer_edit_tips.html:52 templates/question_edit_tips.html:50
+#: forum/skins/default/templates/answer_edit_tips.html:52
+#: forum/skins/default/templates/question_edit_tips.html:50
msgid "learn more about Markdown"
msgstr ""
-#: templates/ask.html:5 templates/ask.html.py:61
+#: forum/skins/default/templates/ask.html:5
+#: forum/skins/default/templates/ask.html:61
msgid "Ask a question"
msgstr ""
-#: templates/ask.html:68
+#: forum/skins/default/templates/ask.html:68
msgid "login to post question info"
msgstr ""
-"<span class=\"strong big\">You are welcome to start submitting your question "
-"anonymously</span>. When you submit the post, you will be redirected to the "
-"login/signup page. Your question will be saved in the current session and "
-"will be published after you log in. Login/signup process is very simple. "
-"Login takes about 30 seconds, initial signup takes a minute or less."
-#: templates/ask.html:74
+#: forum/skins/default/templates/ask.html:74
#, python-format
msgid ""
"must have valid %(email)s to post, \n"
" see %(email_validation_faq_url)s\n"
" "
msgstr ""
-"<span class='strong big'>Looks like your email address, %(email)s has not "
-"yet been validated.</span> To post messages you must verify your email, "
-"please see <a href='%(email_validation_faq_url)s'>more details here</a>."
-"<br>You can submit your question now and validate email after that. Your "
-"question will saved as pending meanwhile. "
-#: templates/ask.html:112
+#: forum/skins/default/templates/ask.html:112
+#: forum/skins/default/templates/ask.html:119
+#: forum/skins/default/templates/question_edit.html:120
msgid "(required)"
msgstr ""
-#: templates/ask.html:119
+#: forum/skins/default/templates/ask.html:126
msgid "Login/signup to post your question"
-msgstr "Login/Signup to Post"
+msgstr ""
-#: templates/ask.html:121
+#: forum/skins/default/templates/ask.html:128
msgid "Ask your question"
-msgstr "Ask Your Question"
+msgstr ""
-#: templates/badge.html:6 templates/badge.html.py:17
+#: forum/skins/default/templates/badge.html:6
+#: forum/skins/default/templates/badge.html:17
msgid "Badge"
msgstr ""
-#: templates/badge.html:26
+#: forum/skins/default/templates/badge.html:26
msgid "The users have been awarded with badges:"
msgstr ""
-#: templates/badges.html:6
+#: forum/skins/default/templates/badges.html:6
msgid "Badges summary"
msgstr ""
-#: templates/badges.html:17
+#: forum/skins/default/templates/badges.html:17
msgid "Badges"
msgstr ""
-#: templates/badges.html:21
+#: forum/skins/default/templates/badges.html:21
msgid "Community gives you awards for your questions, answers and votes."
msgstr ""
-"If your questions and answers are highly voted, your contribution to this "
-"Q&amp;A community will be recognized with the variety of badges."
-#: templates/badges.html:22
+#: forum/skins/default/templates/badges.html:22
#, python-format
msgid ""
"Below is the list of available badges and number \n"
@@ -1237,232 +1146,228 @@ msgid ""
"(feedback_faq_url)s.\n"
" "
msgstr ""
-"Currently badges differ only by their level: <strong>gold</strong>, "
-"<strong>silver</strong> and <strong>bronze</strong> (their meanings are "
-"described on the right). In the future there will be many types of badges at "
-"each level. <strong>Please give us your <a href='%(feedback_faq_url)"
-"s'>feedback</a></strong> - what kinds of badges would you like to see and "
-"suggest the activity for which those badges might be awarded."
-#: templates/badges.html:50
+#: forum/skins/default/templates/badges.html:50
msgid "Community badges"
-msgstr "Badge levels"
+msgstr ""
-#: templates/badges.html:56
+#: forum/skins/default/templates/badges.html:56
msgid "gold badge description"
msgstr ""
-"Gold badge is the highest award in this community. To obtain it have to show "
-"profound knowledge and ability in addition to your active participation."
-#: templates/badges.html:64
+#: forum/skins/default/templates/badges.html:64
msgid "silver badge description"
msgstr ""
-"Obtaining silver badge requires significant patience. If you have received "
-"one, that means you have greatly contributed to this community."
-#: templates/badges.html:67
+#: forum/skins/default/templates/badges.html:67
msgid "bronze badge: often given as a special honor"
msgstr ""
-#: templates/badges.html:71
+#: forum/skins/default/templates/badges.html:71
msgid "bronze badge description"
msgstr ""
-"If you are an active participant in this community, you will be recognized "
-"with this badge."
-#: templates/book.html:7
+#: forum/skins/default/templates/book.html:7
msgid "reading channel"
msgstr ""
-#: templates/book.html:26
+#: forum/skins/default/templates/book.html:26
msgid "[author]"
msgstr ""
-#: templates/book.html:30
+#: forum/skins/default/templates/book.html:30
msgid "[publisher]"
msgstr ""
-#: templates/book.html:34
+#: forum/skins/default/templates/book.html:34
msgid "[publication date]"
msgstr ""
-#: templates/book.html:38
+#: forum/skins/default/templates/book.html:38
msgid "[price]"
msgstr ""
-#: templates/book.html:39
+#: forum/skins/default/templates/book.html:39
msgid "currency unit"
msgstr ""
-#: templates/book.html:42
+#: forum/skins/default/templates/book.html:42
msgid "[pages]"
msgstr ""
-#: templates/book.html:43
+#: forum/skins/default/templates/book.html:43
msgid "pages abbreviation"
msgstr ""
-#: templates/book.html:46
+#: forum/skins/default/templates/book.html:46
msgid "[tags]"
msgstr ""
-#: templates/book.html:56
+#: forum/skins/default/templates/book.html:56
msgid "author blog"
msgstr ""
-#: templates/book.html:62
+#: forum/skins/default/templates/book.html:62
msgid "book directory"
msgstr ""
-#: templates/book.html:66
+#: forum/skins/default/templates/book.html:66
msgid "buy online"
msgstr ""
-#: templates/book.html:79
+#: forum/skins/default/templates/book.html:79
msgid "reader questions"
msgstr ""
-#: templates/book.html:82
+#: forum/skins/default/templates/book.html:82
msgid "ask the author"
msgstr ""
-#: templates/book.html:88 templates/book.html.py:93
-#: templates/users_questions.html:18
+#: forum/skins/default/templates/book.html:88
+#: forum/skins/default/templates/book.html:93
+#: forum/skins/default/templates/users_questions.html:18
msgid "this question was selected as favorite"
msgstr ""
-#: templates/book.html:88 templates/book.html.py:93
-#: templates/users_questions.html:11 templates/users_questions.html.py:18
+#: forum/skins/default/templates/book.html:88
+#: forum/skins/default/templates/book.html:93
+#: forum/skins/default/templates/users_questions.html:11
+#: forum/skins/default/templates/users_questions.html:18
msgid "number of times"
msgstr ""
-#: templates/book.html:105 templates/index.html:49
-#: templates/question_summary_list_roll.html:14 templates/questions.html:80
-#: templates/users_questions.html:32
+#: forum/skins/default/templates/book.html:105
+#: forum/skins/default/templates/index.html:50
+#: forum/skins/default/templates/question_summary_list_roll.html:14
+#: forum/skins/default/templates/questions.html:85
+#: forum/skins/default/templates/questions.html:354
+#: forum/skins/default/templates/users_questions.html:32
+#: templates/unanswered.html:39
msgid "votes"
msgstr ""
-#: templates/book.html:108
+#: forum/skins/default/templates/book.html:108
msgid "the answer has been accepted to be correct"
msgstr ""
-#: templates/book.html:115 templates/index.html:50
-#: templates/question_summary_list_roll.html:15 templates/questions.html:81
-#: templates/users_questions.html:40
+#: forum/skins/default/templates/book.html:115
+#: forum/skins/default/templates/index.html:51
+#: forum/skins/default/templates/question_summary_list_roll.html:15
+#: forum/skins/default/templates/questions.html:86
+#: forum/skins/default/templates/questions.html:355
+#: forum/skins/default/templates/users_questions.html:40
+#: templates/unanswered.html:40
msgid "views"
msgstr ""
-#: templates/book.html:125 templates/index.html:105
-#: templates/question.html:480 templates/question_summary_list_roll.html:52
-#: templates/questions.html:136 templates/tags.html:49
-#: templates/users_questions.html:52
+#: forum/skins/default/templates/book.html:125
+#: forum/skins/default/templates/index.html:106
+#: forum/skins/default/templates/question.html:489
+#: forum/skins/default/templates/question.html:998
+#: forum/skins/default/templates/question_summary_list_roll.html:52
+#: forum/skins/default/templates/questions.html:141
+#: forum/skins/default/templates/questions.html:258
+#: forum/skins/default/templates/questions.html:410
+#: forum/skins/default/templates/tags.html:49
+#: forum/skins/default/templates/users_questions.html:52
+#: templates/unanswered.html:95 templates/unanswered.html.py:122
msgid "using tags"
msgstr ""
-#: templates/book.html:147
+#: forum/skins/default/templates/book.html:147
msgid "subscribe to book RSS feed"
msgstr ""
-#: templates/book.html:147 templates/index.html:156
+#: forum/skins/default/templates/book.html:147
+#: forum/skins/default/templates/index.html:157
msgid "subscribe to the questions feed"
msgstr ""
-#: templates/close.html:6 templates/close.html.py:16
+#: forum/skins/default/templates/close.html:6
+#: forum/skins/default/templates/close.html:16
msgid "Close question"
msgstr ""
-#: templates/close.html:19
+#: forum/skins/default/templates/close.html:19
msgid "Close the question"
msgstr ""
-#: templates/close.html:25
+#: forum/skins/default/templates/close.html:25
msgid "Reasons"
msgstr ""
-#: templates/close.html:28
+#: forum/skins/default/templates/close.html:28
msgid "OK to close"
msgstr ""
-#: templates/faq.html:11
+#: forum/skins/default/templates/faq.html:11
msgid "Frequently Asked Questions "
msgstr ""
-#: templates/faq.html:16
+#: forum/skins/default/templates/faq.html:16
msgid "What kinds of questions can I ask here?"
msgstr ""
-#: templates/faq.html:17
+#: forum/skins/default/templates/faq.html:17
msgid ""
"Most importanly - questions should be <strong>relevant</strong> to this "
"community."
msgstr ""
-#: templates/faq.html:18
+#: forum/skins/default/templates/faq.html:18
msgid ""
"Before asking the question - please make sure to use search to see whether "
"your question has alredy been answered."
msgstr ""
-"Before you ask - please make sure to search for a similar question. You can "
-"search questions by their title or tags."
-#: templates/faq.html:21
+#: forum/skins/default/templates/faq.html:21
msgid "What questions should I avoid asking?"
-msgstr "What kinds of questions should be avoided?"
+msgstr ""
-#: templates/faq.html:22
+#: forum/skins/default/templates/faq.html:22
msgid ""
"Please avoid asking questions that are not relevant to this community, too "
"subjective and argumentative."
msgstr ""
-#: templates/faq.html:27
+#: forum/skins/default/templates/faq.html:27
msgid "What should I avoid in my answers?"
msgstr ""
-#: templates/faq.html:28
+#: forum/skins/default/templates/faq.html:28
msgid ""
"is a Q&A site, not a discussion group. Therefore - please avoid having "
"discussions in your answers, comment facility allows some space for brief "
"discussions."
msgstr ""
-"is a <strong>question and answer</strong> site - <strong>it is not a "
-"discussion group</strong>. Please avoid holding debates in your answers as "
-"they tend to dilute the essense of questions and answers. For the brief "
-"discussions please use commenting facility."
-#: templates/faq.html:32
+#: forum/skins/default/templates/faq.html:32
msgid "Who moderates this community?"
msgstr ""
-#: templates/faq.html:33
+#: forum/skins/default/templates/faq.html:33
msgid "The short answer is: <strong>you</strong>."
msgstr ""
-#: templates/faq.html:34
+#: forum/skins/default/templates/faq.html:34
msgid "This website is moderated by the users."
msgstr ""
-#: templates/faq.html:35
+#: forum/skins/default/templates/faq.html:35
msgid ""
"The reputation system allows users earn the authorization to perform a "
"variety of moderation tasks."
msgstr ""
-"Karma system allows users to earn rights to perform a variety of moderation "
-"tasks"
-#: templates/faq.html:40
+#: forum/skins/default/templates/faq.html:40
msgid "How does reputation system work?"
-msgstr "How does karma system work?"
+msgstr ""
-#: templates/faq.html:41
+#: forum/skins/default/templates/faq.html:41
msgid "Rep system summary"
msgstr ""
-"When a question or answer is upvoted, the user who posted them will gain "
-"some points, which are called \"karma points\". These points serve as a "
-"rough measure of the community trust to him/her. Various moderation tasks "
-"are gradually assigned to the users based on those points."
-#: templates/faq.html:42
+#: forum/skins/default/templates/faq.html:42
msgid ""
"For example, if you ask an interesting question or give a helpful answer, "
"your input will be upvoted. On the other hand if the answer is misleading - "
@@ -1473,150 +1378,134 @@ msgid ""
"type of moderation task."
msgstr ""
-#: templates/faq.html:53 templates/user_votes.html:15
+#: forum/skins/default/templates/faq.html:53
+#: forum/skins/default/templates/user_votes.html:15
msgid "upvote"
msgstr ""
-#: templates/faq.html:57
+#: forum/skins/default/templates/faq.html:57
msgid "use tags"
msgstr ""
-#: templates/faq.html:62
+#: forum/skins/default/templates/faq.html:62
msgid "add comments"
msgstr ""
-#: templates/faq.html:66 templates/user_votes.html:17
+#: forum/skins/default/templates/faq.html:66
+#: forum/skins/default/templates/user_votes.html:17
msgid "downvote"
msgstr ""
-#: templates/faq.html:69
+#: forum/skins/default/templates/faq.html:69
msgid "open and close own questions"
msgstr ""
-#: templates/faq.html:73
+#: forum/skins/default/templates/faq.html:73
msgid "retag questions"
msgstr ""
-#: templates/faq.html:78
+#: forum/skins/default/templates/faq.html:78
msgid "edit community wiki questions"
msgstr ""
-#: templates/faq.html:83
+#: forum/skins/default/templates/faq.html:83
msgid "edit any answer"
msgstr ""
-#: templates/faq.html:87
+#: forum/skins/default/templates/faq.html:87
msgid "open any closed question"
msgstr ""
-#: templates/faq.html:91
+#: forum/skins/default/templates/faq.html:91
msgid "delete any comment"
msgstr ""
-#: templates/faq.html:95
+#: forum/skins/default/templates/faq.html:95
msgid "delete any questions and answers and perform other moderation tasks"
msgstr ""
-#: templates/faq.html:102
+#: forum/skins/default/templates/faq.html:102
msgid "how to validate email title"
-msgstr "How to validate email and why?"
+msgstr ""
-#: templates/faq.html:104
+#: forum/skins/default/templates/faq.html:104
#, python-format
msgid ""
"how to validate email info with %(send_email_key_url)s %(gravatar_faq_url)s"
msgstr ""
-"<form style='margin:0;padding:0;' action='%(send_email_key_url)s'><p><span "
-"class=\"bigger strong\">How?</span> If you have just set or changed your "
-"email address - <strong>check your email and click the included link</"
-"strong>.<br>The link contains a key generated specifically for you. You can "
-"also <button style='display:inline' type='submit'><strong>get a new key</"
-"strong></button> and check your email again.</p></form><span class=\"bigger "
-"strong\">Why?</span> Email validation is required to make sure that "
-"<strong>only you can post messages</strong> on your behalf and to "
-"<strong>minimize spam</strong> posts.<br>With email you can "
-"<strong>subscribe for updates</strong> on the most interesting questions. "
-"Also, when you sign up for the first time - create a unique <a href='%"
-"(gravatar_faq_url)s'><strong>gravatar</strong></a> personal image.</p>"
-
-#: templates/faq.html:108
+
+#: forum/skins/default/templates/faq.html:108
msgid "what is gravatar"
-msgstr "What is gravatar?"
+msgstr ""
-#: templates/faq.html:109
+#: forum/skins/default/templates/faq.html:109
msgid "gravatar faq info"
msgstr ""
-"<strong>Gravatar</strong> means <strong>g</strong>lobally <strong>r</"
-"strong>ecognized <strong>avatar</strong> - your unique avatar image "
-"associated with your email address. It's simply a picture that shows next to "
-"your posts on the websites that support gravatar protocol. By default gravar "
-"appears as a square filled with a snowflake-like figure. You can <strong>set "
-"your image</strong> at <a href='http://gravatar.com'><strong>gravatar.com</"
-"strong></a>"
-#: templates/faq.html:112
+#: forum/skins/default/templates/faq.html:112
msgid "To register, do I need to create new password?"
msgstr ""
-#: templates/faq.html:113
+#: forum/skins/default/templates/faq.html:113
msgid ""
"No, you don't have to. You can login through any service that supports "
"OpenID, e.g. Google, Yahoo, AOL, etc."
msgstr ""
-#: templates/faq.html:114
+#: forum/skins/default/templates/faq.html:114
msgid "Login now!"
msgstr ""
-#: templates/faq.html:119
+#: forum/skins/default/templates/faq.html:119
msgid "Why other people can edit my questions/answers?"
msgstr ""
-#: templates/faq.html:120
+#: forum/skins/default/templates/faq.html:120
msgid "Goal of this site is..."
msgstr ""
-#: templates/faq.html:120
+#: forum/skins/default/templates/faq.html:120
msgid ""
"So questions and answers can be edited like wiki pages by experienced users "
"of this site and this improves the overall quality of the knowledge base "
"content."
msgstr ""
-#: templates/faq.html:121
+#: forum/skins/default/templates/faq.html:121
msgid "If this approach is not for you, we respect your choice."
msgstr ""
-#: templates/faq.html:125
+#: forum/skins/default/templates/faq.html:125
msgid "Still have questions?"
msgstr ""
-#: templates/faq.html:126
+#: forum/skins/default/templates/faq.html:126
#, python-format
msgid ""
"Please ask your question at %(ask_question_url)s, help make our community "
"better!"
msgstr ""
-"Please <a href='%(ask_question_url)s'>ask</a> your question, help make our "
-"community better!"
-#: templates/faq.html:128 templates/header.html:27 templates/header.html.py:55
+#: forum/skins/default/templates/faq.html:128
+#: forum/skins/default/templates/header.html:27
+#: forum/skins/default/templates/header.html:55
msgid "questions"
msgstr ""
-#: templates/faq.html:128 templates/index.html:161
+#: forum/skins/default/templates/faq.html:128
+#: forum/skins/default/templates/index.html:162
msgid "."
msgstr ""
-#: templates/feedback.html:6
+#: forum/skins/default/templates/feedback.html:6
msgid "Feedback"
msgstr ""
-#: templates/feedback.html:11
+#: forum/skins/default/templates/feedback.html:11
msgid "Give us your feedback!"
msgstr ""
-#: templates/feedback.html:17
+#: forum/skins/default/templates/feedback.html:17
#, python-format
msgid ""
"\n"
@@ -1626,7 +1515,7 @@ msgid ""
" "
msgstr ""
-#: templates/feedback.html:24
+#: forum/skins/default/templates/feedback.html:24
msgid ""
"\n"
" <span class='big strong'>Dear visitor</span>, we look forward to "
@@ -1635,246 +1524,284 @@ msgid ""
" "
msgstr ""
-#: templates/feedback.html:41
+#: forum/skins/default/templates/feedback.html:41
msgid "(this field is required)"
msgstr ""
-#: templates/feedback.html:49
+#: forum/skins/default/templates/feedback.html:49
msgid "Send Feedback"
msgstr ""
-#: templates/feedback_email.txt:3
-#, python-format
-msgid ""
-"\n"
-"Hello, this is a %(site_title)s forum feedback message\n"
-msgstr ""
-
-#: templates/feedback_email.txt:9
-msgid "Sender is"
-msgstr ""
-
-#: templates/feedback_email.txt:11 templates/feedback_email.txt.py:14
-msgid "email"
-msgstr ""
-
-#: templates/feedback_email.txt:13
-msgid "anonymous"
-msgstr ""
-
-#: templates/feedback_email.txt:19
-msgid "Message body:"
-msgstr ""
-
-#: templates/footer.html:8 templates/header.html:13 templates/index.html:119
+#: forum/skins/default/templates/footer.html:8
+#: forum/skins/default/templates/header.html:13
+#: forum/skins/default/templates/index.html:120
msgid "about"
msgstr ""
-#: templates/footer.html:9 templates/header.html:14 templates/index.html:120
-#: templates/question_edit_tips.html:17
+#: forum/skins/default/templates/footer.html:9
+#: forum/skins/default/templates/header.html:14
+#: forum/skins/default/templates/index.html:121
+#: forum/skins/default/templates/question_edit_tips.html:17
msgid "faq"
msgstr ""
-#: templates/footer.html:10
+#: forum/skins/default/templates/footer.html:10
msgid "privacy policy"
msgstr ""
-#: templates/footer.html:19
+#: forum/skins/default/templates/footer.html:19
msgid "give feedback"
msgstr ""
-#: templates/header.html:9
+#: forum/skins/default/templates/header.html:9
msgid "logout"
msgstr ""
-#: templates/header.html:11
+#: forum/skins/default/templates/header.html:11
msgid "login"
msgstr ""
-#: templates/header.html:21
+#: forum/skins/default/templates/header.html:21
msgid "back to home page"
msgstr ""
-#: templates/header.html:29 templates/header.html.py:57
+#: forum/skins/default/templates/header.html:29
+#: forum/skins/default/templates/header.html:57
msgid "users"
msgstr ""
-#: templates/header.html:31
+#: forum/skins/default/templates/header.html:31
msgid "books"
msgstr ""
-#: templates/header.html:34
+#: forum/skins/default/templates/header.html:33
+#: forum/templatetags/extra_tags.py:165 forum/templatetags/extra_tags.py:194
+msgid "badges"
+msgstr ""
+
+#: forum/skins/default/templates/header.html:34
msgid "unanswered questions"
-msgstr "unanswered"
+msgstr ""
-#: templates/header.html:36
+#: forum/skins/default/templates/header.html:36
msgid "ask a question"
msgstr ""
-#: templates/header.html:51
+#: forum/skins/default/templates/header.html:51
msgid "search"
msgstr ""
-#: templates/index.html:8
+#: forum/skins/default/templates/index.html:8
msgid "Home"
msgstr ""
-#: templates/index.html:25 templates/questions.html:8
+#: forum/skins/default/templates/index.html:25
+#: forum/skins/default/templates/questions.html:9
+#: forum/skins/default/templates/questions.html:282
msgid "Questions"
msgstr ""
-#: templates/index.html:27
+#: forum/skins/default/templates/index.html:27
msgid "last updated questions"
msgstr ""
-#: templates/index.html:27 templates/questions.html:47
+#: forum/skins/default/templates/index.html:27
+#: forum/skins/default/templates/questions.html:52
+#: forum/skins/default/templates/questions.html:321
+#: templates/unanswered.html:21
msgid "newest"
msgstr ""
-#: templates/index.html:28 templates/questions.html:49
+#: forum/skins/default/templates/index.html:28
+#: forum/skins/default/templates/questions.html:53
+#: forum/skins/default/templates/questions.html:322
+msgid "most recently updated questions"
+msgstr ""
+
+#: forum/skins/default/templates/index.html:28
+#: forum/skins/default/templates/questions.html:53
+#: forum/skins/default/templates/questions.html:322
+msgid "active"
+msgstr ""
+
+#: forum/skins/default/templates/index.html:29
+#: forum/skins/default/templates/questions.html:54
+#: forum/skins/default/templates/questions.html:323
msgid "hottest questions"
msgstr ""
-#: templates/index.html:28 templates/questions.html:49
+#: forum/skins/default/templates/index.html:29
+#: forum/skins/default/templates/questions.html:54
+#: forum/skins/default/templates/questions.html:323
msgid "hottest"
msgstr ""
-#: templates/index.html:29 templates/questions.html:50
+#: forum/skins/default/templates/index.html:30
+#: forum/skins/default/templates/questions.html:55
+#: forum/skins/default/templates/questions.html:324
msgid "most voted questions"
msgstr ""
-#: templates/index.html:29 templates/questions.html:50
+#: forum/skins/default/templates/index.html:30
+#: forum/skins/default/templates/questions.html:55
+#: forum/skins/default/templates/questions.html:324
msgid "most voted"
msgstr ""
-#: templates/index.html:30
+#: forum/skins/default/templates/index.html:31
msgid "all questions"
msgstr ""
-#: templates/index.html:48 templates/question_summary_list_roll.html:13
-#: templates/questions.html:79 templates/users_questions.html:36
+#: forum/skins/default/templates/index.html:49
+#: forum/skins/default/templates/question_summary_list_roll.html:13
+#: forum/skins/default/templates/questions.html:84
+#: forum/skins/default/templates/questions.html:353
+#: forum/skins/default/templates/users_questions.html:36
+#: templates/unanswered.html:38
msgid "answers"
msgstr ""
-#: templates/index.html:80 templates/index.html.py:94
-#: templates/questions.html:111 templates/questions.html.py:125
+#: forum/skins/default/templates/index.html:81
+#: forum/skins/default/templates/index.html:95
+#: forum/skins/default/templates/questions.html:116
+#: forum/skins/default/templates/questions.html:130
+#: forum/skins/default/templates/questions.html:385
+#: forum/skins/default/templates/questions.html:399
+#: templates/unanswered.html:70 templates/unanswered.html.py:84
msgid "Posted:"
msgstr ""
-#: templates/index.html:83 templates/index.html.py:88
-#: templates/questions.html:114 templates/questions.html.py:119
+#: forum/skins/default/templates/index.html:84
+#: forum/skins/default/templates/index.html:89
+#: forum/skins/default/templates/questions.html:119
+#: forum/skins/default/templates/questions.html:124
+#: forum/skins/default/templates/questions.html:388
+#: forum/skins/default/templates/questions.html:393
+#: templates/unanswered.html:73 templates/unanswered.html.py:78
msgid "Updated:"
msgstr ""
-#: templates/index.html:105 templates/question.html:480
-#: templates/question_summary_list_roll.html:52 templates/questions.html:136
-#: templates/tags.html:49 templates/users_questions.html:52
+#: forum/skins/default/templates/index.html:106
+#: forum/skins/default/templates/question.html:489
+#: forum/skins/default/templates/question.html:998
+#: forum/skins/default/templates/question_summary_list_roll.html:52
+#: forum/skins/default/templates/questions.html:141
+#: forum/skins/default/templates/questions.html:258
+#: forum/skins/default/templates/questions.html:410
+#: forum/skins/default/templates/tags.html:49
+#: forum/skins/default/templates/users_questions.html:52
+#: templates/unanswered.html:95 templates/unanswered.html.py:122
msgid "see questions tagged"
msgstr ""
-#: templates/index.html:116
+#: forum/skins/default/templates/index.html:117
msgid "welcome to website"
-msgstr "Welcome to Q&amp;A forum"
+msgstr ""
-#: templates/index.html:127
+#: forum/skins/default/templates/index.html:128
msgid "Recent tags"
msgstr ""
-#: templates/index.html:132 templates/question.html:135
+#: forum/skins/default/templates/index.html:133
+#: forum/skins/default/templates/question.html:136
+#: forum/skins/default/templates/question.html:653
#, python-format
msgid "see questions tagged '%(tagname)s'"
msgstr ""
-#: templates/index.html:135 templates/index.html.py:161
+#: forum/skins/default/templates/index.html:136
+#: forum/skins/default/templates/index.html:162
msgid "popular tags"
-msgstr "tags"
+msgstr ""
-#: templates/index.html:140
+#: forum/skins/default/templates/index.html:141
msgid "Recent awards"
-msgstr "Recent badges"
+msgstr ""
-#: templates/index.html:146
+#: forum/skins/default/templates/index.html:147
msgid "given to"
msgstr ""
-#: templates/index.html:151
+#: forum/skins/default/templates/index.html:152
msgid "all awards"
-msgstr "all badges"
+msgstr ""
-#: templates/index.html:156
+#: forum/skins/default/templates/index.html:157
msgid "subscribe to last 30 questions by RSS"
msgstr ""
-#: templates/index.html:161
+#: forum/skins/default/templates/index.html:162
msgid "Still looking for more? See"
msgstr ""
-#: templates/index.html:161
+#: forum/skins/default/templates/index.html:162
msgid "complete list of questions"
-msgstr "list of all questions"
+msgstr ""
-#: templates/index.html:161 templates/authopenid/signup.html:26
+#: forum/skins/default/templates/index.html:162
+#: forum/skins/default/templates/authopenid/signup.html:28
msgid "or"
msgstr ""
-#: templates/index.html:161
+#: forum/skins/default/templates/index.html:162
msgid "Please help us answer"
msgstr ""
-#: templates/index.html:161
+#: forum/skins/default/templates/index.html:162
msgid "list of unanswered questions"
-msgstr "unanswered questions"
+msgstr ""
-#: templates/logout.html:6 templates/logout.html.py:16
+#: forum/skins/default/templates/logout.html:6
+#: forum/skins/default/templates/logout.html:16
msgid "Logout"
msgstr ""
-#: templates/logout.html:19
+#: forum/skins/default/templates/logout.html:19
msgid ""
"As a registered user you can login with your OpenID, log out of the site or "
"permanently remove your account."
msgstr ""
-"Clicking <strong>Logout</strong> will log you out from the forumbut will not "
-"sign you off from your OpenID provider.</p><p>If you wish to sign off "
-"completely - please make sure to log out from your OpenID provider as well."
-#: templates/logout.html:20
+#: forum/skins/default/templates/logout.html:20
msgid "Logout now"
-msgstr "Logout Now"
+msgstr ""
-#: templates/notarobot.html:3
+#: forum/skins/default/templates/notarobot.html:3
msgid "Please prove that you are a Human Being"
msgstr ""
-#: templates/notarobot.html:10
+#: forum/skins/default/templates/notarobot.html:10
msgid "I am a Human Being"
msgstr ""
-#: templates/pagesize.html:6
+#: forum/skins/default/templates/pagesize.html:6
msgid "posts per page"
msgstr ""
-#: templates/paginator.html:6 templates/paginator.html.py:7
+#: forum/skins/default/templates/paginator.html:6
+#: forum/skins/default/templates/paginator.html:7
msgid "previous"
msgstr ""
-#: templates/paginator.html:19
+#: forum/skins/default/templates/paginator.html:19
msgid "current page"
msgstr ""
-#: templates/paginator.html:22 templates/paginator.html.py:29
+#: forum/skins/default/templates/paginator.html:22
+#: forum/skins/default/templates/paginator.html:29
msgid "page number "
msgstr ""
-#: templates/paginator.html:22 templates/paginator.html.py:29
+#: forum/skins/default/templates/paginator.html:22
+#: forum/skins/default/templates/paginator.html:29
msgid "number - make blank in english"
msgstr ""
-#: templates/paginator.html:33
+#: forum/skins/default/templates/paginator.html:33
msgid "next page"
msgstr ""
-#: templates/post_contributor_info.html:9
+#: forum/skins/default/templates/post_contributor_info.html:9
#, python-format
msgid ""
"\n"
@@ -1887,141 +1814,170 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/post_contributor_info.html:19
+#: forum/skins/default/templates/post_contributor_info.html:19
msgid "asked"
msgstr ""
-#: templates/post_contributor_info.html:22
+#: forum/skins/default/templates/post_contributor_info.html:22
msgid "answered"
msgstr ""
-#: templates/post_contributor_info.html:24
+#: forum/skins/default/templates/post_contributor_info.html:24
msgid "posted"
msgstr ""
-#: templates/post_contributor_info.html:45
+#: forum/skins/default/templates/post_contributor_info.html:45
msgid "updated"
msgstr ""
-#: templates/privacy.html:6 templates/privacy.html.py:11
+#: forum/skins/default/templates/privacy.html:6
+#: forum/skins/default/templates/privacy.html:11
msgid "Privacy policy"
msgstr ""
-#: templates/privacy.html:15
+#: forum/skins/default/templates/privacy.html:15
msgid "general message about privacy"
msgstr ""
-"Respecting users privacy is an important core principle of this Q&amp;A "
-"forum. Information on this page details how this forum protects your "
-"privacy, and what type of information is collected."
-#: templates/privacy.html:18
+#: forum/skins/default/templates/privacy.html:18
msgid "Site Visitors"
msgstr ""
-#: templates/privacy.html:20
+#: forum/skins/default/templates/privacy.html:20
msgid "what technical information is collected about visitors"
msgstr ""
-"Information on question views, revisions of questions and answers - both "
-"times and content are recorded for each user in order to correctly count "
-"number of views, maintain data integrity and report relevant updates."
-#: templates/privacy.html:23
+#: forum/skins/default/templates/privacy.html:23
msgid "Personal Information"
msgstr ""
-#: templates/privacy.html:25
+#: forum/skins/default/templates/privacy.html:25
msgid "details on personal information policies"
msgstr ""
-"Members of this community may choose to display personally identifiable "
-"information in their profiles. Forum will never display such information "
-"without a request from the user."
-#: templates/privacy.html:28
+#: forum/skins/default/templates/privacy.html:28
msgid "Other Services"
msgstr ""
-#: templates/privacy.html:30
+#: forum/skins/default/templates/privacy.html:30
msgid "details on sharing data with third parties"
msgstr ""
-"None of the data that is not openly shown on the forum by the choice of the "
-"user is shared with any third party."
-#: templates/privacy.html:35
+#: forum/skins/default/templates/privacy.html:35
msgid "cookie policy details"
msgstr ""
-"Forum software relies on the internet cookie technology to keep track of "
-"user sessions. Cookies must be enabled in your browser so that forum can "
-"work for you."
-#: templates/privacy.html:37
+#: forum/skins/default/templates/privacy.html:37
msgid "Policy Changes"
msgstr ""
-#: templates/privacy.html:38
+#: forum/skins/default/templates/privacy.html:38
msgid "how privacy policies can be changed"
msgstr ""
-"These policies may be adjusted to improve protection of user's privacy. "
-"Whenever such changes occur, users will be notified via the internal "
-"messaging system. "
-#: templates/question.html:77 templates/question.html.py:78
-#: templates/question.html:94 templates/question.html.py:96
+#: forum/skins/default/templates/question.html:78
+#: forum/skins/default/templates/question.html:79
+#: forum/skins/default/templates/question.html:95
+#: forum/skins/default/templates/question.html:97
+#: forum/skins/default/templates/question.html:597
+#: forum/skins/default/templates/question.html:598
+#: forum/skins/default/templates/question.html:614
+#: forum/skins/default/templates/question.html:616
msgid "i like this post (click again to cancel)"
msgstr ""
-#: templates/question.html:80 templates/question.html.py:98
-#: templates/question.html:257
+#: forum/skins/default/templates/question.html:81
+#: forum/skins/default/templates/question.html:99
+#: forum/skins/default/templates/question.html:258
+#: forum/skins/default/templates/question.html:600
+#: forum/skins/default/templates/question.html:618
+#: forum/skins/default/templates/question.html:775
msgid "current number of votes"
msgstr ""
-#: templates/question.html:89 templates/question.html.py:90
-#: templates/question.html:103 templates/question.html.py:104
+#: forum/skins/default/templates/question.html:90
+#: forum/skins/default/templates/question.html:91
+#: forum/skins/default/templates/question.html:104
+#: forum/skins/default/templates/question.html:105
+#: forum/skins/default/templates/question.html:609
+#: forum/skins/default/templates/question.html:610
+#: forum/skins/default/templates/question.html:623
+#: forum/skins/default/templates/question.html:624
msgid "i dont like this post (click again to cancel)"
msgstr ""
-#: templates/question.html:109 templates/question.html.py:110
+#: forum/skins/default/templates/question.html:110
+#: forum/skins/default/templates/question.html:111
+#: forum/skins/default/templates/question.html:628
+#: forum/skins/default/templates/question.html:629
msgid "mark this question as favorite (click again to cancel)"
msgstr ""
-#: templates/question.html:116 templates/question.html.py:117
+#: forum/skins/default/templates/question.html:117
+#: forum/skins/default/templates/question.html:118
+#: forum/skins/default/templates/question.html:635
+#: forum/skins/default/templates/question.html:636
msgid "remove favorite mark from this question (click again to restore mark)"
msgstr ""
-#: templates/question.html:140 templates/question.html.py:294
-#: templates/revisions_answer.html:58 templates/revisions_question.html:58
+#: forum/skins/default/templates/question.html:141
+#: forum/skins/default/templates/question.html:295
+#: forum/skins/default/templates/question.html:658
+#: forum/skins/default/templates/question.html:812
+#: forum/skins/default/templates/revisions_answer.html:58
+#: forum/skins/default/templates/revisions_question.html:58
msgid "edit"
msgstr ""
-#: templates/question.html:145
+#: forum/skins/default/templates/question.html:146
+#: forum/skins/default/templates/question.html:663
msgid "reopen"
msgstr ""
-#: templates/question.html:149
+#: forum/skins/default/templates/question.html:150
+#: forum/skins/default/templates/question.html:667
msgid "close"
msgstr ""
-#: templates/question.html:155 templates/question.html.py:299
+#: forum/skins/default/templates/question.html:156
+#: forum/skins/default/templates/question.html:301
+#: forum/skins/default/templates/question.html:673
+#: forum/skins/default/templates/question.html:817
msgid ""
"report as offensive (i.e containing spam, advertising, malicious text, etc.)"
msgstr ""
-#: templates/question.html:156 templates/question.html.py:300
+#: forum/skins/default/templates/question.html:157
+#: forum/skins/default/templates/question.html:302
+#: forum/skins/default/templates/question.html:674
+#: forum/skins/default/templates/question.html:818
msgid "flag offensive"
msgstr ""
-#: templates/question.html:164 templates/question.html.py:311
+#: forum/skins/default/templates/question.html:165
+#: forum/skins/default/templates/question.html:313
+#: forum/skins/default/templates/question.html:682
+#: forum/skins/default/templates/question.html:829
msgid "delete"
msgstr ""
-#: templates/question.html:182 templates/question.html.py:331
+#: forum/skins/default/templates/question.html:183
+#: forum/skins/default/templates/question.html:333
+#: forum/skins/default/templates/question.html:700
+#: forum/skins/default/templates/question.html:849
msgid "delete this comment"
msgstr ""
-#: templates/question.html:193 templates/question.html.py:342
+#: forum/skins/default/templates/question.html:194
+#: forum/skins/default/templates/question.html:344
+#: forum/skins/default/templates/question.html:368
+#: forum/skins/default/templates/question.html:711
+#: forum/skins/default/templates/question.html:860
msgid "add comment"
-msgstr "post a comment"
+msgstr ""
-#: templates/question.html:197
+#: forum/skins/default/templates/question.html:198
+#: forum/skins/default/templates/question.html:715
#, python-format
msgid ""
"\n"
@@ -2035,7 +1991,8 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/question.html:203
+#: forum/skins/default/templates/question.html:204
+#: forum/skins/default/templates/question.html:721
#, python-format
msgid ""
"\n"
@@ -2050,18 +2007,21 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/question.html:219
+#: forum/skins/default/templates/question.html:220
+#: forum/skins/default/templates/question.html:737
#, python-format
msgid ""
"The question has been closed for the following reason \"%(close_reason)s\" by"
msgstr ""
-#: templates/question.html:221
+#: forum/skins/default/templates/question.html:222
+#: forum/skins/default/templates/question.html:739
#, python-format
msgid "close date %(closed_at)s"
msgstr ""
-#: templates/question.html:229
+#: forum/skins/default/templates/question.html:230
+#: forum/skins/default/templates/question.html:747
#, python-format
msgid ""
"\n"
@@ -2074,59 +2034,81 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/question.html:237
+#: forum/skins/default/templates/question.html:238
+#: forum/skins/default/templates/question.html:755
msgid "oldest answers will be shown first"
msgstr ""
-#: templates/question.html:237
+#: forum/skins/default/templates/question.html:238
+#: forum/skins/default/templates/question.html:755
msgid "oldest answers"
-msgstr "oldest"
+msgstr ""
-#: templates/question.html:239
+#: forum/skins/default/templates/question.html:240
+#: forum/skins/default/templates/question.html:757
msgid "newest answers will be shown first"
msgstr ""
-#: templates/question.html:239
+#: forum/skins/default/templates/question.html:240
+#: forum/skins/default/templates/question.html:757
msgid "newest answers"
-msgstr "newest"
+msgstr ""
-#: templates/question.html:241
+#: forum/skins/default/templates/question.html:242
+#: forum/skins/default/templates/question.html:759
msgid "most voted answers will be shown first"
msgstr ""
-#: templates/question.html:241
+#: forum/skins/default/templates/question.html:242
+#: forum/skins/default/templates/question.html:759
msgid "popular answers"
-msgstr "most voted"
+msgstr ""
-#: templates/question.html:255 templates/question.html.py:256
+#: forum/skins/default/templates/question.html:256
+#: forum/skins/default/templates/question.html:257
+#: forum/skins/default/templates/question.html:773
+#: forum/skins/default/templates/question.html:774
msgid "i like this answer (click again to cancel)"
msgstr ""
-#: templates/question.html:262 templates/question.html.py:263
+#: forum/skins/default/templates/question.html:263
+#: forum/skins/default/templates/question.html:264
+#: forum/skins/default/templates/question.html:780
+#: forum/skins/default/templates/question.html:781
msgid "i dont like this answer (click again to cancel)"
msgstr ""
-#: templates/question.html:268 templates/question.html.py:269
+#: forum/skins/default/templates/question.html:269
+#: forum/skins/default/templates/question.html:270
+#: forum/skins/default/templates/question.html:786
+#: forum/skins/default/templates/question.html:787
msgid "mark this answer as favorite (click again to undo)"
msgstr ""
-#: templates/question.html:274 templates/question.html.py:275
+#: forum/skins/default/templates/question.html:275
+#: forum/skins/default/templates/question.html:276
+#: forum/skins/default/templates/question.html:792
+#: forum/skins/default/templates/question.html:793
msgid "the author of the question has selected this answer as correct"
msgstr ""
-#: templates/question.html:288
+#: forum/skins/default/templates/question.html:289
+#: forum/skins/default/templates/question.html:806
msgid "answer permanent link"
msgstr ""
-#: templates/question.html:289
+#: forum/skins/default/templates/question.html:290
+#: forum/skins/default/templates/question.html:807
msgid "permanent link"
-msgstr "link"
+msgstr ""
-#: templates/question.html:311
+#: forum/skins/default/templates/question.html:313
+#: forum/skins/default/templates/question.html:829
msgid "undelete"
msgstr ""
-#: templates/question.html:346
+#: forum/skins/default/templates/question.html:348
+#: forum/skins/default/templates/question.html:864
#, python-format
msgid ""
"\n"
@@ -2141,7 +2123,8 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/question.html:352
+#: forum/skins/default/templates/question.html:354
+#: forum/skins/default/templates/question.html:870
#, python-format
msgid ""
"\n"
@@ -2156,18 +2139,24 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/question.html:378 templates/question.html.py:381
+#: forum/skins/default/templates/question.html:367
+msgid "comments"
+msgstr ""
+
+#: forum/skins/default/templates/question.html:387
+#: forum/skins/default/templates/question.html:390
+#: forum/skins/default/templates/question.html:896
+#: forum/skins/default/templates/question.html:899
msgid "Notify me once a day when there are any new answers"
msgstr ""
-"<strong>Notify me</strong> once a day by email when there are any new "
-"answers or updates"
-#: templates/question.html:384
+#: forum/skins/default/templates/question.html:393
+#: forum/skins/default/templates/question.html:902
msgid "Notify me weekly when there are any new answers"
msgstr ""
-"<strong>Notify me</strong> weekly when there are any new answers or updates"
-#: templates/question.html:389
+#: forum/skins/default/templates/question.html:398
+#: forum/skins/default/templates/question.html:907
#, python-format
msgid ""
"\n"
@@ -2175,170 +2164,215 @@ msgid ""
"(profile_url)s\n"
" "
msgstr ""
-"\n"
-"(note: you can always <a href='%(profile_url)s?"
-"sort=email_subscriptions'>adjust frequency</a> of email updates)"
-#: templates/question.html:396
+#: forum/skins/default/templates/question.html:405
+#: forum/skins/default/templates/question.html:914
msgid "once you sign in you will be able to subscribe for any updates here"
msgstr ""
-"<span class='strong'>Here</span> (once you log in) you will be able to sign "
-"up for the periodic email updates about this question."
-#: templates/question.html:407
+#: forum/skins/default/templates/question.html:416
+#: forum/skins/default/templates/question.html:925
msgid "Your answer"
msgstr ""
-#: templates/question.html:409
+#: forum/skins/default/templates/question.html:418
+#: forum/skins/default/templates/question.html:927
msgid "Be the first one to answer this question!"
msgstr ""
-#: templates/question.html:415
+#: forum/skins/default/templates/question.html:424
+#: forum/skins/default/templates/question.html:933
msgid "you can answer anonymously and then login"
msgstr ""
-"<span class='strong big'>Please start posting your answer anonymously</span> "
-"- your answer will be saved within the current session and published after "
-"you log in or create a new account. Please try to give a <strong>substantial "
-"answer</strong>, for discussions, <strong>please use comments</strong> and "
-"<strong>please do remember to vote</strong> (after you log in)!"
-#: templates/question.html:419
+#: forum/skins/default/templates/question.html:428
+#: forum/skins/default/templates/question.html:937
msgid "answer your own question only to give an answer"
msgstr ""
-"<span class='big strong'>You are welcome to answer your own question</span>, "
-"but please make sure to give an <strong>answer</strong>. Remember that you "
-"can always <strong>revise your original question</strong>. Please "
-"<strong>use comments for discussions</strong> and <strong>please don't "
-"forget to vote :)</strong> for the answers that you liked (or perhaps did "
-"not like)! "
-#: templates/question.html:421
+#: forum/skins/default/templates/question.html:430
+#: forum/skins/default/templates/question.html:939
msgid "please only give an answer, no discussions"
msgstr ""
-"<span class='big strong'>Please try to give a substantial answer</span>. If "
-"you wanted to comment on the question or answer, just <strong>use the "
-"commenting tool</strong>. Please remember that you can always <strong>revise "
-"your answers</strong> - no need to answer the same question twice. Also, "
-"please <strong>don't forget to vote</strong> - it really helps to select the "
-"best questions and answers!"
-#: templates/question.html:457
+#: forum/skins/default/templates/question.html:466
+#: forum/skins/default/templates/question.html:975
msgid "Login/Signup to Post Your Answer"
msgstr ""
-#: templates/question.html:460
+#: forum/skins/default/templates/question.html:469
+#: forum/skins/default/templates/question.html:978
msgid "Answer Your Own Question"
msgstr ""
-#: templates/question.html:462
+#: forum/skins/default/templates/question.html:471
+#: forum/skins/default/templates/question.html:980
msgid "Answer the question"
-msgstr "Post Your Answer"
+msgstr ""
-#: templates/question.html:475
+#: forum/skins/default/templates/question.html:484
+#: forum/skins/default/templates/question.html:993
msgid "Question tags"
-msgstr "Tags"
+msgstr ""
-#: templates/question.html:485
+#: forum/skins/default/templates/question.html:494
+#: forum/skins/default/templates/question.html:1003
msgid "question asked"
-msgstr "Asked"
+msgstr ""
-#: templates/question.html:488
+#: forum/skins/default/templates/question.html:497
+#: forum/skins/default/templates/question.html:1006
msgid "question was seen"
-msgstr "Seen"
+msgstr ""
-#: templates/question.html:488
+#: forum/skins/default/templates/question.html:497
+#: forum/skins/default/templates/question.html:1006
msgid "times"
msgstr ""
-#: templates/question.html:491
+#: forum/skins/default/templates/question.html:500
+#: forum/skins/default/templates/question.html:1009
msgid "last updated"
-msgstr "Last updated"
+msgstr ""
-#: templates/question.html:496
+#: forum/skins/default/templates/question.html:505
+#: forum/skins/default/templates/question.html:1014
msgid "Related questions"
msgstr ""
-#: templates/question_edit.html:5 templates/question_edit.html.py:66
+#: forum/skins/default/templates/question_edit.html:5
+#: forum/skins/default/templates/question_edit.html:66
msgid "Edit question"
msgstr ""
-#: templates/question_edit_tips.html:4
+#: forum/skins/default/templates/question_edit_tips.html:4
msgid "question tips"
-msgstr "Tips"
+msgstr ""
-#: templates/question_edit_tips.html:7
+#: forum/skins/default/templates/question_edit_tips.html:7
msgid "please ask a relevant question"
-msgstr "ask a question relevant to the CNPROG community"
+msgstr ""
-#: templates/question_edit_tips.html:10
+#: forum/skins/default/templates/question_edit_tips.html:10
msgid "please try provide enough details"
-msgstr "provide enough details"
+msgstr ""
-#: templates/question_retag.html:4 templates/question_retag.html.py:53
+#: forum/skins/default/templates/question_retag.html:4
+#: forum/skins/default/templates/question_retag.html:53
msgid "Change tags"
msgstr ""
-#: templates/question_retag.html:40
+#: forum/skins/default/templates/question_retag.html:40
msgid "up to 5 tags, less than 20 characters each"
msgstr ""
-#: templates/question_retag.html:83
+#: forum/skins/default/templates/question_retag.html:83
msgid "Why use and modify tags?"
msgstr ""
-#: templates/question_retag.html:86
+#: forum/skins/default/templates/question_retag.html:86
msgid "tags help us keep Questions organized"
msgstr ""
-#: templates/question_retag.html:94
+#: forum/skins/default/templates/question_retag.html:94
msgid "tag editors receive special awards from the community"
msgstr ""
-#: templates/questions.html:29
+#: forum/skins/default/templates/questions.html:29
+#: forum/skins/default/templates/questions.html:33
+#: forum/skins/default/templates/questions.html:303
msgid "Found by tags"
-msgstr "Tagged questions"
-
-#: templates/questions.html:33
-msgid "Search results"
msgstr ""
-#: templates/questions.html:35
+#: forum/skins/default/templates/questions.html:29
+#: forum/skins/default/templates/questions.html:39
+#: forum/skins/default/templates/questions.html:309
msgid "Found by title"
msgstr ""
-#: templates/questions.html:39
-msgid "Unanswered questions"
+#: forum/skins/default/templates/questions.html:29
+#: forum/skins/default/templates/questions.html:45
+#: forum/skins/default/templates/questions.html:315
+msgid "All questions"
msgstr ""
-#: templates/questions.html:41
-msgid "All questions"
+#: forum/skins/default/templates/questions.html:37
+#: forum/skins/default/templates/questions.html:307
+msgid "Search results"
msgstr ""
-#: templates/questions.html:47
-msgid "most recently asked questions"
+#: forum/skins/default/templates/questions.html:43
+#: forum/skins/default/templates/questions.html:313
+#: templates/unanswered.html:8 templates/unanswered.html.py:19
+msgid "Unanswered questions"
msgstr ""
-#: templates/questions.html:48
-msgid "most recently updated questions"
+#: forum/skins/default/templates/questions.html:52
+#: forum/skins/default/templates/questions.html:321
+#: templates/unanswered.html:21
+msgid "most recently asked questions"
msgstr ""
-#: templates/questions.html:48
-msgid "active"
+#: forum/skins/default/templates/questions.html:144
+msgid "Category: "
msgstr ""
-#: templates/questions.html:144
+#: forum/skins/default/templates/questions.html:150
+#: forum/skins/default/templates/questions.html:418
msgid "Did not find anything?"
msgstr ""
-#: templates/questions.html:147
+#: forum/skins/default/templates/questions.html:153
+#: forum/skins/default/templates/questions.html:421
msgid "Did not find what you were looking for?"
msgstr ""
-#: templates/questions.html:149
+#: forum/skins/default/templates/questions.html:155
+#: forum/skins/default/templates/questions.html:423
msgid "Please, post your question!"
msgstr ""
-#: templates/questions.html:163
+#: forum/skins/default/templates/questions.html:170
+#, python-format
+msgid ""
+"\n"
+"\t\t\thave total %(q_num)s questions tagged %(tagname)s\n"
+"\t\t\t"
+msgid_plural ""
+"\n"
+"\t\t\thave total %(q_num)s questions tagged %(tagname)s\n"
+"\t\t\t"
+msgstr[0] ""
+msgstr[1] ""
+
+#: forum/skins/default/templates/questions.html:177
+#, python-format
+msgid ""
+"\n"
+"\t\t\t\thave total %(q_num)s questions containing %(searchtitle)s\n"
+"\t\t\t\t"
+msgid_plural ""
+"\n"
+"\t\t\t\thave total %(q_num)s questions containing %(searchtitle)s\n"
+"\t\t\t\t"
+msgstr[0] ""
+msgstr[1] ""
+
+#: forum/skins/default/templates/questions.html:183
+#, python-format
+msgid ""
+"\n"
+"\t\t\t\thave total %(q_num)s questions\n"
+"\t\t\t\t"
+msgid_plural ""
+"\n"
+"\t\t\t\thave total %(q_num)s questions\n"
+"\t\t\t\t"
+msgstr[0] ""
+msgstr[1] ""
+
+#: forum/skins/default/templates/questions.html:192
+#: forum/skins/default/templates/questions.html:437
#, python-format
msgid ""
"\n"
@@ -2349,15 +2383,10 @@ msgid_plural ""
" have total %(q_num)s questions tagged %(tagname)s\n"
" "
msgstr[0] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>question tagged</p><p><span "
-"class=\"tag\">%(tagname)s</span></p>"
msgstr[1] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>questions tagged</p><div "
-"class=\"tags\"><span class=\"tag\">%(tagname)s</span></div>"
-#: templates/questions.html:171
+#: forum/skins/default/templates/questions.html:200
+#: forum/skins/default/templates/questions.html:445
#, python-format
msgid ""
"\n"
@@ -2370,15 +2399,10 @@ msgid_plural ""
"s in full text\n"
" "
msgstr[0] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>question containing "
-"<strong><span class=\"darkred\">%(searchtitle)s</span></strong></p>"
msgstr[1] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>questions containing "
-"<strong><span class=\"darkred\">%(searchtitle)s</span></strong></p>"
-#: templates/questions.html:177
+#: forum/skins/default/templates/questions.html:206
+#: forum/skins/default/templates/questions.html:451
#, python-format
msgid ""
"\n"
@@ -2391,17 +2415,10 @@ msgid_plural ""
"s\n"
" "
msgstr[0] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>question with title "
-"containing <strong><span class=\"darkred\">%(searchtitle)s</span></strong></"
-"p>"
msgstr[1] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>questions with title "
-"containing <strong><span class=\"darkred\">%(searchtitle)s</span></strong></"
-"p>"
-#: templates/questions.html:185
+#: forum/skins/default/templates/questions.html:214
+#: forum/skins/default/templates/questions.html:459
#, python-format
msgid ""
"\n"
@@ -2412,15 +2429,10 @@ msgid_plural ""
" have total %(q_num)s unanswered questions\n"
" "
msgstr[0] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>question without an "
-"accepted answer</p>"
msgstr[1] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>questions without an "
-"accepted answer</p>"
-#: templates/questions.html:191
+#: forum/skins/default/templates/questions.html:220
+#: forum/skins/default/templates/questions.html:465
#, python-format
msgid ""
"\n"
@@ -2431,236 +2443,250 @@ msgid_plural ""
" have total %(q_num)s questions\n"
" "
msgstr[0] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>question</p>"
msgstr[1] ""
-"\n"
-"<div class=\"questions-count\">%(q_num)s</div><p>questions<p>"
-#: templates/questions.html:201
+#: forum/skins/default/templates/questions.html:231
+#: forum/skins/default/templates/questions.html:475
msgid "latest questions info"
-msgstr "<strong>Newest</strong> questions are shown first."
+msgstr ""
-#: templates/questions.html:205
+#: forum/skins/default/templates/questions.html:235
+#: forum/skins/default/templates/questions.html:479
msgid "Questions are sorted by the <strong>time of last update</strong>."
msgstr ""
-#: templates/questions.html:206
+#: forum/skins/default/templates/questions.html:236
+#: forum/skins/default/templates/questions.html:480
msgid "Most recently answered ones are shown first."
-msgstr "<strong>Most recently answered</strong> questions are shown first."
+msgstr ""
-#: templates/questions.html:210
+#: forum/skins/default/templates/questions.html:240
+#: forum/skins/default/templates/questions.html:484
msgid "Questions sorted by <strong>number of responses</strong>."
-msgstr "Questions sorted by the <strong>number of answers</strong>."
+msgstr ""
-#: templates/questions.html:211
+#: forum/skins/default/templates/questions.html:241
+#: forum/skins/default/templates/questions.html:485
msgid "Most answered questions are shown first."
-msgstr " "
+msgstr ""
-#: templates/questions.html:215
+#: forum/skins/default/templates/questions.html:245
+#: forum/skins/default/templates/questions.html:489
msgid "Questions are sorted by the <strong>number of votes</strong>."
msgstr ""
-#: templates/questions.html:216
+#: forum/skins/default/templates/questions.html:246
+#: forum/skins/default/templates/questions.html:490
msgid "Most voted questions are shown first."
msgstr ""
-#: templates/questions.html:224
+#: forum/skins/default/templates/questions.html:254
+#: forum/skins/default/templates/questions.html:498
+#: templates/unanswered.html:118
msgid "Related tags"
-msgstr "Tags"
+msgstr ""
-#: templates/questions.html:227 templates/tag_selector.html:10
-#: templates/tag_selector.html.py:27
+#: forum/skins/default/templates/questions.html:264
+#: forum/skins/default/templates/questions.html:501
+#: forum/skins/default/templates/tag_selector.html:10
+#: forum/skins/default/templates/tag_selector.html:27
#, python-format
msgid "see questions tagged '%(tag_name)s'"
msgstr ""
-#: templates/reopen.html:6 templates/reopen.html.py:16
+#: forum/skins/default/templates/reopen.html:6
+#: forum/skins/default/templates/reopen.html:16
msgid "Reopen question"
msgstr ""
-#: templates/reopen.html:19
+#: forum/skins/default/templates/reopen.html:19
msgid "Open the previously closed question"
msgstr ""
-#: templates/reopen.html:22
+#: forum/skins/default/templates/reopen.html:22
msgid "The question was closed for the following reason "
msgstr ""
-#: templates/reopen.html:22
+#: forum/skins/default/templates/reopen.html:22
msgid "reason - leave blank in english"
msgstr ""
-#: templates/reopen.html:22
+#: forum/skins/default/templates/reopen.html:22
msgid "on "
msgstr ""
-#: templates/reopen.html:22
+#: forum/skins/default/templates/reopen.html:22
msgid "date closed"
msgstr ""
-#: templates/reopen.html:29
+#: forum/skins/default/templates/reopen.html:29
msgid "Reopen this question"
msgstr ""
-#: templates/revisions_answer.html:7 templates/revisions_answer.html.py:38
-#: templates/revisions_question.html:8 templates/revisions_question.html:38
+#: forum/skins/default/templates/revisions_answer.html:7
+#: forum/skins/default/templates/revisions_answer.html:38
+#: forum/skins/default/templates/revisions_question.html:8
+#: forum/skins/default/templates/revisions_question.html:38
msgid "Revision history"
msgstr ""
-#: templates/revisions_answer.html:50 templates/revisions_question.html:50
+#: forum/skins/default/templates/revisions_answer.html:50
+#: forum/skins/default/templates/revisions_question.html:50
msgid "click to hide/show revision"
msgstr ""
-#: templates/tag_selector.html:4
+#: forum/skins/default/templates/tag_selector.html:4
msgid "Interesting tags"
msgstr ""
-#: templates/tag_selector.html:14
+#: forum/skins/default/templates/tag_selector.html:14
#, python-format
msgid "remove '%(tag_name)s' from the list of interesting tags"
msgstr ""
-#: templates/tag_selector.html:20 templates/tag_selector.html.py:37
+#: forum/skins/default/templates/tag_selector.html:20
+#: forum/skins/default/templates/tag_selector.html:37
msgid "Add"
msgstr ""
-#: templates/tag_selector.html:21
+#: forum/skins/default/templates/tag_selector.html:21
msgid "Ignored tags"
msgstr ""
-#: templates/tag_selector.html:31
+#: forum/skins/default/templates/tag_selector.html:31
#, python-format
msgid "remove '%(tag_name)s' from the list of ignored tags"
msgstr ""
-#: templates/tag_selector.html:40
+#: forum/skins/default/templates/tag_selector.html:40
msgid "keep ingored questions hidden"
msgstr ""
-#: templates/tags.html:6 templates/tags.html.py:30
+#: forum/skins/default/templates/tags.html:6
+#: forum/skins/default/templates/tags.html:30
msgid "Tag list"
msgstr ""
-#: templates/tags.html:32
+#: forum/skins/default/templates/tags.html:32
msgid "sorted alphabetically"
msgstr ""
-#: templates/tags.html:32
+#: forum/skins/default/templates/tags.html:32
msgid "by name"
msgstr ""
-#: templates/tags.html:33
+#: forum/skins/default/templates/tags.html:33
msgid "sorted by frequency of tag use"
msgstr ""
-#: templates/tags.html:33
+#: forum/skins/default/templates/tags.html:33
msgid "by popularity"
msgstr ""
-#: templates/tags.html:39
+#: forum/skins/default/templates/tags.html:39
msgid "All tags matching query"
msgstr ""
-#: templates/tags.html:39
+#: forum/skins/default/templates/tags.html:39
msgid "all tags - make this empty in english"
msgstr ""
-#: templates/tags.html:42
+#: forum/skins/default/templates/tags.html:42
msgid "Nothing found"
msgstr ""
-#: templates/user_edit.html:6
+#: forum/skins/default/templates/user_edit.html:6
msgid "Edit user profile"
msgstr ""
-#: templates/user_edit.html:19
+#: forum/skins/default/templates/user_edit.html:19
msgid "edit profile"
msgstr ""
-#: templates/user_edit.html:31
+#: forum/skins/default/templates/user_edit.html:31
msgid "image associated with your email address"
msgstr ""
-#: templates/user_edit.html:31
+#: forum/skins/default/templates/user_edit.html:31
#, python-format
msgid "avatar, see %(gravatar_faq_url)s"
-msgstr "<a href='%(gravatar_faq_url)s'>gravatar</a>"
+msgstr ""
-#: templates/user_edit.html:36 templates/user_info.html:56
+#: forum/skins/default/templates/user_edit.html:36
+#: forum/skins/default/templates/user_info.html:56
msgid "Registered user"
msgstr ""
-#: templates/user_edit.html:43
+#: forum/skins/default/templates/user_edit.html:43
msgid "Screen Name"
msgstr ""
-#: templates/user_edit.html:86 templates/user_email_subscriptions.html:20
+#: forum/skins/default/templates/user_edit.html:86
+#: forum/skins/default/templates/user_email_subscriptions.html:23
msgid "Update"
msgstr ""
-#: templates/user_email_subscriptions.html:8
+#: forum/skins/default/templates/user_email_subscriptions.html:8
msgid "Email subscription settings"
msgstr ""
-#: templates/user_email_subscriptions.html:9
+#: forum/skins/default/templates/user_email_subscriptions.html:9
msgid "email subscription settings info"
msgstr ""
-"<span class='big strong'>Adjust frequency of email updates.</span> Receive "
-"updates on interesting questions by email, <strong><br/>help the community</"
-"strong> by answering questions of your colleagues. If you do not wish to "
-"receive emails - select 'no email' on all items below.<br/>Updates are only "
-"sent when there is any new activity on selected items."
-#: templates/user_email_subscriptions.html:21
+#: forum/skins/default/templates/user_email_subscriptions.html:24
msgid "Stop sending email"
-msgstr "Stop Email"
+msgstr ""
-#: templates/user_info.html:32
+#: forum/skins/default/templates/user_info.html:22
+msgid "karma"
+msgstr ""
+
+#: forum/skins/default/templates/user_info.html:32
msgid "Moderate this user"
msgstr ""
-#: templates/user_info.html:45
+#: forum/skins/default/templates/user_info.html:45
msgid "update profile"
msgstr ""
-#: templates/user_info.html:60
+#: forum/skins/default/templates/user_info.html:60
msgid "real name"
msgstr ""
-#: templates/user_info.html:65
+#: forum/skins/default/templates/user_info.html:65
msgid "member for"
-msgstr "member since"
+msgstr ""
-#: templates/user_info.html:70
+#: forum/skins/default/templates/user_info.html:70
msgid "last seen"
msgstr ""
-#: templates/user_info.html:76
+#: forum/skins/default/templates/user_info.html:76
msgid "user website"
msgstr ""
-#: templates/user_info.html:82
+#: forum/skins/default/templates/user_info.html:82
msgid "location"
msgstr ""
-#: templates/user_info.html:89
+#: forum/skins/default/templates/user_info.html:89
msgid "age"
msgstr ""
-#: templates/user_info.html:90
+#: forum/skins/default/templates/user_info.html:90
msgid "age unit"
-msgstr "years old"
+msgstr ""
-#: templates/user_info.html:96
+#: forum/skins/default/templates/user_info.html:96
msgid "todays unused votes"
msgstr ""
-#: templates/user_info.html:97
+#: forum/skins/default/templates/user_info.html:97
msgid "votes left"
msgstr ""
-#: templates/user_stats.html:12
+#: forum/skins/default/templates/user_stats.html:12
#, python-format
msgid ""
"\n"
@@ -2673,7 +2699,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/user_stats.html:23
+#: forum/skins/default/templates/user_stats.html:23
#, python-format
msgid ""
"\n"
@@ -2686,16 +2712,16 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/user_stats.html:36
+#: forum/skins/default/templates/user_stats.html:36
#, python-format
msgid "the answer has been voted for %(vote_count)s times"
msgstr ""
-#: templates/user_stats.html:36
+#: forum/skins/default/templates/user_stats.html:36
msgid "this answer has been selected as correct"
msgstr ""
-#: templates/user_stats.html:46
+#: forum/skins/default/templates/user_stats.html:46
#, python-format
msgid ""
"\n"
@@ -2706,13 +2732,9 @@ msgid_plural ""
" the answer has been commented %(comment_count)s times\n"
" "
msgstr[0] ""
-"\n"
-"(one comment)"
msgstr[1] ""
-"\n"
-"(%(comment_count)s comments)"
-#: templates/user_stats.html:61
+#: forum/skins/default/templates/user_stats.html:61
#, python-format
msgid ""
"\n"
@@ -2725,23 +2747,23 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/user_stats.html:72
+#: forum/skins/default/templates/user_stats.html:72
msgid "thumb up"
msgstr ""
-#: templates/user_stats.html:73
+#: forum/skins/default/templates/user_stats.html:73
msgid "user has voted up this many times"
msgstr ""
-#: templates/user_stats.html:77
+#: forum/skins/default/templates/user_stats.html:77
msgid "thumb down"
msgstr ""
-#: templates/user_stats.html:78
+#: forum/skins/default/templates/user_stats.html:78
msgid "user voted down this many times"
msgstr ""
-#: templates/user_stats.html:87
+#: forum/skins/default/templates/user_stats.html:87
#, python-format
msgid ""
"\n"
@@ -2754,13 +2776,13 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/user_stats.html:100
+#: forum/skins/default/templates/user_stats.html:100
#, python-format
msgid ""
"see other questions with %(view_user)s's contributions tagged '%(tag_name)s' "
msgstr ""
-#: templates/user_stats.html:115
+#: forum/skins/default/templates/user_stats.html:115
#, python-format
msgid ""
"\n"
@@ -2773,236 +2795,233 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: templates/user_tabs.html:7
+#: forum/skins/default/templates/user_tabs.html:7
msgid "User profile"
msgstr ""
-#: templates/user_tabs.html:16
+#: forum/skins/default/templates/user_tabs.html:7 forum/views/users.py:875
+msgid "overview"
+msgstr ""
+
+#: forum/skins/default/templates/user_tabs.html:9 forum/views/users.py:883
+msgid "recent activity"
+msgstr ""
+
+#: forum/skins/default/templates/user_tabs.html:12 forum/views/users.py:893
+msgid "comments and answers to others questions"
+msgstr ""
+
+#: forum/skins/default/templates/user_tabs.html:13 forum/views/users.py:892
+msgid "responses"
+msgstr ""
+
+#: forum/skins/default/templates/user_tabs.html:16
msgid "graph of user reputation"
-msgstr "Graph of user karma"
+msgstr ""
-#: templates/user_tabs.html:17
+#: forum/skins/default/templates/user_tabs.html:17
msgid "reputation history"
-msgstr "karma history"
+msgstr ""
+
+#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:919
+msgid "user vote record"
+msgstr ""
+
+#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:918
+msgid "casted votes"
+msgstr ""
-#: templates/user_tabs.html:23
+#: forum/skins/default/templates/user_tabs.html:23
msgid "questions that user selected as his/her favorite"
msgstr ""
-#: templates/user_tabs.html:24
+#: forum/skins/default/templates/user_tabs.html:24
msgid "favorites"
msgstr ""
-#: templates/users.html:6 templates/users.html.py:24
+#: forum/skins/default/templates/user_tabs.html:27 forum/views/users.py:928
+msgid "email subscription settings"
+msgstr ""
+
+#: forum/skins/default/templates/user_tabs.html:28 forum/views/users.py:927
+msgid "email subscriptions"
+msgstr ""
+
+#: forum/skins/default/templates/users.html:6
+#: forum/skins/default/templates/users.html:24
msgid "Users"
msgstr ""
-#: templates/users.html:27
+#: forum/skins/default/templates/users.html:26 forum/views/users.py:901
+msgid "reputation"
+msgstr ""
+
+#: forum/skins/default/templates/users.html:27
msgid "recent"
msgstr ""
-#: templates/users.html:28
+#: forum/skins/default/templates/users.html:28
msgid "oldest"
msgstr ""
-#: templates/users.html:29
+#: forum/skins/default/templates/users.html:29
msgid "by username"
msgstr ""
-#: templates/users.html:35
+#: forum/skins/default/templates/users.html:35
#, python-format
msgid "users matching query %(suser)s:"
msgstr ""
-#: templates/users.html:39
+#: forum/skins/default/templates/users.html:39
msgid "Nothing found."
msgstr ""
-#: templates/users_questions.html:11
+#: forum/skins/default/templates/users_questions.html:11
msgid "this questions was selected as favorite"
msgstr ""
-#: templates/users_questions.html:12
+#: forum/skins/default/templates/users_questions.html:12
msgid "thumb-up on"
msgstr ""
-#: templates/users_questions.html:19
+#: forum/skins/default/templates/users_questions.html:19
msgid "thumb-up off"
msgstr ""
-#: templates/users_questions.html:34
+#: forum/skins/default/templates/users_questions.html:34
msgid "this answer has been accepted to be correct"
msgstr ""
-#: templates/authopenid/changeemail.html:3
-#: templates/authopenid/changeemail.html:9
-#: templates/authopenid/changeemail.html:38
+#: forum/skins/default/templates/authopenid/changeemail.html:3
+#: forum/skins/default/templates/authopenid/changeemail.html:9
+#: forum/skins/default/templates/authopenid/changeemail.html:38
msgid "Change email"
-msgstr "Change Email"
+msgstr ""
-#: templates/authopenid/changeemail.html:11
+#: forum/skins/default/templates/authopenid/changeemail.html:11
msgid "Save your email address"
msgstr ""
-#: templates/authopenid/changeemail.html:16
+#: forum/skins/default/templates/authopenid/changeemail.html:16
#, python-format
msgid "change %(email)s info"
msgstr ""
-"<span class=\"strong big\">Enter your new email into the box below</span> if "
-"you'd like to use another email for <strong>update subscriptions</strong>."
-"<br>Currently you are using <strong>%(email)s</strong>"
-#: templates/authopenid/changeemail.html:18
+#: forum/skins/default/templates/authopenid/changeemail.html:18
#, python-format
msgid "here is why email is required, see %(gravatar_faq_url)s"
msgstr ""
-"<span class='strong big'>Please enter your email address in the box below.</"
-"span> Valid email address is required on this Q&amp;A forum. If you like, "
-"you can <strong>receive updates</strong> on interesting questions or entire "
-"forum via email. Also, your email is used to create a unique <a href='%"
-"(gravatar_faq_url)s'><strong>gravatar</strong></a> image for your account. "
-"Email addresses are never shown or otherwise shared with anybody else."
-#: templates/authopenid/changeemail.html:31
+#: forum/skins/default/templates/authopenid/changeemail.html:31
msgid "Your new Email"
msgstr ""
-"<strong>Your new Email:</strong> (will <strong>not</strong> be shown to "
-"anyone, must be valid)"
-#: templates/authopenid/changeemail.html:31
+#: forum/skins/default/templates/authopenid/changeemail.html:31
msgid "Your Email"
msgstr ""
-"<strong>Your Email</strong> (<i>must be valid, never shown to others</i>)"
-#: templates/authopenid/changeemail.html:38
+#: forum/skins/default/templates/authopenid/changeemail.html:38
msgid "Save Email"
msgstr ""
-#: templates/authopenid/changeemail.html:49
+#: forum/skins/default/templates/authopenid/changeemail.html:49
msgid "Validate email"
msgstr ""
-#: templates/authopenid/changeemail.html:52
+#: forum/skins/default/templates/authopenid/changeemail.html:52
#, python-format
msgid "validate %(email)s info or go to %(change_email_url)s"
msgstr ""
-"<span class=\"strong big\">An email with a validation link has been sent to %"
-"(email)s.</span> Please <strong>follow the emailed link</strong> with your "
-"web browser. Email validation is necessary to help insure the proper use of "
-"email on <span class=\"orange\">Q&amp;A</span>. If you would like to use "
-"<strong>another email</strong>, please <a href='%(change_email_url)"
-"s'><strong>change it again</strong></a>."
-#: templates/authopenid/changeemail.html:57
+#: forum/skins/default/templates/authopenid/changeemail.html:57
msgid "Email not changed"
msgstr ""
-#: templates/authopenid/changeemail.html:60
+#: forum/skins/default/templates/authopenid/changeemail.html:60
#, python-format
msgid "old %(email)s kept, if you like go to %(change_email_url)s"
msgstr ""
-"<span class=\"strong big\">Your email address %(email)s has not been changed."
-"</span> If you decide to change it later - you can always do it by editing "
-"it in your user profile or by using the <a href='%(change_email_url)"
-"s'><strong>previous form</strong></a> again."
-#: templates/authopenid/changeemail.html:65
+#: forum/skins/default/templates/authopenid/changeemail.html:65
msgid "Email changed"
msgstr ""
-#: templates/authopenid/changeemail.html:68
+#: forum/skins/default/templates/authopenid/changeemail.html:68
#, python-format
msgid "your current %(email)s can be used for this"
msgstr ""
-"<span class='big strong'>Your email address is now set to %(email)s.</span> "
-"Updates on the questions that you like most will be sent to this address. "
-"Email notifications are sent once a day or less frequently - only when there "
-"are any news."
-#: templates/authopenid/changeemail.html:73
+#: forum/skins/default/templates/authopenid/changeemail.html:73
msgid "Email verified"
msgstr ""
-#: templates/authopenid/changeemail.html:76
+#: forum/skins/default/templates/authopenid/changeemail.html:76
msgid "thanks for verifying email"
msgstr ""
-"<span class=\"big strong\">Thank you for verifying your email!</span> Now "
-"you can <strong>ask</strong> and <strong>answer</strong> questions. Also if "
-"you find a very interesting question you can <strong>subscribe for the "
-"updates</strong> - then will be notified about changes <strong>once a day</"
-"strong> or less frequently."
-#: templates/authopenid/changeemail.html:81
+#: forum/skins/default/templates/authopenid/changeemail.html:81
msgid "email key not sent"
-msgstr "Validation email not sent"
+msgstr ""
-#: templates/authopenid/changeemail.html:84
+#: forum/skins/default/templates/authopenid/changeemail.html:84
#, python-format
msgid "email key not sent %(email)s change email here %(change_link)s"
msgstr ""
-"<span class='big strong'>Your current email address %(email)s has been "
-"validated before</span> so the new key was not sent. You can <a href='%"
-"(change_link)s'>change</a> email used for update subscriptions if necessary."
-#: templates/authopenid/changeopenid.html:4
-#: templates/authopenid/changeopenid.html:30
-#: templates/authopenid/settings.html:34
+#: forum/skins/default/templates/authopenid/changeopenid.html:4
+#: forum/skins/default/templates/authopenid/changeopenid.html:30
+#: forum/skins/default/templates/authopenid/settings.html:34
msgid "Change OpenID"
msgstr ""
-#: templates/authopenid/changeopenid.html:8
+#: forum/skins/default/templates/authopenid/changeopenid.html:8
msgid "Account: change OpenID URL"
msgstr ""
-#: templates/authopenid/changeopenid.html:12
+#: forum/skins/default/templates/authopenid/changeopenid.html:12
msgid ""
"This is where you can change your OpenID URL. Make sure you remember it!"
msgstr ""
-#: templates/authopenid/changeopenid.html:14
-#: templates/authopenid/delete.html:14 templates/authopenid/delete.html:24
+#: forum/skins/default/templates/authopenid/changeopenid.html:14
+#: forum/skins/default/templates/authopenid/delete.html:14
+#: forum/skins/default/templates/authopenid/delete.html:24
msgid "Please correct errors below:"
msgstr ""
-#: templates/authopenid/changeopenid.html:29
+#: forum/skins/default/templates/authopenid/changeopenid.html:29
msgid "OpenID URL:"
msgstr ""
-#: templates/authopenid/changepw.html:5 templates/authopenid/changepw.html:14
-#: templates/authopenid/settings.html:29
+#: forum/skins/default/templates/authopenid/changepw.html:5
+#: forum/skins/default/templates/authopenid/changepw.html:14
+#: forum/skins/default/templates/authopenid/settings.html:29
msgid "Change password"
msgstr ""
-#: templates/authopenid/changepw.html:7
+#: forum/skins/default/templates/authopenid/changepw.html:7
msgid "Account: change password"
-msgstr "Change your password"
+msgstr ""
-#: templates/authopenid/changepw.html:8
+#: forum/skins/default/templates/authopenid/changepw.html:8
msgid "This is where you can change your password. Make sure you remember it!"
msgstr ""
-"<span class='strong'>To change your password</span> please fill out and "
-"submit this form"
-#: templates/authopenid/complete.html:19
+#: forum/skins/default/templates/authopenid/complete.html:19
msgid "Connect your OpenID with this site"
-msgstr "New user signup"
+msgstr ""
-#: templates/authopenid/complete.html:22
+#: forum/skins/default/templates/authopenid/complete.html:22
msgid "Connect your OpenID with your account on this site"
-msgstr "New user signup"
+msgstr ""
-#: templates/authopenid/complete.html:27
+#: forum/skins/default/templates/authopenid/complete.html:27
#, python-format
msgid "register new %(provider)s account info, see %(gravatar_faq_url)s"
msgstr ""
-"<p><span class=\"big strong\">You are here for the first time with your %"
-"(provider)s login.</span> Please create your <strong>screen name</strong> "
-"and save your <strong>email</strong> address. Saved email address will let "
-"you <strong>subscribe for the updates</strong> on the most interesting "
-"questions and will be used to create and retrieve your unique avatar image - "
-"<a href='%(gravatar_faq_url)s'><strong>gravatar</strong></a>.</p>"
-#: templates/authopenid/complete.html:31
+#: forum/skins/default/templates/authopenid/complete.html:31
#, python-format
msgid ""
"%(username)s already exists, choose another name for \n"
@@ -3010,260 +3029,172 @@ msgid ""
"(gravatar_faq_url)s\n"
" "
msgstr ""
-"<p><span class='strong big'>Oops... looks like screen name %(username)s is "
-"already used in another account.</span></p><p>Please choose another screen "
-"name to use with your %(provider)s login. Also, a valid email address is "
-"required on the <span class='orange'>Q&amp;A</span> forum. Your email is "
-"used to create a unique <a href='%(gravatar_faq_url)s'><strong>gravatar</"
-"strong></a> image for your account. If you like, you can <strong>receive "
-"updates</strong> on the interesting questions or entire forum by email. "
-"Email addresses are never shown or otherwise shared with anybody else.</p>"
-#: templates/authopenid/complete.html:35
+#: forum/skins/default/templates/authopenid/complete.html:35
#, python-format
msgid ""
"register new external %(provider)s account info, see %(gravatar_faq_url)s"
msgstr ""
-"<p><span class=\"big strong\">You are here for the first time with your %"
-"(provider)s login.</span></p><p>You can either keep your <strong>screen "
-"name</strong> the same as your %(provider)s login name or choose some other "
-"nickname.</p><p>Also, please save a valid <strong>email</strong> address. "
-"With the email you can <strong>subscribe for the updates</strong> on the "
-"most interesting questions. Email address is also used to create and "
-"retrieve your unique avatar image - <a href='%(gravatar_faq_url)"
-"s'><strong>gravatar</strong></a>.</p>"
-#: templates/authopenid/complete.html:38
+#: forum/skins/default/templates/authopenid/complete.html:38
#, python-format
msgid "register new Facebook connect account info, see %(gravatar_faq_url)s"
msgstr ""
-"<p><span class=\"big strong\">You are here for the first time with your "
-"Facebook login.</span> Please create your <strong>screen name</strong> "
-"and save your <strong>email</strong> address. Saved email address will let "
-"you <strong>subscribe for the updates</strong> on the most interesting "
-"questions and will be used to create and retrieve your unique avatar image - "
-"<a href='%(gravatar_faq_url)s'><strong>gravatar</strong></a>.</p>"
-#: templates/authopenid/complete.html:42
+#: forum/skins/default/templates/authopenid/complete.html:42
msgid "This account already exists, please use another."
msgstr ""
-#: templates/authopenid/complete.html:57
+#: forum/skins/default/templates/authopenid/complete.html:57
msgid "Sorry, looks like we have some errors:"
msgstr ""
-#: templates/authopenid/complete.html:82
+#: forum/skins/default/templates/authopenid/complete.html:82
msgid "Screen name label"
-msgstr "<strong>Screen Name</strong> (<i>will be shown to others</i>)"
+msgstr ""
-#: templates/authopenid/complete.html:89
+#: forum/skins/default/templates/authopenid/complete.html:89
msgid "Email address label"
msgstr ""
-"<strong>Email Address</strong> (<i>will <strong>not</strong> be shared with "
-"anyone, must be valid</i>)"
-#: templates/authopenid/complete.html:95 templates/authopenid/signup.html:18
+#: forum/skins/default/templates/authopenid/complete.html:95
+#: forum/skins/default/templates/authopenid/complete.html:103
+msgid "Tag filter tool will be your right panel, once you log in."
+msgstr ""
+
+#: forum/skins/default/templates/authopenid/complete.html:96
+#: forum/skins/default/templates/authopenid/signup.html:18
msgid "receive updates motivational blurb"
msgstr ""
-"<strong>Receive forum updates by email</strong> - this will help our "
-"community grow and become more useful.<br/>By default <span "
-"class='orange'>Q&amp;A</span> forum sends up to <strong>one email digest per "
-"week</strong> - only when there is anything new.<br/>If you like, please "
-"adjust this now or any time later from your user account."
-#: templates/authopenid/complete.html:99
-msgid "Tag filter tool will be your right panel, once you log in."
+#: forum/skins/default/templates/authopenid/complete.html:100
+#: forum/skins/default/templates/authopenid/signup.html:22
+msgid "please select one of the options above"
msgstr ""
-#: templates/authopenid/complete.html:100
+#: forum/skins/default/templates/authopenid/complete.html:104
msgid "create account"
-msgstr "Signup"
+msgstr ""
-#: templates/authopenid/complete.html:109
+#: forum/skins/default/templates/authopenid/complete.html:113
msgid "Existing account"
msgstr ""
-#: templates/authopenid/complete.html:110
+#: forum/skins/default/templates/authopenid/complete.html:114
msgid "user name"
msgstr ""
-#: templates/authopenid/complete.html:111
+#: forum/skins/default/templates/authopenid/complete.html:115
msgid "password"
msgstr ""
-#: templates/authopenid/complete.html:118
+#: forum/skins/default/templates/authopenid/complete.html:122
msgid "Register"
msgstr ""
-#: templates/authopenid/complete.html:119 templates/authopenid/signin.html:151
+#: forum/skins/default/templates/authopenid/complete.html:123
+#: forum/skins/default/templates/authopenid/signin.html:151
msgid "Forgot your password?"
msgstr ""
-#: templates/authopenid/confirm_email.txt:2
-msgid "Thank you for registering at our Q&A forum!"
-msgstr ""
-
-#: templates/authopenid/confirm_email.txt:4
-msgid "Your account details are:"
-msgstr ""
-
-#: templates/authopenid/confirm_email.txt:6
-msgid "Username:"
-msgstr ""
-
-#: templates/authopenid/confirm_email.txt:7
-#: templates/authopenid/delete.html:19
-msgid "Password:"
-msgstr ""
-
-#: templates/authopenid/confirm_email.txt:9
-msgid "Please sign in here:"
-msgstr ""
-
-#: templates/authopenid/confirm_email.txt:12
-#: templates/authopenid/email_validation.txt:14
-#: templates/authopenid/sendpw_email.txt:8
-msgid ""
-"Sincerely,\n"
-"Forum Administrator"
-msgstr ""
-"Sincerely,\n"
-"Q&A Forum Administrator"
-
-#: templates/authopenid/delete.html:4 templates/authopenid/settings.html:38
+#: forum/skins/default/templates/authopenid/delete.html:4
+#: forum/skins/default/templates/authopenid/settings.html:38
msgid "Delete account"
msgstr ""
-#: templates/authopenid/delete.html:8
+#: forum/skins/default/templates/authopenid/delete.html:8
msgid "Account: delete account"
msgstr ""
-#: templates/authopenid/delete.html:12
+#: forum/skins/default/templates/authopenid/delete.html:12
msgid ""
"Note: After deleting your account, anyone will be able to register this "
"username."
msgstr ""
-#: templates/authopenid/delete.html:16
+#: forum/skins/default/templates/authopenid/delete.html:16
msgid "Check confirm box, if you want delete your account."
msgstr ""
-#: templates/authopenid/delete.html:31
+#: forum/skins/default/templates/authopenid/delete.html:19
+msgid "Password:"
+msgstr ""
+
+#: forum/skins/default/templates/authopenid/delete.html:31
msgid "I am sure I want to delete my account."
msgstr ""
-#: templates/authopenid/delete.html:32
+#: forum/skins/default/templates/authopenid/delete.html:32
msgid "Password/OpenID URL"
msgstr ""
-#: templates/authopenid/delete.html:32
+#: forum/skins/default/templates/authopenid/delete.html:32
msgid "(required for your security)"
msgstr ""
-#: templates/authopenid/delete.html:34
+#: forum/skins/default/templates/authopenid/delete.html:34
msgid "Delete account permanently"
msgstr ""
-#: templates/authopenid/email_validation.txt:2
-msgid "Greetings from the Q&A forum"
-msgstr ""
-
-#: templates/authopenid/email_validation.txt:4
-msgid "To make use of the Forum, please follow the link below:"
-msgstr ""
-
-#: templates/authopenid/email_validation.txt:8
-msgid "Following the link above will help us verify your email address."
-msgstr ""
-
-#: templates/authopenid/email_validation.txt:10
-msgid ""
-"If you beleive that this message was sent in mistake - \n"
-"no further action is needed. Just ingore this email, we apologize\n"
-"for any inconvenience"
-msgstr ""
-
-#: templates/authopenid/external_legacy_login_info.html:4
-#: templates/authopenid/external_legacy_login_info.html:7
+#: forum/skins/default/templates/authopenid/external_legacy_login_info.html:4
+#: forum/skins/default/templates/authopenid/external_legacy_login_info.html:7
msgid "Traditional login information"
msgstr ""
-#: templates/authopenid/external_legacy_login_info.html:12
+#: forum/skins/default/templates/authopenid/external_legacy_login_info.html:12
#, python-format
msgid ""
"how to login with password through external login website or use %"
"(feedback_url)s"
msgstr ""
-#: templates/authopenid/sendpw.html:4 templates/authopenid/sendpw.html.py:7
+#: forum/skins/default/templates/authopenid/sendpw.html:4
+#: forum/skins/default/templates/authopenid/sendpw.html:7
msgid "Send new password"
-msgstr "Recover password"
+msgstr ""
-#: templates/authopenid/sendpw.html:10
+#: forum/skins/default/templates/authopenid/sendpw.html:10
msgid "password recovery information"
msgstr ""
-"<span class='big strong'>Forgot you password? No problems - just get a new "
-"one!</span><br/>Please follow the following steps:<br/>&bull; submit your "
-"user name below and check your email<br/>&bull; <strong>follow the "
-"activation link</strong> for the new password - sent to you by email and "
-"login with the suggested password<br/>&bull; at this you might want to "
-"change your password to something you can remember better"
-#: templates/authopenid/sendpw.html:21
+#: forum/skins/default/templates/authopenid/sendpw.html:21
msgid "Reset password"
-msgstr "Send me a new password"
-
-#: templates/authopenid/sendpw.html:22
-msgid "return to login"
msgstr ""
-#: templates/authopenid/sendpw_email.txt:2
-#, python-format
-msgid ""
-"Someone has requested to reset your password on %(site_url)s.\n"
-"If it were not you, it is safe to ignore this email."
-msgstr ""
-
-#: templates/authopenid/sendpw_email.txt:5
-#, python-format
-msgid ""
-"email explanation how to use new %(password)s for %(username)s\n"
-"with the %(key_link)s"
+#: forum/skins/default/templates/authopenid/sendpw.html:22
+msgid "return to login"
msgstr ""
-"To change your password, please follow these steps:\n"
-"* visit this link: %(key_link)s\n"
-"* login with user name %(username)s and password %(password)s\n"
-"* go to your user profile and set the password to something you can remember"
-#: templates/authopenid/settings.html:4
+#: forum/skins/default/templates/authopenid/settings.html:4
msgid "Account functions"
msgstr ""
-#: templates/authopenid/settings.html:30
+#: forum/skins/default/templates/authopenid/settings.html:30
msgid "Give your account a new password."
msgstr ""
-#: templates/authopenid/settings.html:31
+#: forum/skins/default/templates/authopenid/settings.html:31
msgid "Change email "
msgstr ""
-#: templates/authopenid/settings.html:32
+#: forum/skins/default/templates/authopenid/settings.html:32
msgid "Add or update the email address associated with your account."
msgstr ""
-#: templates/authopenid/settings.html:35
+#: forum/skins/default/templates/authopenid/settings.html:35
msgid "Change openid associated to your account"
msgstr ""
-#: templates/authopenid/settings.html:39
+#: forum/skins/default/templates/authopenid/settings.html:39
msgid "Erase your username and all your data from website"
msgstr ""
-#: templates/authopenid/signin.html:5 templates/authopenid/signin.html:21
+#: forum/skins/default/templates/authopenid/signin.html:5
+#: forum/skins/default/templates/authopenid/signin.html:21
msgid "User login"
-msgstr "User login"
+msgstr ""
-#: templates/authopenid/signin.html:28
+#: forum/skins/default/templates/authopenid/signin.html:28
#, python-format
msgid ""
"\n"
@@ -3271,149 +3202,200 @@ msgid ""
"log in\n"
" "
msgstr ""
-"\n"
-"<span class=\"strong big\">Your answer to </span> <i>\"<strong>%(title)s</"
-"strong> %(summary)s...\"</i> <span class=\"strong big\">is saved and will be "
-"posted once you log in.</span>"
-#: templates/authopenid/signin.html:35
+#: forum/skins/default/templates/authopenid/signin.html:35
#, python-format
msgid ""
"Your question \n"
" %(title)s %(summary)s will be posted once you log in\n"
" "
msgstr ""
-"<span class=\"strong big\">Your question</span> <i>\"<strong>%(title)s</"
-"strong> %(summary)s...\"</i> <span class=\"strong big\">is saved and will be "
-"posted once you log in.</span>"
-#: templates/authopenid/signin.html:42
+#: forum/skins/default/templates/authopenid/signin.html:42
msgid "Click to sign in through any of these services."
msgstr ""
-"<p><span class=\"big strong\">Please select your favorite login method below."
-"</span></p><p><font color=\"gray\">External login services use <a href="
-"\"http://openid.net\"><b>OpenID</b></a> technology, where your password "
-"always stays confidential between you and your login provider and you don't "
-"have to remember another one. CNPROG option requires your login name and "
-"password entered here.</font></p>"
-#: templates/authopenid/signin.html:128
+#: forum/skins/default/templates/authopenid/signin.html:128
msgid "Enter your <span id=\"enter_your_what\">Provider user name</span>"
msgstr ""
-"<span class=\"big strong\">Enter your </span><span id=\"enter_your_what\" "
-"class='big strong'>Provider user name</span><br/><span class='grey'>(or "
-"select another login method above)</span>"
-#: templates/authopenid/signin.html:135
+#: forum/skins/default/templates/authopenid/signin.html:135
msgid ""
"Enter your <a class=\"openid_logo\" href=\"http://openid.net\">OpenID</a> "
"web address"
msgstr ""
-"<span class=\"big strong\">Enter your <a class=\"openid_logo\" href=\"http://"
-"openid.net\">OpenID</a> web address</span><br/><span class='grey'>(or choose "
-"another login method above)</span>"
-#: templates/authopenid/signin.html:137 templates/authopenid/signin.html:149
+#: forum/skins/default/templates/authopenid/signin.html:137
+#: forum/skins/default/templates/authopenid/signin.html:149
msgid "Login"
msgstr ""
-#: templates/authopenid/signin.html:140
+#: forum/skins/default/templates/authopenid/signin.html:140
msgid "Enter your login name and password"
msgstr ""
-"<span class='big strong'>Enter your CNPROG login and password</span><br/"
-"><span class='grey'>(or select your OpenID provider above)</span>"
-#: templates/authopenid/signin.html:144
+#: forum/skins/default/templates/authopenid/signin.html:144
msgid "Login name"
msgstr ""
-#: templates/authopenid/signin.html:146
+#: forum/skins/default/templates/authopenid/signin.html:146
msgid "Password"
msgstr ""
-#: templates/authopenid/signin.html:150
+#: forum/skins/default/templates/authopenid/signin.html:150
msgid "Create account"
msgstr ""
-#: templates/authopenid/signin.html:160
+#: forum/skins/default/templates/authopenid/signin.html:160
msgid "Why use OpenID?"
msgstr ""
-#: templates/authopenid/signin.html:163
+#: forum/skins/default/templates/authopenid/signin.html:163
msgid "with openid it is easier"
-msgstr "With the OpenID you don't need to create new username and password."
+msgstr ""
-#: templates/authopenid/signin.html:166
+#: forum/skins/default/templates/authopenid/signin.html:166
msgid "reuse openid"
-msgstr "You can safely re-use the same login for all OpenID-enabled websites."
+msgstr ""
-#: templates/authopenid/signin.html:169
+#: forum/skins/default/templates/authopenid/signin.html:169
msgid "openid is widely adopted"
msgstr ""
-"There are > 160,000,000 OpenID account in use. Over 10,000 sites are OpenID-"
-"enabled."
-#: templates/authopenid/signin.html:172
+#: forum/skins/default/templates/authopenid/signin.html:172
msgid "openid is supported open standard"
-msgstr "OpenID is based on an open standard, supported by many organizations."
+msgstr ""
-#: templates/authopenid/signin.html:177
+#: forum/skins/default/templates/authopenid/signin.html:177
msgid "Find out more"
msgstr ""
-#: templates/authopenid/signin.html:178
+#: forum/skins/default/templates/authopenid/signin.html:178
msgid "Get OpenID"
msgstr ""
-#: templates/authopenid/signup.html:4
+#: forum/skins/default/templates/authopenid/signup.html:4
msgid "Signup"
msgstr ""
-#: templates/authopenid/signup.html:8
+#: forum/skins/default/templates/authopenid/signup.html:8
msgid "Create login name and password"
msgstr ""
-#: templates/authopenid/signup.html:10
+#: forum/skins/default/templates/authopenid/signup.html:10
msgid "Traditional signup info"
msgstr ""
-"<span class='strong big'>If you prefer, create your forum login name and "
-"password here. However</span>, please keep in mind that we also support "
-"<strong>OpenID</strong> login method. With <strong>OpenID</strong> you can "
-"simply reuse your external login (e.g. Gmail or AOL) without ever sharing "
-"your login details with anyone and having to remember yet another password."
-#: templates/authopenid/signup.html:19
-msgid ""
-"Please select your preferred email update schedule for the following groups "
-"of questions:"
-msgstr ""
-
-#: templates/authopenid/signup.html:23
+#: forum/skins/default/templates/authopenid/signup.html:25
msgid ""
"Please read and type in the two words below to help us prevent automated "
"account creation."
msgstr ""
-#: templates/authopenid/signup.html:25
+#: forum/skins/default/templates/authopenid/signup.html:27
msgid "Create Account"
msgstr ""
-#: templates/authopenid/signup.html:27
+#: forum/skins/default/templates/authopenid/signup.html:29
msgid "return to OpenID login"
msgstr ""
-#: templates/fbconnect/xd_receiver.html:5
+#: forum/skins/default/templates/fbconnect/xd_receiver.html:5
#, python-format
msgid "Connect to %(APP_SHORT_NAME)s with Facebook!"
msgstr ""
+#: forum/templatetags/extra_tags.py:166 forum/templatetags/extra_tags.py:193
+msgid "reputation points"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:253
+msgid "2 days ago"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:255
+msgid "yesterday"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:257
+#, python-format
+msgid "%(hr)d hour ago"
+msgid_plural "%(hr)d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: forum/templatetags/extra_tags.py:259
+#, python-format
+msgid "%(min)d min ago"
+msgid_plural "%(min)d mins ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: forum/views/users.py:876
+msgid "user profile"
+msgstr ""
+
+#: forum/views/users.py:877
+msgid "user profile overview"
+msgstr ""
+
+#: forum/views/users.py:884
+msgid "recent user activity"
+msgstr ""
+
+#: forum/views/users.py:885
+msgid "profile - recent activity"
+msgstr ""
+
+#: forum/views/users.py:894
+msgid "profile - responses"
+msgstr ""
+
+#: forum/views/users.py:902
+msgid "user reputation in the community"
+msgstr ""
+
+#: forum/views/users.py:903
+msgid "profile - user reputation"
+msgstr ""
+
+#: forum/views/users.py:909
+msgid "favorite questions"
+msgstr ""
+
+#: forum/views/users.py:910
+msgid "users favorite questions"
+msgstr ""
+
+#: forum/views/users.py:911
+msgid "profile - favorite questions"
+msgstr ""
+
+#: forum/views/users.py:920
+msgid "profile - votes"
+msgstr ""
+
+#: forum/views/users.py:929
+msgid "profile - email subscriptions"
+msgstr ""
+
+#: middleware/anon_user.py:33
+#, python-format
+msgid "first time greeting with %(url)s"
+msgstr ""
+
+#: templates/unanswered.html:114
+#, python-format
+msgid "have %(num_q)s unanswered questions"
+msgstr ""
+
#: utils/forms.py:27
msgid "this field is required"
msgstr ""
#: utils/forms.py:42
msgid "choose a username"
-msgstr "Choose screen name"
+msgstr ""
#: utils/forms.py:47
msgid "user name is required"
@@ -3441,7 +3423,7 @@ msgstr ""
#: utils/forms.py:100
msgid "your email address"
-msgstr "Your email <i>(never shared)</i>"
+msgstr ""
#: utils/forms.py:101
msgid "email address is required"
@@ -3457,7 +3439,7 @@ msgstr ""
#: utils/forms.py:128
msgid "choose password"
-msgstr "Password"
+msgstr ""
#: utils/forms.py:129
msgid "password is required"
@@ -3465,7 +3447,7 @@ msgstr ""
#: utils/forms.py:132
msgid "retype password"
-msgstr "Password <i>(please retype)</i>"
+msgstr ""
#: utils/forms.py:133
msgid "please, retype your password"
@@ -3474,23 +3456,3 @@ msgstr ""
#: utils/forms.py:134
msgid "sorry, entered passwords did not match, please try again"
msgstr ""
-
-#~ msgid "have %(num_q)s unanswered questions"
-#~ msgstr ""
-#~ "<div class=\"questions-count\">%(num_q)s</div>questions <strong>without "
-#~ "accepted answers</strong>"
-
-#~ msgid ""
-#~ "\n"
-#~ "\t\t\t\thave total %(q_num)s questions\n"
-#~ "\t\t\t\t"
-#~ msgid_plural ""
-#~ "\n"
-#~ "\t\t\t\thave total %(q_num)s questions\n"
-#~ "\t\t\t\t"
-#~ msgstr[0] ""
-#~ "\n"
-#~ "<div class=\"questions-count\">%(q_num)s</div><p>question</p>"
-#~ msgstr[1] ""
-#~ "\n"
-#~ "<div class=\"questions-count\">%(q_num)s</div><p>questions</p>"
diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo
index fc7ebe14..2b514069 100644
--- a/locale/es/LC_MESSAGES/django.mo
+++ b/locale/es/LC_MESSAGES/django.mo
Binary files differ
diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po
index b528fcf2..83ff69bf 100644
--- a/locale/es/LC_MESSAGES/django.po
+++ b/locale/es/LC_MESSAGES/django.po
@@ -1,1179 +1,1453 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: \n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-12 15:53+0000\n"
-"PO-Revision-Date: \n"
-"Last-Translator: Bruno Sarlo <bsarlo@gmail.com>\n"
+"POT-Creation-Date: 2010-02-09 20:10+0000\n"
+"PO-Revision-Date: 2010-02-09 14:11-0600\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: settings.py:12 urls.py:25 forum/views.py:304 forum/views.py:698
-msgid "account/"
-msgstr "cuenta/"
-
-#: settings.py:12 urls.py:26 django_authopenid/urls.py:9
-#: django_authopenid/urls.py:10 django_authopenid/urls.py:11
-#: django_authopenid/urls.py:13 forum/views.py:304 forum/views.py:699
-#: templates/authopenid/confirm_email.txt:10
-msgid "signin/"
-msgstr "ingresar/"
-
-#: urls.py:22
-msgid "upfiles/"
-msgstr "archivossubidos/"
-
-#: urls.py:27 urls.py:28 urls.py:29 django_authopenid/urls.py:26
-#: django_authopenid/urls.py:27
-msgid "email/"
-msgstr "email/"
-
-#: urls.py:27
-msgid "change/"
-msgstr "cambiar/"
-
-#: urls.py:28
-msgid "sendkey/"
-msgstr "enviarclave/"
-
-#: urls.py:29
-msgid "verify/"
-msgstr "verificar/"
-
-#: urls.py:30
-msgid "about/"
-msgstr "acercadenosotros/"
-
-#: urls.py:31
-msgid "faq/"
-msgstr "preguntasfrecuentes/"
-
-#: urls.py:32
-msgid "privacy/"
-msgstr "códigodeprivacidad/"
-
-#: urls.py:33
-msgid "logout/"
-msgstr "cerrarsesion/"
-
-#: urls.py:34 urls.py:35 urls.py:36 urls.py:48 forum/models.py:418
-msgid "answers/"
-msgstr "respuestas/"
-
-#: urls.py:34 urls.py:46
-msgid "comments/"
-msgstr "comentarios/"
-
-#: urls.py:35 urls.py:40 urls.py:54 templates/user_info.html:34
-msgid "edit/"
-msgstr "editar/"
-
-#: urls.py:36 urls.py:45
-msgid "revisions/"
-msgstr "revisiones/"
-
-#: urls.py:37 urls.py:38 urls.py:39 urls.py:40 urls.py:41 urls.py:42
-#: urls.py:43 urls.py:44 urls.py:45 urls.py:46 urls.py:47 forum/feed.py:19
-#: forum/models.py:306 forum/views.py:1416
-msgid "questions/"
-msgstr "preguntas/"
-
-#: urls.py:38 urls.py:64
-msgid "ask/"
-msgstr "preguntar/"
+#: django_authopenid/forms.py:70
+msgid "choose a username"
+msgstr ""
-#: urls.py:39
-msgid "unanswered/"
-msgstr "sinrespuesta/"
+#: django_authopenid/forms.py:76
+msgid "user name is required"
+msgstr ""
-#: urls.py:41
-msgid "close/"
-msgstr "cerrar/"
+#: django_authopenid/forms.py:77
+msgid "sorry, this name is taken, please choose another"
+msgstr ""
-#: urls.py:42
-msgid "reopen/"
-msgstr "reabrir/"
+#: django_authopenid/forms.py:78
+msgid "sorry, this name is not allowed, please choose another"
+msgstr ""
-#: urls.py:43
-msgid "answer/"
-msgstr "respuesta/"
+#: django_authopenid/forms.py:79
+msgid "sorry, there is no user with this name"
+msgstr ""
-#: urls.py:44
-msgid "vote/"
-msgstr "votar/"
+#: django_authopenid/forms.py:80
+msgid "sorry, we have a serious error - user name is taken by several users"
+msgstr ""
-#: urls.py:47 urls.py:48 django_authopenid/urls.py:29
-msgid "delete/"
-msgstr "borrar/"
+#: django_authopenid/forms.py:81
+msgid "user name can only consist of letters, empty space and underscore"
+msgstr ""
-#: urls.py:50
-msgid "question/"
-msgstr "pregunta/"
+#: django_authopenid/forms.py:116
+msgid "your email address"
+msgstr ""
-#: urls.py:51 urls.py:52 forum/views.py:740 forum/views.py:2013
-msgid "tags/"
-msgstr "etiquetas/"
+#: django_authopenid/forms.py:117
+msgid "email address is required"
+msgstr ""
-#: urls.py:53 urls.py:54 urls.py:55 forum/views.py:993 forum/views.py:997
-#: forum/views.py:1418 forum/views.py:1751 forum/views.py:2015
-msgid "users/"
-msgstr "usuarios/"
+#: django_authopenid/forms.py:118
+msgid "please enter a valid email address"
+msgstr ""
-#: urls.py:56 urls.py:57
-msgid "badges/"
-msgstr "distinciones/"
+#: django_authopenid/forms.py:119
+msgid "this email is already used by someone else, please choose another"
+msgstr ""
-#: urls.py:58
-msgid "messages/"
-msgstr "mensajes/"
+#: django_authopenid/forms.py:163 django_authopenid/views.py:118
+msgid "i-names are not supported"
+msgstr ""
-#: urls.py:58
-msgid "markread/"
-msgstr "marcarleido/"
+#: django_authopenid/forms.py:219
+msgid "Account with this name already exists on the forum"
+msgstr ""
-#: urls.py:60
-msgid "nimda/"
-msgstr "administrador/"
+#: django_authopenid/forms.py:220
+msgid "can't have two logins to the same account yet, sorry."
+msgstr ""
-#: urls.py:62
-msgid "upload/"
-msgstr "subir/"
+#: django_authopenid/forms.py:242
+msgid "Please enter valid username and password (both are case-sensitive)."
+msgstr ""
-#: urls.py:63 urls.py:64 urls.py:65
-msgid "books/"
-msgstr "libros/"
+#: django_authopenid/forms.py:245 django_authopenid/forms.py:295
+msgid "This account is inactive."
+msgstr ""
-#: urls.py:66
-msgid "search/"
-msgstr "buscar/"
+#: django_authopenid/forms.py:247
+msgid "Login failed."
+msgstr ""
-#: django_authopenid/forms.py:67 django_authopenid/views.py:102
-msgid "i-names are not supported"
-msgstr "i-names no son soportados"
+#: django_authopenid/forms.py:249
+msgid "Please enter username and password"
+msgstr ""
-#: django_authopenid/forms.py:102
-msgid ""
-"Usernames can only contain letters, numbers and "
-"underscores"
+#: django_authopenid/forms.py:251
+msgid "Please enter your password"
msgstr ""
-"Los nombres de usuario solo pueden contener letras, números y guión bajo"
-#: django_authopenid/forms.py:109
-msgid ""
-"This username does not exist in our database. Please "
-"choose another."
+#: django_authopenid/forms.py:253
+msgid "Please enter user name"
msgstr ""
-"Este nombre de usuario no existe en nuestra base de datos. Por favor elija "
-"otro."
-#: django_authopenid/forms.py:126 django_authopenid/forms.py:233
+#: django_authopenid/forms.py:291
msgid ""
"Please enter a valid username and password. Note that "
"both fields are case-sensitive."
msgstr ""
-"Por favor ingrese un usuario y contraseña validos. Ambos campos son "
-"sensibles a mayúsculas y minúsculas."
-#: django_authopenid/forms.py:130 django_authopenid/forms.py:237
-msgid "This account is inactive."
-msgstr "Esta cuenta esta inactiva."
-
-#: django_authopenid/forms.py:158 django_authopenid/forms.py:210
-msgid "invalid user name"
-msgstr "nombre de usuario no valido"
-
-#: django_authopenid/forms.py:160
-msgid "sorry, this name can not be used, please try another"
+#: django_authopenid/forms.py:313
+msgid "choose password"
msgstr ""
-"perdón, pero este nombre de usuario no puede ser usado, intente con otro"
-#: django_authopenid/forms.py:162
-msgid "username too short"
-msgstr "nombre de usuario muy corto"
-
-#: django_authopenid/forms.py:170 django_authopenid/forms.py:171
-msgid "this name is already in use - please try anoter"
-msgstr "este nombre ya está tomado - por favor intente con otro"
+#: django_authopenid/forms.py:314
+msgid "password is required"
+msgstr ""
-#: django_authopenid/forms.py:185
-msgid ""
-"This email is already registered in our database. "
-"Please choose another."
+#: django_authopenid/forms.py:317
+msgid "retype password"
msgstr ""
-"Este email ya está registrado en nuestra base de datos. Por favor, intente "
-"con otro."
-#: django_authopenid/forms.py:216
-msgid ""
-"This username don't exist. Please choose another."
-msgstr "Este nombre de usuario no existe, por favor ingrese otro."
+#: django_authopenid/forms.py:318
+msgid "please, retype your password"
+msgstr ""
-#: django_authopenid/forms.py:255
-msgid "choose a username"
-msgstr "elija un nombre de usuario"
+#: django_authopenid/forms.py:319
+msgid "sorry, entered passwords did not match, please try again"
+msgstr ""
-#: django_authopenid/forms.py:257 templates/authopenid/signup.html:38
-msgid "your email address"
-msgstr "su email (correo electrónico)"
+#: django_authopenid/forms.py:344
+msgid "Current password"
+msgstr ""
-#: django_authopenid/forms.py:259 templates/authopenid/signup.html:39
-msgid "choose password"
-msgstr "elija una contraseña"
+#: django_authopenid/forms.py:346
+msgid "New password"
+msgstr ""
-#: django_authopenid/forms.py:261 templates/authopenid/signup.html:40
-msgid "retype password"
-msgstr "re-ingrese la contraseña"
+#: django_authopenid/forms.py:348
+msgid "Retype new password"
+msgstr ""
-#: django_authopenid/forms.py:335
+#: django_authopenid/forms.py:359
msgid ""
"Old password is incorrect. Please enter the correct "
"password."
-msgstr "La antigua contraseña es incorrecta. Por favor ingrese la correcta"
+msgstr ""
-#: django_authopenid/forms.py:347
+#: django_authopenid/forms.py:371
msgid "new passwords do not match"
-msgstr "la nueva contraseña no coincide"
+msgstr ""
-#: django_authopenid/forms.py:442
+#: django_authopenid/forms.py:435
+msgid "Your user name (<i>required</i>)"
+msgstr ""
+
+#: django_authopenid/forms.py:450
msgid "Incorrect username."
-msgstr "Nombre de usuario incorrecto"
+msgstr ""
-#: django_authopenid/urls.py:10 forum/views.py:304 forum/views.py:699
+#: django_authopenid/urls.py:9 django_authopenid/urls.py:10
+#: django_authopenid/urls.py:11 django_authopenid/urls.py:13 forum/urls.py:29
+msgid "signin/"
+msgstr ""
+
+#: django_authopenid/urls.py:10
msgid "newquestion/"
-msgstr "nuevapregunta/"
+msgstr ""
#: django_authopenid/urls.py:11
msgid "newanswer/"
-msgstr "respuesta-nueva/"
+msgstr ""
#: django_authopenid/urls.py:12
msgid "signout/"
-msgstr "salir/"
+msgstr ""
#: django_authopenid/urls.py:13
msgid "complete/"
-msgstr "completado/"
+msgstr ""
#: django_authopenid/urls.py:15
-msgid "register/"
-msgstr "registrarse/"
+msgid "external-login/"
+msgstr ""
#: django_authopenid/urls.py:16
+msgid "register/"
+msgstr ""
+
+#: django_authopenid/urls.py:17
msgid "signup/"
-msgstr "registrarse/"
+msgstr ""
-#: django_authopenid/urls.py:18
+#: django_authopenid/urls.py:19
msgid "sendpw/"
-msgstr "enviarcontrasena/"
+msgstr ""
-#: django_authopenid/urls.py:27
+#: django_authopenid/urls.py:20 django_authopenid/urls.py:24
+msgid "password/"
+msgstr ""
+
+#: django_authopenid/urls.py:20
+msgid "confirm/"
+msgstr ""
+
+#: django_authopenid/urls.py:23
+msgid "account_settings"
+msgstr ""
+
+#: django_authopenid/urls.py:25 django_authopenid/urls.py:26
+#: django_authopenid/urls.py:27 django_authopenid/urls.py:28
+msgid "email/"
+msgstr ""
+
+#: django_authopenid/urls.py:25
msgid "validate/"
msgstr ""
-#: django_authopenid/views.py:108
+#: django_authopenid/urls.py:26
+msgid "change/"
+msgstr ""
+
+#: django_authopenid/urls.py:27
+msgid "sendkey/"
+msgstr ""
+
+#: django_authopenid/urls.py:28
+msgid "verify/"
+msgstr ""
+
+#: django_authopenid/urls.py:29
+msgid "openid/"
+msgstr ""
+
+#: django_authopenid/urls.py:30 forum/urls.py:49 forum/urls.py:53
+msgid "delete/"
+msgstr ""
+
+#: django_authopenid/views.py:124
#, python-format
msgid "OpenID %(openid_url)s is invalid"
-msgstr "El OpenID %(openid_url)s no es valido"
+msgstr ""
-#: django_authopenid/views.py:418 django_authopenid/views.py:545
-msgid "Welcome"
-msgstr "Bienvenido"
+#: django_authopenid/views.py:532
+msgid "Welcome email subject line"
+msgstr ""
-#: django_authopenid/views.py:508
+#: django_authopenid/views.py:627
msgid "Password changed."
-msgstr "Contraseña modificada"
+msgstr ""
-#: django_authopenid/views.py:520 django_authopenid/views.py:525
-msgid "your email needs to be validated"
-msgstr "su correo electrónico necesita ser validado"
+#: django_authopenid/views.py:639 django_authopenid/views.py:645
+#, python-format
+msgid "your email needs to be validated see %(details_url)s"
+msgstr ""
+
+#: django_authopenid/views.py:666
+msgid "Email verification subject line"
+msgstr ""
+
+#: django_authopenid/views.py:752
+msgid "your email was not changed"
+msgstr ""
-#: django_authopenid/views.py:682 django_authopenid/views.py:834
+#: django_authopenid/views.py:799 django_authopenid/views.py:951
#, python-format
msgid "No OpenID %s found associated in our database"
-msgstr "El OpenID %s no esta asociada en nuestra base de datos"
+msgstr ""
-#: django_authopenid/views.py:686 django_authopenid/views.py:841
+#: django_authopenid/views.py:803 django_authopenid/views.py:958
#, python-format
msgid "The OpenID %s isn't associated to current user logged in"
-msgstr "El OpenID %s no esta asociada al usuario actualmente autenticado"
+msgstr ""
-#: django_authopenid/views.py:694
+#: django_authopenid/views.py:811
msgid "Email Changed."
-msgstr "Email modificado"
+msgstr ""
-#: django_authopenid/views.py:769
+#: django_authopenid/views.py:886
msgid "This OpenID is already associated with another account."
-msgstr "Este OpenID ya está asociada a otra cuenta."
+msgstr ""
-#: django_authopenid/views.py:774
+#: django_authopenid/views.py:891
#, python-format
msgid "OpenID %s is now associated with your account."
-msgstr "El OpenID %s está ahora asociada con tu cuenta."
+msgstr ""
-#: django_authopenid/views.py:844
+#: django_authopenid/views.py:961
msgid "Account deleted."
-msgstr "Cuenta borrada."
+msgstr ""
-#: django_authopenid/views.py:884
+#: django_authopenid/views.py:1004
msgid "Request for new password"
-msgstr "Pedir nueva contraseña"
+msgstr ""
-#: django_authopenid/views.py:897
-msgid "A new password has been sent to your email address."
-msgstr "Una nueva contraseña ha sido enviada a tu cuenta de Email."
+#: django_authopenid/views.py:1017
+msgid "A new password and the activation link were sent to your email address."
+msgstr ""
-#: django_authopenid/views.py:927
+#: django_authopenid/views.py:1047
#, python-format
msgid ""
"Could not change password. Confirmation key '%s' is not "
"registered."
msgstr ""
-"No se ha podido modificar la contraseña. La clave de confirmación '%s' no "
-"está registrada"
-#: django_authopenid/views.py:936
+#: django_authopenid/views.py:1056
msgid ""
"Can not change password. User don't exist anymore in our "
"database."
msgstr ""
-"No se puede cambiar la contraseña. El usuario no existe más en nuestra base "
-"de datos."
-#: django_authopenid/views.py:945
+#: django_authopenid/views.py:1065
#, python-format
msgid "Password changed for %s. You may now sign in."
-msgstr "Contraseña cambiada por %s. Ahora puedes ingresar."
+msgstr ""
+
+#: forum/auth.py:484
+msgid "Your question and all of it's answers have been deleted"
+msgstr ""
+
+#: forum/auth.py:486
+msgid "Your question has been deleted"
+msgstr ""
+
+#: forum/auth.py:489
+msgid "The question and all of it's answers have been deleted"
+msgstr ""
+
+#: forum/auth.py:491
+msgid "The question has been deleted"
+msgstr ""
#: forum/const.py:8
msgid "duplicate question"
-msgstr "pregunta duplicada"
+msgstr ""
#: forum/const.py:9
-msgid "question if off-topic or not relevant"
-msgstr "pregunta esta fuera de tema o no es relevante"
+msgid "question is off-topic or not relevant"
+msgstr ""
#: forum/const.py:10
msgid "too subjective and argumentative"
-msgstr "demasiado subjetiva o argumentativa"
+msgstr ""
#: forum/const.py:11
msgid "is not an answer to the question"
-msgstr "no es una respuesta a la pregunta"
+msgstr ""
#: forum/const.py:12
msgid "the question is answered, right answer was accepted"
-msgstr "la pregunta esta respondida, se ha aceptado la respuesta correcta"
+msgstr ""
#: forum/const.py:13
msgid "problem is not reproducible or outdated"
-msgstr "el problema no es reproducible o caducó"
+msgstr ""
#: forum/const.py:15
msgid "question contains offensive inappropriate, or malicious remarks"
-msgstr "la pregunta contiene frases ofensivas, inapropiadas o maliciosas."
+msgstr ""
#: forum/const.py:16
msgid "spam or advertising"
-msgstr "spam o publicidad"
+msgstr ""
-#: forum/const.py:56
+#: forum/const.py:57
msgid "question"
-msgstr "pregunta"
+msgstr ""
-#: forum/const.py:57 templates/book.html:110
+#: forum/const.py:58 templates/book.html:110
msgid "answer"
-msgstr "respuesta"
+msgstr ""
-#: forum/const.py:58
+#: forum/const.py:59
msgid "commented question"
-msgstr "pregunta comentada"
+msgstr ""
-#: forum/const.py:59
+#: forum/const.py:60
msgid "commented answer"
-msgstr "respuesta comentada"
+msgstr ""
-#: forum/const.py:60
+#: forum/const.py:61
msgid "edited question"
-msgstr "pregunta editada"
+msgstr ""
-#: forum/const.py:61
+#: forum/const.py:62
msgid "edited answer"
-msgstr "respuesta editada"
+msgstr ""
-#: forum/const.py:62
+#: forum/const.py:63
msgid "received award"
-msgstr "premio recibido"
+msgstr ""
-#: forum/const.py:63
+#: forum/const.py:64
msgid "marked best answer"
-msgstr "marcada como mejor respuesta"
+msgstr ""
-#: forum/const.py:64
+#: forum/const.py:65
msgid "upvoted"
-msgstr "votada positivo"
+msgstr ""
-#: forum/const.py:65
+#: forum/const.py:66
msgid "downvoted"
-msgstr "votada negativo"
+msgstr ""
-#: forum/const.py:66
+#: forum/const.py:67
msgid "canceled vote"
-msgstr "voto cancelado"
+msgstr ""
-#: forum/const.py:67
+#: forum/const.py:68
msgid "deleted question"
-msgstr "pregunta borrada"
+msgstr ""
-#: forum/const.py:68
+#: forum/const.py:69
msgid "deleted answer"
-msgstr "respuesta borrada"
+msgstr ""
-#: forum/const.py:69
+#: forum/const.py:70
msgid "marked offensive"
-msgstr "marcada como ofensiva"
+msgstr ""
-#: forum/const.py:70
+#: forum/const.py:71
msgid "updated tags"
-msgstr "etiquetas actualizadas"
+msgstr ""
-#: forum/const.py:71
+#: forum/const.py:72
msgid "selected favorite"
-msgstr "seleccionada como favorita"
+msgstr ""
-#: forum/const.py:72
+#: forum/const.py:73
msgid "completed user profile"
-msgstr "completó perfil de usuario"
+msgstr ""
-#: forum/const.py:83
+#: forum/const.py:74
+msgid "email update sent to user"
+msgstr ""
+
+#: forum/const.py:85
msgid "[closed]"
-msgstr "[cerrada]"
+msgstr ""
-#: forum/const.py:84
+#: forum/const.py:86
msgid "[deleted]"
-msgstr "[borrada]"
+msgstr ""
-#: forum/const.py:85
+#: forum/const.py:87 forum/views.py:777 forum/views.py:796
msgid "initial version"
-msgstr "versión inicial"
+msgstr ""
-#: forum/const.py:86
+#: forum/const.py:88
msgid "retagged"
-msgstr "re-etiquetada"
+msgstr ""
+
+#: forum/const.py:92
+msgid "exclude ignored tags"
+msgstr ""
+
+#: forum/const.py:92
+msgid "allow only selected tags"
+msgstr ""
#: forum/feed.py:18
msgid " - "
-msgstr " - "
+msgstr ""
#: forum/feed.py:18
msgid "latest questions"
-msgstr "últimas preguntas"
+msgstr ""
-#: forum/forms.py:14 templates/answer_edit_tips.html:33
-#: templates/answer_edit_tips.html.py:37 templates/question_edit_tips.html:31
-#: templates/question_edit_tips.html:36
+#: forum/feed.py:19 forum/urls.py:57
+msgid "question/"
+msgstr ""
+
+#: forum/forms.py:16 templates/answer_edit_tips.html:35
+#: templates/answer_edit_tips.html.py:39 templates/question_edit_tips.html:32
+#: templates/question_edit_tips.html:37
msgid "title"
-msgstr "título"
+msgstr ""
-#: forum/forms.py:15
+#: forum/forms.py:17
msgid "please enter a descriptive title for your question"
-msgstr "ingrese un título descriptivo para su pregunta"
+msgstr ""
-#: forum/forms.py:20
+#: forum/forms.py:22
msgid "title must be > 10 characters"
-msgstr "el título debe tener al menos 10 caracteres"
+msgstr ""
-#: forum/forms.py:29
+#: forum/forms.py:31
msgid "content"
-msgstr "contenido"
+msgstr ""
-#: forum/forms.py:35
+#: forum/forms.py:37
msgid "question content must be > 10 characters"
-msgstr "el contenido de la pregunta debe ser al menos de 10 caracteres"
+msgstr ""
-#: forum/forms.py:45 templates/header.html:30 templates/header.html.py:64
+#: forum/forms.py:47 templates/header.html:28 templates/header.html.py:62
msgid "tags"
-msgstr "etiquetas"
+msgstr ""
-#: forum/forms.py:47
+#: forum/forms.py:49
msgid ""
"Tags are short keywords, with no spaces within. Up to five tags can be used."
msgstr ""
-"por favor utilice espacio para separar las etiquetas (esto habilitael auto-"
-"completado)"
-#: forum/forms.py:54 templates/question_retag.html:38
+#: forum/forms.py:56 templates/question_retag.html:39
msgid "tags are required"
-msgstr "las etiquetas son requeridas"
+msgstr ""
-#: forum/forms.py:58
+#: forum/forms.py:62
msgid "please use 5 tags or less"
-msgstr "por favor use 5 o menos etiquetas"
+msgstr ""
-#: forum/forms.py:61
+#: forum/forms.py:65
msgid "tags must be shorter than 20 characters"
-msgstr "las etiquetas deben ser menores a 20 caracteres"
+msgstr ""
-#: forum/forms.py:65
+#: forum/forms.py:69
msgid ""
"please use following characters in tags: letters 'a-z', numbers, and "
"characters '.-_#'"
msgstr ""
-"por favor use solo los siguientes caracteres en los nombres de etiquetas: "
-"letras 'a-z', números y caracteres '.-_#'"
-#: forum/forms.py:75 templates/index.html:57 templates/question.html:209
-#: templates/question.html.py:395 templates/questions.html:58
-#: templates/questions.html.py:70 templates/unanswered.html:48
-#: templates/unanswered.html.py:60
+#: forum/forms.py:79 templates/index.html:62 templates/index.html.py:74
+#: templates/post_contributor_info.html:7
+#: templates/question_summary_list_roll.html:26
+#: templates/question_summary_list_roll.html:38 templates/questions.html:96
+#: templates/questions.html.py:108 templates/unanswered.html:51
+#: templates/unanswered.html.py:63
msgid "community wiki"
-msgstr "wiki de comunidad"
+msgstr ""
-#: forum/forms.py:76
+#: forum/forms.py:80
msgid ""
"if you choose community wiki option, the question and answer do not generate "
"points and name of author will not be shown"
msgstr ""
-"si marca la opción 'wiki de comunidad', la pregunta y respuestas no generan "
-"puntos y el nombre del autor no será mostrado"
-#: forum/forms.py:89
+#: forum/forms.py:96
msgid "update summary:"
-msgstr "resumen de modificación"
+msgstr ""
-#: forum/forms.py:90
+#: forum/forms.py:97
msgid ""
"enter a brief summary of your revision (e.g. fixed spelling, grammar, "
"improved style, this field is optional)"
msgstr ""
-"ingresa un breve resumen de tu revisión (ej. error ortográfico, gramática, "
-"mejoras de estilo. Este campo es opcional."
-#: forum/forms.py:175
+#: forum/forms.py:100
+msgid "Automatically accept user's contributions for the email updates"
+msgstr ""
+
+#: forum/forms.py:113
+msgid "Your name:"
+msgstr ""
+
+#: forum/forms.py:114
+msgid "Email (not shared with anyone):"
+msgstr ""
+
+#: forum/forms.py:115
+msgid "Your message:"
+msgstr ""
+
+#: forum/forms.py:198
msgid "this email does not have to be linked to gravatar"
-msgstr "este email no tiene porque estar asociado a un Gravatar"
+msgstr ""
-#: forum/forms.py:176
+#: forum/forms.py:199
+msgid "Screen name"
+msgstr ""
+
+#: forum/forms.py:200
msgid "Real name"
-msgstr "Nombre real"
+msgstr ""
-#: forum/forms.py:177
+#: forum/forms.py:201
msgid "Website"
-msgstr "Sitio Web"
+msgstr ""
-#: forum/forms.py:178
+#: forum/forms.py:202
msgid "Location"
-msgstr "Ubicación"
+msgstr ""
-#: forum/forms.py:179
+#: forum/forms.py:203
msgid "Date of birth"
-msgstr "Fecha de nacimiento"
+msgstr ""
-#: forum/forms.py:179
+#: forum/forms.py:203
msgid "will not be shown, used to calculate age, format: YYYY-MM-DD"
-msgstr "no será mostrado, usado para calcular la edad. Formato: YYY-MM-DD"
+msgstr ""
-#: forum/forms.py:180 templates/authopenid/settings.html:21
+#: forum/forms.py:204 templates/authopenid/settings.html:21
msgid "Profile"
-msgstr "Perfil"
+msgstr ""
-#: forum/forms.py:207 forum/forms.py:208
+#: forum/forms.py:232 forum/forms.py:233
msgid "this email has already been registered, please use another one"
-msgstr "este email ya ha sido registrado, por favor use otro"
+msgstr ""
+
+#: forum/forms.py:239
+msgid "Choose email tag filter"
+msgstr ""
+
+#: forum/forms.py:254 forum/forms.py:255
+msgid "weekly"
+msgstr ""
+
+#: forum/forms.py:254 forum/forms.py:255
+msgid "no email"
+msgstr ""
+
+#: forum/forms.py:255
+msgid "daily"
+msgstr ""
+
+#: forum/forms.py:270
+msgid "Asked by me"
+msgstr ""
+
+#: forum/forms.py:273
+msgid "Answered by me"
+msgstr ""
+
+#: forum/forms.py:276
+msgid "Individually selected"
+msgstr ""
+
+#: forum/forms.py:279
+msgid "Entire forum (tag filtered)"
+msgstr ""
+
+#: forum/models.py:52
+msgid "Entire forum"
+msgstr ""
+
+#: forum/models.py:53
+msgid "Questions that I asked"
+msgstr ""
+
+#: forum/models.py:54
+msgid "Questions that I answered"
+msgstr ""
-#: forum/models.py:246
+#: forum/models.py:55
+msgid "Individually selected questions"
+msgstr ""
+
+#: forum/models.py:58
+msgid "Weekly"
+msgstr ""
+
+#: forum/models.py:59
+msgid "Daily"
+msgstr ""
+
+#: forum/models.py:60
+msgid "No email"
+msgstr ""
+
+#: forum/models.py:321
+#, python-format
msgid "%(author)s modified the question"
-msgstr "%(author)s modificó la pregunta"
+msgstr ""
-#: forum/models.py:250
+#: forum/models.py:325
#, python-format
msgid "%(people)s posted %(new_answer_count)s new answers"
-msgstr "%(people)s publicaron %(new_answer_count)s nuevas respuestas"
+msgstr ""
-#: forum/models.py:255
+#: forum/models.py:330
#, python-format
msgid "%(people)s commented the question"
-msgstr "%(people)s comentarion la pregunta"
+msgstr ""
-#: forum/models.py:260
+#: forum/models.py:335
#, python-format
msgid "%(people)s commented answers"
-msgstr "%(people)s comentaron la respuesta"
+msgstr ""
-#: forum/models.py:262
+#: forum/models.py:337
#, python-format
msgid "%(people)s commented an answer"
-msgstr "%(people)s comentaron la respuesta"
+msgstr ""
-#: forum/models.py:306 forum/models.py:418
-msgid "revisions"
-msgstr "revisiones/"
+#: forum/models.py:368
+msgid "interesting"
+msgstr ""
+
+#: forum/models.py:368
+msgid "ignored"
+msgstr ""
-#: forum/models.py:441 templates/badges.html:51
+#: forum/models.py:538 templates/badges.html:53
msgid "gold"
-msgstr "oro"
+msgstr ""
-#: forum/models.py:442 templates/badges.html:59
+#: forum/models.py:539 templates/badges.html:61
msgid "silver"
-msgstr "plata"
+msgstr ""
-#: forum/models.py:443 templates/badges.html:66
+#: forum/models.py:540 templates/badges.html:68
msgid "bronze"
-msgstr "bronce"
+msgstr ""
+
+#: forum/urls.py:26
+msgid "upfiles/"
+msgstr ""
+
+#: forum/urls.py:30
+msgid "about/"
+msgstr ""
+
+#: forum/urls.py:31
+msgid "faq/"
+msgstr ""
+
+#: forum/urls.py:32
+msgid "privacy/"
+msgstr ""
+
+#: forum/urls.py:33
+msgid "logout/"
+msgstr ""
+
+#: forum/urls.py:34 forum/urls.py:35 forum/urls.py:36 forum/urls.py:53
+msgid "answers/"
+msgstr ""
+
+#: forum/urls.py:34 forum/urls.py:46 forum/urls.py:49 forum/urls.py:53
+msgid "comments/"
+msgstr ""
+
+#: forum/urls.py:35 forum/urls.py:40 forum/urls.py:75
+#: templates/user_info.html:45
+msgid "edit/"
+msgstr ""
+
+#: forum/urls.py:36 forum/urls.py:45
+msgid "revisions/"
+msgstr ""
+
+#: forum/urls.py:37 forum/urls.py:38 forum/urls.py:39 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:49
+msgid "questions/"
+msgstr ""
+
+#: forum/urls.py:38 forum/urls.py:85
+msgid "ask/"
+msgstr ""
+
+#: forum/urls.py:39
+msgid "unanswered/"
+msgstr ""
+
+#: forum/urls.py:41
+msgid "close/"
+msgstr ""
+
+#: forum/urls.py:42
+msgid "reopen/"
+msgstr ""
+
+#: forum/urls.py:43
+msgid "answer/"
+msgstr ""
+
+#: forum/urls.py:44
+msgid "vote/"
+msgstr ""
+
+#: forum/urls.py:47
+msgid "command/"
+msgstr ""
+
+#: forum/urls.py:58 forum/urls.py:59
+msgid "tags/"
+msgstr ""
+
+#: forum/urls.py:61 forum/urls.py:65
+msgid "mark-tag/"
+msgstr ""
+
+#: forum/urls.py:61
+msgid "interesting/"
+msgstr ""
+
+#: forum/urls.py:65
+msgid "ignored/"
+msgstr ""
+
+#: forum/urls.py:69
+msgid "unmark-tag/"
+msgstr ""
+
+#: forum/urls.py:73 forum/urls.py:75 forum/urls.py:76
+msgid "users/"
+msgstr ""
+
+#: forum/urls.py:74
+msgid "moderate-user/"
+msgstr ""
+
+#: forum/urls.py:77 forum/urls.py:78
+msgid "badges/"
+msgstr ""
+
+#: forum/urls.py:79
+msgid "messages/"
+msgstr ""
+
+#: forum/urls.py:79
+msgid "markread/"
+msgstr ""
+
+#: forum/urls.py:81
+msgid "nimda/"
+msgstr ""
+
+#: forum/urls.py:83
+msgid "upload/"
+msgstr ""
+
+#: forum/urls.py:84 forum/urls.py:85 forum/urls.py:86
+msgid "books/"
+msgstr ""
+
+#: forum/urls.py:87
+msgid "search/"
+msgstr ""
+
+#: forum/urls.py:88
+msgid "feedback/"
+msgstr ""
+
+#: forum/urls.py:89
+msgid "account/"
+msgstr ""
#: forum/user.py:16 templates/user_tabs.html:7
msgid "overview"
-msgstr "vista general"
+msgstr ""
#: forum/user.py:17
msgid "user profile"
-msgstr "perfil de usuario"
+msgstr ""
#: forum/user.py:18
msgid "user profile overview"
-msgstr "vista general del perfil de usuario"
+msgstr ""
#: forum/user.py:24 templates/user_tabs.html:9
msgid "recent activity"
-msgstr "actividades recientes"
+msgstr ""
#: forum/user.py:25
msgid "recent user activity"
-msgstr "actividades recientes del usuario"
+msgstr ""
#: forum/user.py:26
msgid "profile - recent activity"
-msgstr "perfil - actividades recientes"
+msgstr ""
#: forum/user.py:33 templates/user_tabs.html:13
msgid "responses"
-msgstr "respuestas"
+msgstr ""
#: forum/user.py:34 templates/user_tabs.html:12
msgid "comments and answers to others questions"
-msgstr "comentarios y respuestas a preguntas de otros"
+msgstr ""
#: forum/user.py:35
msgid "profile - responses"
-msgstr "perfil - respuestas"
+msgstr ""
-#: forum/user.py:42 templates/user_info.html:23 templates/users.html:26
+#: forum/user.py:42 templates/users.html:26
msgid "reputation"
-msgstr "reputación"
+msgstr ""
#: forum/user.py:43
msgid "user reputation in the community"
-msgstr "reputación del usuario en la comunidad"
+msgstr ""
#: forum/user.py:44
msgid "profile - user reputation"
-msgstr "perfil - reputación del usuario"
+msgstr ""
#: forum/user.py:50
msgid "favorite questions"
-msgstr "preguntas favoritas"
+msgstr ""
#: forum/user.py:51
msgid "users favorite questions"
-msgstr "preguntas favoritas de los usuarios"
+msgstr ""
#: forum/user.py:52
msgid "profile - favorite questions"
-msgstr "perfil - preguntas favoritas"
+msgstr ""
#: forum/user.py:59 templates/user_tabs.html:20
msgid "casted votes"
-msgstr "votos"
+msgstr ""
#: forum/user.py:60 templates/user_tabs.html:20
msgid "user vote record"
-msgstr "historial de votación"
+msgstr ""
#: forum/user.py:61
msgid "profile - votes"
-msgstr "perfil - votos"
+msgstr ""
-#: forum/user.py:68
-msgid "preferences"
-msgstr "preferencias"
+#: forum/user.py:68 templates/user_tabs.html:28
+msgid "email subscriptions"
+msgstr ""
#: forum/user.py:69 templates/user_tabs.html:27
-msgid "user preference settings"
-msgstr "preferencias del usuario"
+msgid "email subscription settings"
+msgstr ""
#: forum/user.py:70
-msgid "profile - user preferences"
-msgstr "perfil - preferencia de "
+msgid "profile - email subscriptions"
+msgstr ""
+
+#: forum/views.py:141
+msgid "Q&A forum feedback"
+msgstr ""
+
+#: forum/views.py:142
+msgid "Thanks for the feedback!"
+msgstr ""
-#: forum/views.py:947
+#: forum/views.py:150
+msgid "We look forward to hearing your feedback! Please, give it next time :)"
+msgstr ""
+
+#: forum/views.py:1080
#, python-format
-msgid "subscription saved, %(email)s needs validation"
-msgstr "subscripción guardada, %(email)s necesita validación"
+msgid "subscription saved, %(email)s needs validation, see %(details_url)s"
+msgstr ""
+
+#: forum/views.py:1088
+msgid "email update frequency has been set to daily"
+msgstr ""
+
+#: forum/views.py:1965 forum/views.py:1969
+msgid "changes saved"
+msgstr ""
+
+#: forum/views.py:1975
+msgid "email updates canceled"
+msgstr ""
-#: forum/views.py:1860
+#: forum/views.py:2142
msgid "uploading images is limited to users with >60 reputation points"
-msgstr "para subir imagenes debes tener más de 60 puntos de reputación"
+msgstr ""
-#: forum/views.py:1862
+#: forum/views.py:2144
msgid "allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"
msgstr ""
-"los tipos de archivos permitidos son 'jpg', 'jpeg', 'gif', 'bmp', 'png', "
-"'tiff'"
-#: forum/views.py:1864
+#: forum/views.py:2146
#, python-format
msgid "maximum upload file size is %sK"
-msgstr "tamaño máximo permitido es archivo %sK"
+msgstr ""
-#: forum/views.py:1866
+#: forum/views.py:2148
#, python-format
msgid ""
"Error uploading file. Please contact the site administrator. Thank you. %s"
msgstr ""
-"Error al subir el archivo. Por favor, contacte al administrador. Gracias. %s"
-#: forum/management/commands/send_email_alerts.py:35
-msgid "updates from website"
-msgstr "actualizaciones del sitio"
+#: forum/management/commands/send_email_alerts.py:233
+msgid "email update message subject"
+msgstr ""
+
+#: forum/management/commands/send_email_alerts.py:234
+#, python-format
+msgid "%(name)s, this is an update message header for a question"
+msgid_plural "%(name)s, this is an update message header for %(num)d questions"
+msgstr[0] ""
+msgstr[1] ""
+
+#: forum/management/commands/send_email_alerts.py:243
+#: forum/management/commands/send_email_alerts.py:258
+msgid "new question"
+msgstr ""
+
+#: forum/management/commands/send_email_alerts.py:268
+#, python-format
+msgid "There is also one question which was recently "
+msgid_plural ""
+"There are also %(num)d more questions which were recently updated "
+msgstr[0] ""
+msgstr[1] ""
+
+#: forum/management/commands/send_email_alerts.py:273
+msgid ""
+"Perhaps you could look up previously sent forum reminders in your mailbox."
+msgstr ""
+
+#: forum/management/commands/send_email_alerts.py:278
+#, python-format
+msgid ""
+"go to %(link)s to change frequency of email updates or %(email)s "
+"administrator"
+msgstr ""
-#: forum/templatetags/extra_tags.py:143 forum/templatetags/extra_tags.py:172
-#: templates/header.html:35
+#: forum/templatetags/extra_tags.py:163 forum/templatetags/extra_tags.py:192
+#: templates/header.html:33
msgid "badges"
-msgstr "distinciones"
+msgstr ""
-#: forum/templatetags/extra_tags.py:144 forum/templatetags/extra_tags.py:171
+#: forum/templatetags/extra_tags.py:164 forum/templatetags/extra_tags.py:191
msgid "reputation points"
-msgstr "puntos de reputación"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:247
+msgid "%b %d at %H:%M"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:249
+msgid "%b %d '%y at %H:%M"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:251
+msgid "2 days ago"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:253
+msgid "yesterday"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:255
+#, python-format
+msgid "%(hr)d hour ago"
+msgid_plural "%(hr)d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: forum/templatetags/extra_tags.py:257
+#, python-format
+msgid "%(min)d min ago"
+msgid_plural "%(min)d mins ago"
+msgstr[0] ""
+msgstr[1] ""
-#: forum/templatetags/extra_tags.py:225
-msgid " ago"
-msgstr " atras"
+#: middleware/anon_user.py:33
+#, python-format
+msgid "first time greeting with %(url)s"
+msgstr ""
#: templates/404.html:24
msgid "Sorry, could not find the page you requested."
-msgstr "Disculpe, no se pudo encontrar la página que solicito."
+msgstr ""
#: templates/404.html:26
msgid "This might have happened for the following reasons:"
-msgstr "Esto puede haber sucedido por alguno de los siguientes motivos:"
+msgstr ""
#: templates/404.html:28
msgid "this question or answer has been deleted;"
-msgstr "esta pregunta o respuesta ha sido borrada;"
+msgstr ""
#: templates/404.html:29
msgid "url has error - please check it;"
-msgstr "la url tiene un error - por favor compruebelo;"
+msgstr ""
#: templates/404.html:30
msgid ""
"the page you tried to visit is protected or you don't have sufficient "
"points, see"
msgstr ""
-"La pagina que intentas acceder esta protegida o no tienes los puntos de "
-"reputación suficientes, ver"
#: templates/404.html:31
msgid "if you believe this error 404 should not have occured, please"
-msgstr "si consideras que este error 404 no debería haber sucedido, por favor"
+msgstr ""
#: templates/404.html:32
msgid "report this problem"
-msgstr "reporta este problema"
+msgstr ""
#: templates/404.html:41 templates/500.html:27
msgid "back to previous page"
-msgstr "volver a la página siguiente"
+msgstr ""
#: templates/404.html:42
msgid "see all questions"
-msgstr "ver todas las preguntas"
+msgstr ""
#: templates/404.html:43
msgid "see all tags"
-msgstr "ver todas las tags"
+msgstr ""
#: templates/500.html:22
msgid "sorry, system error"
-msgstr "lo sentimos, ha habido un error del sistema"
+msgstr ""
#: templates/500.html:24
msgid "system error log is recorded, error will be fixed as soon as possible"
msgstr ""
-"el error del sistema ha sido registrado, y será solucionado lo antes postible"
#: templates/500.html:25
msgid "please report the error to the site administrators if you wish"
-msgstr "por favor reportar el error al administrador de ser posible"
+msgstr ""
#: templates/500.html:28
msgid "see latest questions"
-msgstr "ver ultimas preguntas"
+msgstr ""
#: templates/500.html:29
msgid "see tags"
-msgstr "ver tags"
+msgstr ""
#: templates/about.html:6 templates/about.html.py:11
msgid "About"
-msgstr "Acerca de"
+msgstr ""
-#: templates/answer_edit.html:4 templates/answer_edit.html.py:47
+#: templates/answer_edit.html:5 templates/answer_edit.html.py:48
msgid "Edit answer"
-msgstr "Editar respuesta"
+msgstr ""
-#: templates/answer_edit.html:24 templates/answer_edit.html.py:27
-#: templates/ask.html:25 templates/ask.html.py:28 templates/question.html:43
-#: templates/question.html.py:46 templates/question_edit.html:27
+#: templates/answer_edit.html:25 templates/answer_edit.html.py:28
+#: templates/ask.html:26 templates/ask.html.py:29 templates/question.html:45
+#: templates/question.html.py:48 templates/question_edit.html:25
+#: templates/question_edit.html.py:28
msgid "hide preview"
-msgstr "ocultar previsualización"
+msgstr ""
-#: templates/answer_edit.html:27 templates/ask.html:28
-#: templates/question.html:46 templates/question_edit.html:27
+#: templates/answer_edit.html:28 templates/ask.html:29
+#: templates/question.html:48 templates/question_edit.html:28
msgid "show preview"
-msgstr "ver previsualización"
+msgstr ""
-#: templates/answer_edit.html:47 templates/question_edit.html:65
-#: templates/question_retag.html:52 templates/revisions_answer.html:36
-#: templates/revisions_question.html:36
+#: templates/answer_edit.html:48 templates/question_edit.html:66
+#: templates/question_retag.html:53 templates/revisions_answer.html:38
+#: templates/revisions_question.html:38
msgid "back"
-msgstr "volver"
+msgstr ""
-#: templates/answer_edit.html:52 templates/question_edit.html:70
-#: templates/revisions_answer.html:47 templates/revisions_question.html:47
+#: templates/answer_edit.html:53 templates/question_edit.html:71
+#: templates/revisions_answer.html:52 templates/revisions_question.html:52
msgid "revision"
-msgstr "revisión"
+msgstr ""
-#: templates/answer_edit.html:55 templates/question_edit.html:74
+#: templates/answer_edit.html:56 templates/question_edit.html:75
msgid "select revision"
-msgstr "seleccionar revisión"
+msgstr ""
-#: templates/answer_edit.html:62 templates/ask.html:94
-#: templates/question.html:467 templates/question_edit.html:91
+#: templates/answer_edit.html:63 templates/ask.html:97
+#: templates/question.html:442 templates/question_edit.html:92
msgid "Toggle the real time Markdown editor preview"
-msgstr "Activar la visualización en tiempo real de Markdown"
+msgstr ""
-#: templates/answer_edit.html:62 templates/ask.html:94
-#: templates/question.html:467 templates/question_edit.html:91
+#: templates/answer_edit.html:63 templates/ask.html:97
+#: templates/question.html:443 templates/question_edit.html:92
msgid "toggle preview"
-msgstr "Activar previsualización"
+msgstr ""
-#: templates/answer_edit.html:71 templates/question_edit.html:115
-#: templates/question_retag.html:73
+#: templates/answer_edit.html:72 templates/question_edit.html:124
+#: templates/question_retag.html:74
msgid "Save edit"
-msgstr "Guardar la edición"
+msgstr ""
-#: templates/answer_edit.html:72 templates/close.html:29
-#: templates/question_edit.html:116 templates/question_retag.html:74
-#: templates/reopen.html:30 templates/user_edit.html:83
-#: templates/authopenid/changeemail.html:34
+#: templates/answer_edit.html:73 templates/close.html:29
+#: templates/feedback.html:50 templates/question_edit.html:125
+#: templates/question_retag.html:75 templates/reopen.html:30
+#: templates/user_edit.html:87 templates/authopenid/changeemail.html:40
msgid "Cancel"
-msgstr "Cancelar"
+msgstr ""
#: templates/answer_edit_tips.html:4
msgid "answer tips"
-msgstr "sugerencias sobre respuestas"
+msgstr ""
#: templates/answer_edit_tips.html:7
msgid "please make your answer relevant to this community"
-msgstr "por favor, haz que tu respuesta sea relevante a esta comunidad"
+msgstr ""
#: templates/answer_edit_tips.html:10
msgid "try to give an answer, rather than engage into a discussion"
-msgstr "intenta dar una respuesta, más que entablar un debate o discusión"
+msgstr ""
#: templates/answer_edit_tips.html:13
msgid "please try to provide details"
-msgstr "por favor, intenta brindar detalles"
+msgstr ""
#: templates/answer_edit_tips.html:16 templates/question_edit_tips.html:13
msgid "be clear and concise"
-msgstr "ser claro y conciso"
+msgstr ""
-#: templates/answer_edit_tips.html:19 templates/question_edit_tips.html:16
+#: templates/answer_edit_tips.html:20 templates/question_edit_tips.html:17
msgid "see frequently asked questions"
-msgstr "ver preguntas frecuentes"
+msgstr ""
-#: templates/answer_edit_tips.html:24 templates/question_edit_tips.html:22
+#: templates/answer_edit_tips.html:26 templates/question_edit_tips.html:23
msgid "Markdown tips"
-msgstr "sugerencias de Markdown"
+msgstr ""
-#: templates/answer_edit_tips.html:27 templates/question_edit_tips.html:25
+#: templates/answer_edit_tips.html:29 templates/question_edit_tips.html:26
msgid "*italic* or __italic__"
-msgstr "*itálica* o __itálica__"
+msgstr ""
-#: templates/answer_edit_tips.html:30 templates/question_edit_tips.html:28
+#: templates/answer_edit_tips.html:32 templates/question_edit_tips.html:29
msgid "**bold** or __bold__"
-msgstr "**negrita** o __negrita__"
+msgstr ""
-#: templates/answer_edit_tips.html:33 templates/question_edit_tips.html:31
+#: templates/answer_edit_tips.html:35 templates/question_edit_tips.html:32
msgid "link"
-msgstr "enlace"
+msgstr ""
-#: templates/answer_edit_tips.html:33 templates/answer_edit_tips.html.py:37
-#: templates/question_edit_tips.html:31 templates/question_edit_tips.html:36
+#: templates/answer_edit_tips.html:35 templates/answer_edit_tips.html.py:39
+#: templates/question_edit_tips.html:32 templates/question_edit_tips.html:37
msgid "text"
-msgstr "texto"
+msgstr ""
-#: templates/answer_edit_tips.html:37 templates/question_edit_tips.html:36
+#: templates/answer_edit_tips.html:39 templates/question_edit_tips.html:37
msgid "image"
-msgstr "imagen"
+msgstr ""
-#: templates/answer_edit_tips.html:41 templates/question_edit_tips.html:40
+#: templates/answer_edit_tips.html:43 templates/question_edit_tips.html:41
msgid "numbered list:"
-msgstr "lista numerada"
+msgstr ""
-#: templates/answer_edit_tips.html:46 templates/question_edit_tips.html:45
+#: templates/answer_edit_tips.html:48 templates/question_edit_tips.html:46
msgid "basic HTML tags are also supported"
-msgstr "etiquetas básicas de HTML permitidas"
+msgstr ""
-#: templates/answer_edit_tips.html:49 templates/question_edit_tips.html:48
+#: templates/answer_edit_tips.html:52 templates/question_edit_tips.html:50
msgid "learn more about Markdown"
-msgstr "aprender mas sobre Markdown"
+msgstr ""
-#: templates/ask.html:4 templates/ask.html.py:60
+#: templates/ask.html:5 templates/ask.html.py:61
msgid "Ask a question"
-msgstr "Hacer una pregunta"
+msgstr ""
-#: templates/ask.html:67
+#: templates/ask.html:68
msgid "login to post question info"
msgstr ""
-"<span class='strong big'>Puedes comenzar a realizar tu pregunta de forma "
-"anonima</span> - actualmente no te encuentras Ingresado. Cuando envíes tu "
-"pregunta, serás redireccionado a la página de Ingreso/registro. Tu pregunta "
-"será guardada temporalemente y será enviada cuando ingreses. El proceso de "
-"Ingreso/Registro es muy simple. Ingresar lleva unos 30 segundos, registrarse "
-"por primera vez lleva un minuto."
-#: templates/ask.html:73
+#: templates/ask.html:74
#, python-format
-msgid "must have valid %(email)s to post"
+msgid ""
+"must have valid %(email)s to post, \n"
+" see %(email_validation_faq_url)s\n"
+" "
msgstr ""
-"<span class='strong big'>Parece ser que tu dirección de email, %(email)s no "
-"ha sido validada aún.</span> Para enviar mensajes debes verificar tu "
-"dirección de email, puedes ver <a href='/faq#validate'>más detalles aquí</"
-"a>. <br/> Puedes enviar tu pregunta ahora y validar tu email luego. Tu "
-"pregunta será guardada mientras tanto y publicada cuando valides tu email."
-#: templates/ask.html:107
+#: templates/ask.html:112 templates/ask.html.py:119
+#: templates/question_edit.html:120
msgid "(required)"
-msgstr "(requerido)"
+msgstr ""
-#: templates/ask.html:114
+#: templates/ask.html:126
msgid "Login/signup to post your question"
-msgstr "Iniciar sesión/registrarse para publicar su pregunta"
+msgstr ""
-#: templates/ask.html:116
+#: templates/ask.html:128
msgid "Ask your question"
-msgstr "Haz tu pregunta"
+msgstr ""
#: templates/badge.html:6 templates/badge.html.py:17
msgid "Badge"
-msgstr "Distinción"
+msgstr ""
#: templates/badge.html:26
msgid "The users have been awarded with badges:"
-msgstr "Usuarios han sido galardonados con distinciones:"
+msgstr ""
#: templates/badges.html:6
msgid "Badges summary"
-msgstr "Resumen de distinciones"
+msgstr ""
-#: templates/badges.html:17 templates/user_stats.html:115
+#: templates/badges.html:17
msgid "Badges"
-msgstr "Distinciones"
+msgstr ""
#: templates/badges.html:21
msgid "Community gives you awards for your questions, answers and votes."
-msgstr "La comunidad te da distinciones por tus preguntas, respuestas y votos."
+msgstr ""
#: templates/badges.html:22
+#, python-format
msgid ""
-"Below is the list of available badges and number of times each type of badge "
-"has been awarded."
+"Below is the list of available badges and number \n"
+" of times each type of badge has been awarded. Give us feedback at %"
+"(feedback_faq_url)s.\n"
+" "
msgstr ""
-"Debajo esta la lista de las distinciones disponibles y la cantidad de veces "
-"que han sido asignadas."
-#: templates/badges.html:48
+#: templates/badges.html:50
msgid "Community badges"
-msgstr "Distinciones de la comunidad"
+msgstr ""
-#: templates/badges.html:54
+#: templates/badges.html:56
msgid "gold badge description"
msgstr ""
-"Las distinciones de Oro son excepcionales. Para obtenerla debes demostrar un "
-"profundo conocimiento y habilidad además de participar activamente en la "
-"comunidad. La distinción de Oro es la condecoración máxima en esta comunidad"
-#: templates/badges.html:62
+#: templates/badges.html:64
msgid "silver badge description"
msgstr ""
-"Obtener una distinción de Plata requiere de paciencia. Si has logrado una, "
-"quiere decir que haz significativamente aportado a esta comunidad."
-#: templates/badges.html:65
+#: templates/badges.html:67
msgid "bronze badge: often given as a special honor"
msgstr ""
-"distinción de bronce: con frecuencia entregada como reconocimiento especial."
-#: templates/badges.html:69
+#: templates/badges.html:71
msgid "bronze badge description"
msgstr ""
-"Si eres un usuario activo de esta comunidad, recibirás esta distinción - de "
-"todas maneras es un honor especial."
#: templates/book.html:7
msgid "reading channel"
-msgstr "canal de lectura"
+msgstr ""
#: templates/book.html:26
msgid "[author]"
-msgstr "[autor]"
+msgstr ""
#: templates/book.html:30
msgid "[publisher]"
-msgstr "[editorial]"
+msgstr ""
#: templates/book.html:34
msgid "[publication date]"
-msgstr "[fecha de publicación]"
+msgstr ""
#: templates/book.html:38
msgid "[price]"
-msgstr "[precio]"
+msgstr ""
#: templates/book.html:39
msgid "currency unit"
-msgstr "unidad de moneda"
+msgstr ""
#: templates/book.html:42
msgid "[pages]"
-msgstr "[páginas]"
+msgstr ""
#: templates/book.html:43
msgid "pages abbreviation"
-msgstr "abreviación de páginas"
+msgstr ""
#: templates/book.html:46
msgid "[tags]"
-msgstr "[etiquetas]"
+msgstr ""
#: templates/book.html:56
msgid "author blog"
-msgstr "blog del autor"
+msgstr ""
#: templates/book.html:62
msgid "book directory"
-msgstr "directorio del libro"
+msgstr ""
#: templates/book.html:66
msgid "buy online"
-msgstr "comprar en-linea"
+msgstr ""
#: templates/book.html:79
msgid "reader questions"
-msgstr "pregunta de lector"
+msgstr ""
#: templates/book.html:82
msgid "ask the author"
-msgstr "preguntar al autor"
+msgstr ""
#: templates/book.html:88 templates/book.html.py:93
-#: templates/users_questions.html:17
+#: templates/users_questions.html:18
msgid "this question was selected as favorite"
-msgstr "esta pregunta ha sido seleccionada como favorita"
+msgstr ""
#: templates/book.html:88 templates/book.html.py:93
-#: templates/users_questions.html:11 templates/users_questions.html.py:17
+#: templates/users_questions.html:11 templates/users_questions.html.py:18
msgid "number of times"
-msgstr "numero de veces"
+msgstr ""
-#: templates/book.html:105 templates/index.html:48 templates/questions.html:46
-#: templates/unanswered.html:37 templates/users_questions.html:30
+#: templates/book.html:105 templates/index.html:50
+#: templates/question_summary_list_roll.html:14 templates/questions.html:84
+#: templates/unanswered.html:39 templates/users_questions.html:32
msgid "votes"
-msgstr "votos"
+msgstr ""
#: templates/book.html:108
msgid "the answer has been accepted to be correct"
-msgstr "la respuesta ha sido aceptada como correcta"
+msgstr ""
-#: templates/book.html:115 templates/index.html:49 templates/questions.html:47
-#: templates/unanswered.html:38 templates/users_questions.html:40
+#: templates/book.html:115 templates/index.html:51
+#: templates/question_summary_list_roll.html:15 templates/questions.html:85
+#: templates/unanswered.html:40 templates/users_questions.html:40
msgid "views"
-msgstr "vistas"
+msgstr ""
-#: templates/book.html:125 templates/index.html:69 templates/question.html:499
-#: templates/questions.html:84 templates/questions.html.py:156
-#: templates/tags.html:49 templates/unanswered.html:75
-#: templates/unanswered.html.py:106 templates/users_questions.html:52
+#: templates/book.html:125 templates/index.html:106
+#: templates/question.html:488 templates/question_summary_list_roll.html:52
+#: templates/questions.html:140 templates/questions.html.py:257
+#: templates/tags.html:49 templates/unanswered.html:95
+#: templates/unanswered.html.py:122 templates/users_questions.html:52
msgid "using tags"
-msgstr "usando etiquetas"
+msgstr ""
#: templates/book.html:147
msgid "subscribe to book RSS feed"
-msgstr "suscribirse al RSS del libro"
+msgstr ""
-#: templates/book.html:147 templates/index.html:118
+#: templates/book.html:147 templates/index.html:157
msgid "subscribe to the questions feed"
-msgstr "suscribirse al agregado de noticias"
+msgstr ""
#: templates/close.html:6 templates/close.html.py:16
msgid "Close question"
-msgstr "Cerrar pregunta"
+msgstr ""
#: templates/close.html:19
msgid "Close the question"
-msgstr "Cerrar la pregunta"
+msgstr ""
#: templates/close.html:25
msgid "Reasons"
-msgstr "Razón"
+msgstr ""
#: templates/close.html:28
msgid "OK to close"
-msgstr "OK para cerrar"
+msgstr ""
#: templates/faq.html:11
msgid "Frequently Asked Questions "
-msgstr "Preguntas Frecuentes"
+msgstr ""
#: templates/faq.html:16
msgid "What kinds of questions can I ask here?"
-msgstr "¿Qué clase de preguntas puedo hacer aquí?"
+msgstr ""
#: templates/faq.html:17
msgid ""
"Most importanly - questions should be <strong>relevant</strong> to this "
"community."
msgstr ""
-"Por encima de todo - las preguntas deben ser <strong>relevantes</strong>a "
-"esta comunidad."
#: templates/faq.html:18
msgid ""
"Before asking the question - please make sure to use search to see whether "
"your question has alredy been answered."
msgstr ""
-"Antes de hacer tu pregunta - por favor usa el buscador para asegurarte que "
-"la pregunta no este ya hecha."
#: templates/faq.html:21
msgid "What questions should I avoid asking?"
-msgstr "¿Qué preguntas debería evitar preguntar?"
+msgstr ""
#: templates/faq.html:22
msgid ""
"Please avoid asking questions that are not relevant to this community, too "
"subjective and argumentative."
msgstr ""
-"Evita hacer preguntas que no son relevantes a la comunidad, demasiado "
-"subjetivas o argumentativas."
#: templates/faq.html:27
msgid "What should I avoid in my answers?"
-msgstr "¿Que debo evitar en mis respuestas?"
+msgstr ""
#: templates/faq.html:28
msgid ""
@@ -1181,42 +1455,32 @@ msgid ""
"discussions in your answers, comment facility allows some space for brief "
"discussions."
msgstr ""
-"es un sitio de Preguntas y Respuestas, no un grupo de discusión. Por ende, "
-"intenta evitar discusiones en tus respuestas. Los comentarios permiten "
-"realizar pequeñas discusiones."
#: templates/faq.html:32
msgid "Who moderates this community?"
-msgstr "¿Quién modera esta comunidad?"
+msgstr ""
#: templates/faq.html:33
msgid "The short answer is: <strong>you</strong>."
-msgstr "La respuesta corta es: <strong>tú</strong>"
+msgstr ""
#: templates/faq.html:34
msgid "This website is moderated by the users."
-msgstr "Este sitio es moderado por los usuarios."
+msgstr ""
#: templates/faq.html:35
msgid ""
"The reputation system allows users earn the authorization to perform a "
"variety of moderation tasks."
msgstr ""
-"El sistema de reputación permite a los usuarios adquirir autorización para "
-"realizar diversas tareas de moderación."
#: templates/faq.html:40
msgid "How does reputation system work?"
-msgstr "¿Cómo funciona el sistema de reputación?"
+msgstr ""
#: templates/faq.html:41
msgid "Rep system summary"
msgstr ""
-"Cuando una pregunta o respuesta es votada positivamente, el usuario que la "
-"realizo ganará algunos puntos, que llamamos \"puntos de reputación\". Estos "
-"puntos sirven a groso modo para medir la confianza que la comunidad le "
-"tiene. Diversas tareas de moderación son gradualmente asignadas a los "
-"usuarios basado en estos puntos de reputación."
#: templates/faq.html:42
msgid ""
@@ -1228,657 +1492,804 @@ msgid ""
"or answer. The table below explains reputation point requirements for each "
"type of moderation task."
msgstr ""
-"Por ejemplo, si haces una pregunta interesante o das una respuesta útil, tu "
-"adición será votada positivamente. Por otro lado, si la respuesta es fuera "
-"de lugar - será votada negativamente. Cada voto a favor genera <strong>10</"
-"strong> puntos, cada voto en contra restará <strong>2</strong> puntos. Hay "
-"un limite de <strong>200</strong> puntos que puedes acumular por pregunta o "
-"respuesta. La tabla debajo explica los puntos de reputación requeridos para "
-"cada tarea de moderación."
-#: templates/faq.html:53 templates/user_votes.html:14
+#: templates/faq.html:53 templates/user_votes.html:15
msgid "upvote"
-msgstr "votar positivo"
+msgstr ""
#: templates/faq.html:57
msgid "use tags"
-msgstr "etiquetas usadas"
+msgstr ""
#: templates/faq.html:62
msgid "add comments"
-msgstr "agregar comentarios"
+msgstr ""
-#: templates/faq.html:66 templates/user_votes.html:16
+#: templates/faq.html:66 templates/user_votes.html:17
msgid "downvote"
-msgstr "votar negativo"
+msgstr ""
#: templates/faq.html:69
msgid "open and close own questions"
-msgstr "abrir y cerrar sus propias preguntas"
+msgstr ""
#: templates/faq.html:73
msgid "retag questions"
-msgstr "re-etiquetar preguntas"
+msgstr ""
-#: templates/faq.html:77
+#: templates/faq.html:78
msgid "edit community wiki questions"
-msgstr "editar preguntas de la wiki comunitaria"
+msgstr ""
-#: templates/faq.html:81
+#: templates/faq.html:83
msgid "edit any answer"
-msgstr "editar cualquier pregunta"
+msgstr ""
-#: templates/faq.html:85
+#: templates/faq.html:87
msgid "open any closed question"
-msgstr "abrir cualquier pregunta cerrada"
+msgstr ""
-#: templates/faq.html:89
+#: templates/faq.html:91
msgid "delete any comment"
-msgstr "borrar cualquier comentario"
+msgstr ""
-#: templates/faq.html:93
+#: templates/faq.html:95
msgid "delete any questions and answers and perform other moderation tasks"
msgstr ""
-"borrar cualquier pregunta o respuesta y realizar otras tareas de "
-"administración."
-#: templates/faq.html:100
+#: templates/faq.html:102
msgid "how to validate email title"
-msgstr "¿Cómo validar mi correo electrónico?"
+msgstr ""
-#: templates/faq.html:102
-msgid "how to validate email info"
-msgstr ""
-"<form style='margin:0;padding:0;' action='/email/sendkey/'><p><span class="
-"\"bigger strong\">¿Cómo?</span> Si acabas de asignar o cambiar tu correo "
-"electrónico - <strong>verifica tu casilla de mensajes y clickea en el link "
-"incluido</strong>. <br/> El link contiene una clave generada especificamente "
-"para ti. <button style='display:inline' type='submit'><strong>get a new key</"
-"strong></button> y vuelve a revisar tu casilla de mensajes.</p></form><span "
-"class=\"bigger strong\">¿Porqué?</span> La validación del email es requerida "
-"para estar seguros the que <strong>solo tu puedes enviar mensajes</strong> "
-"bajo tu concentimiento y para <strong>minimizar el spam</strong>.<br/> Con "
-"tu email podrás <strong>suscribirte a actualizaciones</strong> en las "
-"preguntas mas interesantes. También, cuando te registras por primera vez - "
-"se crea un imagen personal única de <a href='/"
-"faq#gravatar'><strong>gravatar</strong></a>."
-
-#: templates/faq.html:106
+#: templates/faq.html:104
+#, python-format
+msgid ""
+"how to validate email info with %(send_email_key_url)s %(gravatar_faq_url)s"
+msgstr ""
+
+#: templates/faq.html:108
msgid "what is gravatar"
-msgstr "¿Qué es gravatar?"
+msgstr ""
-#: templates/faq.html:107
+#: templates/faq.html:109
msgid "gravatar faq info"
msgstr ""
-"<strong>Gravatar</strong> significa <strong>g</strong>lobalmente <strong>r</"
-"strong>econocido <strong>avatar</strong> - tu imagen única asociada a tu "
-"email. Es simplemente una imagen que se muestra junto con tus mensajes en "
-"sitios que soportan gravatar. Por defecto gravatar aparece como un cuadrado "
-"rellenado con figuras parecidas a copos de nieve. Puedes <strong>seleccionar "
-"tu imagen</strong> en <a href='http://gravatar.com'><strong>gravatar.com</"
-"strong></a>"
-#: templates/faq.html:110
+#: templates/faq.html:112
msgid "To register, do I need to create new password?"
-msgstr "¿Para registrarme, debo crearme una cuenta?"
+msgstr ""
-#: templates/faq.html:111
+#: templates/faq.html:113
msgid ""
"No, you don't have to. You can login through any service that supports "
"OpenID, e.g. Google, Yahoo, AOL, etc."
msgstr ""
-"No tienes porqué. Puedes ingresar usando cualquiera de los servicios que "
-"soportan OpenID, ej. Google, Yahoo, AOL, MyOpenID, etc."
-#: templates/faq.html:112
+#: templates/faq.html:114
msgid "Login now!"
-msgstr "Ingresa ahora!"
+msgstr ""
-#: templates/faq.html:117
+#: templates/faq.html:119
msgid "Why other people can edit my questions/answers?"
-msgstr "¿Porqué otras personas pueden editar mis preguntas y respuestas?"
+msgstr ""
-#: templates/faq.html:118
+#: templates/faq.html:120
msgid "Goal of this site is..."
msgstr ""
-"El objetivo de este sitio es generar contenido valioso mediante preguntas y "
-"respuestas, de forma colaborativa. "
-#: templates/faq.html:118
+#: templates/faq.html:120
msgid ""
"So questions and answers can be edited like wiki pages by experienced users "
"of this site and this improves the overall quality of the knowledge base "
"content."
msgstr ""
-"Entonces, las preguntas y respuestas pueden ser editadas como wiki por "
-"usuarios con experiencia, y esto mejora la calidad general del conocimiento "
-"acumulado."
-#: templates/faq.html:119
+#: templates/faq.html:121
msgid "If this approach is not for you, we respect your choice."
msgstr ""
-"Si esta forma de funcionamiento no es de tu agrado, respetamos tu elección."
-#: templates/faq.html:123
+#: templates/faq.html:125
msgid "Still have questions?"
-msgstr "¿Aún tienes preguntas?"
+msgstr ""
-#: templates/faq.html:124
-msgid "Please ask your question, help make our community better!"
-msgstr "Por favor haz tu pregunta, ¡ayudanos a mejorar nuestra comunidad!"
+#: templates/faq.html:126
+#, python-format
+msgid ""
+"Please ask your question at %(ask_question_url)s, help make our community "
+"better!"
+msgstr ""
-#: templates/faq.html:126 templates/header.html:29 templates/header.html.py:63
+#: templates/faq.html:128 templates/header.html:27 templates/header.html.py:61
msgid "questions"
-msgstr "preguntas"
+msgstr ""
-#: templates/faq.html:126 templates/index.html:123
+#: templates/faq.html:128 templates/index.html:162
msgid "."
-msgstr "."
+msgstr ""
+
+#: templates/feedback.html:6
+msgid "Feedback"
+msgstr ""
+
+#: templates/feedback.html:11
+msgid "Give us your feedback!"
+msgstr ""
+
+#: templates/feedback.html:17
+#, python-format
+msgid ""
+"\n"
+" <span class='big strong'>Dear %(user_name)s</span>, we look "
+"forward to hearing your feedback. \n"
+" Please type and send us your message below.\n"
+" "
+msgstr ""
+
+#: templates/feedback.html:24
+msgid ""
+"\n"
+" <span class='big strong'>Dear visitor</span>, we look forward to "
+"hearing your feedback.\n"
+" Please type and send us your message below.\n"
+" "
+msgstr ""
-#: templates/footer.html:7 templates/header.html:14 templates/index.html:83
+#: templates/feedback.html:41
+msgid "(this field is required)"
+msgstr ""
+
+#: templates/feedback.html:49
+msgid "Send Feedback"
+msgstr ""
+
+#: templates/footer.html:8 templates/header.html:13 templates/index.html:120
msgid "about"
-msgstr "acerca de nosotros"
+msgstr ""
-#: templates/footer.html:8 templates/header.html:15 templates/index.html:84
-#: templates/question_edit_tips.html:16
+#: templates/footer.html:9 templates/header.html:14 templates/index.html:121
+#: templates/question_edit_tips.html:17
msgid "faq"
-msgstr "preguntas frecuentes"
+msgstr ""
-#: templates/footer.html:9
+#: templates/footer.html:10
msgid "blog"
-msgstr "blog"
+msgstr ""
-#: templates/footer.html:10
+#: templates/footer.html:11
msgid "contact us"
-msgstr "contactenos"
+msgstr ""
-#: templates/footer.html:11
+#: templates/footer.html:12
msgid "privacy policy"
-msgstr "código de privacidad"
+msgstr ""
-#: templates/footer.html:12
+#: templates/footer.html:21
msgid "give feedback"
-msgstr "envía comentarios"
-
-#: templates/footer.html:18
-msgid "current revision"
-msgstr "revisión actual"
+msgstr ""
-#: templates/header.html:10
+#: templates/header.html:9
msgid "logout"
-msgstr "salir"
+msgstr ""
-#: templates/header.html:12 templates/authopenid/signup.html:41
+#: templates/header.html:11
msgid "login"
-msgstr "entrar"
+msgstr ""
-#: templates/header.html:23
+#: templates/header.html:21
msgid "back to home page"
-msgstr "volver página principal"
+msgstr ""
-#: templates/header.html:31 templates/header.html.py:65
+#: templates/header.html:29 templates/header.html.py:63
msgid "users"
-msgstr "usuarios"
+msgstr ""
-#: templates/header.html:33
+#: templates/header.html:31
msgid "books"
-msgstr "libros"
+msgstr ""
-#: templates/header.html:36
+#: templates/header.html:34
msgid "unanswered questions"
-msgstr "sin respuesta"
+msgstr ""
-#: templates/header.html:40
+#: templates/header.html:38
msgid "my profile"
-msgstr "mi perfil"
+msgstr ""
-#: templates/header.html:44
+#: templates/header.html:42
msgid "ask a question"
-msgstr "hacer una pregunta"
+msgstr ""
-#: templates/header.html:59
+#: templates/header.html:57
msgid "search"
-msgstr "buscar"
+msgstr ""
-#: templates/index.html:7
+#: templates/index.html:8
msgid "Home"
-msgstr "Inicio"
+msgstr ""
-#: templates/index.html:22 templates/questions.html:7
+#: templates/index.html:25 templates/questions.html:8
msgid "Questions"
-msgstr "Preguntas"
+msgstr ""
-#: templates/index.html:24
+#: templates/index.html:27
msgid "last updated questions"
-msgstr "ultimas preguntas actualizadas"
+msgstr ""
-#: templates/index.html:24 templates/questions.html:25
-#: templates/unanswered.html:20
+#: templates/index.html:27 templates/questions.html:51
+#: templates/unanswered.html:21
msgid "newest"
-msgstr "más nuevas"
+msgstr ""
+
+#: templates/index.html:28 templates/questions.html:52
+msgid "most recently updated questions"
+msgstr ""
-#: templates/index.html:25 templates/questions.html:27
+#: templates/index.html:28 templates/questions.html:52
+msgid "active"
+msgstr ""
+
+#: templates/index.html:29 templates/questions.html:53
msgid "hottest questions"
-msgstr "preguntas calientes"
+msgstr ""
-#: templates/index.html:25 templates/questions.html:27
+#: templates/index.html:29 templates/questions.html:53
msgid "hottest"
-msgstr "más calientes"
+msgstr ""
-#: templates/index.html:26 templates/questions.html:28
+#: templates/index.html:30 templates/questions.html:54
msgid "most voted questions"
-msgstr "preguntas más votadas"
+msgstr ""
-#: templates/index.html:26 templates/questions.html:28
+#: templates/index.html:30 templates/questions.html:54
msgid "most voted"
-msgstr "más votadas"
+msgstr ""
-#: templates/index.html:27
+#: templates/index.html:31
msgid "all questions"
-msgstr "todas las preguntas"
+msgstr ""
-#: templates/index.html:47 templates/questions.html:45
-#: templates/unanswered.html:36 templates/users_questions.html:35
+#: templates/index.html:49 templates/question_summary_list_roll.html:13
+#: templates/questions.html:83 templates/unanswered.html:38
+#: templates/users_questions.html:36
msgid "answers"
-msgstr "respuestas"
+msgstr ""
+
+#: templates/index.html:81 templates/index.html.py:95
+#: templates/questions.html:115 templates/questions.html.py:129
+#: templates/unanswered.html:70 templates/unanswered.html.py:84
+msgid "Posted:"
+msgstr ""
+
+#: templates/index.html:84 templates/index.html.py:89
+#: templates/questions.html:118 templates/questions.html.py:123
+#: templates/unanswered.html:73 templates/unanswered.html.py:78
+msgid "Updated:"
+msgstr ""
-#: templates/index.html:69 templates/question.html:499
-#: templates/questions.html:84 templates/questions.html.py:156
-#: templates/tags.html:49 templates/unanswered.html:75
-#: templates/unanswered.html.py:106 templates/users_questions.html:52
+#: templates/index.html:106 templates/question.html:488
+#: templates/question_summary_list_roll.html:52 templates/questions.html:140
+#: templates/questions.html.py:257 templates/tags.html:49
+#: templates/unanswered.html:95 templates/unanswered.html.py:122
+#: templates/users_questions.html:52
msgid "see questions tagged"
-msgstr "ver preguntas etiquetadas"
+msgstr ""
-#: templates/index.html:80
+#: templates/index.html:117
msgid "welcome to website"
-msgstr "bienvenido a sitio"
+msgstr ""
-#: templates/index.html:89
+#: templates/index.html:128
msgid "Recent tags"
-msgstr "Etiquetas recientes"
+msgstr ""
-#: templates/index.html:94 templates/question.html:125
+#: templates/index.html:133 templates/question.html:135
#, python-format
msgid "see questions tagged '%(tagname)s'"
-msgstr "ver preguntas etiquetadas '%(tagname)s'"
+msgstr ""
-#: templates/index.html:97 templates/index.html.py:123
+#: templates/index.html:136 templates/index.html.py:162
msgid "popular tags"
-msgstr "etiquetas populares"
+msgstr ""
-#: templates/index.html:102
+#: templates/index.html:141
msgid "Recent awards"
-msgstr "Reconocimientos recientes"
+msgstr ""
-#: templates/index.html:108
+#: templates/index.html:147
msgid "given to"
-msgstr "dados a"
+msgstr ""
-#: templates/index.html:113
+#: templates/index.html:152
msgid "all awards"
-msgstr "todos los reconocimientos"
+msgstr ""
-#: templates/index.html:118
+#: templates/index.html:157
msgid "subscribe to last 30 questions by RSS"
-msgstr "suscribirse a las últimas 30 preguntas por RSS"
+msgstr ""
-#: templates/index.html:123
+#: templates/index.html:162
msgid "Still looking for more? See"
-msgstr "¿Aún sigues buscando más? Ver"
+msgstr ""
-#: templates/index.html:123
+#: templates/index.html:162
msgid "complete list of questions"
-msgstr "lista completa de preguntas"
+msgstr ""
-#: templates/index.html:123
+#: templates/index.html:162 templates/authopenid/signup.html:18
msgid "or"
-msgstr "ó"
+msgstr ""
-#: templates/index.html:123
+#: templates/index.html:162
msgid "Please help us answer"
-msgstr "Ayudanos a responder"
+msgstr ""
-#: templates/index.html:123
+#: templates/index.html:162
msgid "list of unanswered questions"
-msgstr "lista de preguntas sin respuesta"
+msgstr ""
-#: templates/logout.html:6 templates/logout.html.py:17
+#: templates/logout.html:6 templates/logout.html.py:16
msgid "Logout"
-msgstr "Salir"
+msgstr ""
-#: templates/logout.html:20
+#: templates/logout.html:19
msgid ""
"As a registered user you can login with your OpenID, log out of the site or "
"permanently remove your account."
msgstr ""
-"Como usuario registrado puedes ingresar con tu OpenID, salir del sitio o "
-"eliminar de forma permanente tu cuenta."
-#: templates/logout.html:21
+#: templates/logout.html:20
msgid "Logout now"
-msgstr "Salir ahora"
+msgstr ""
#: templates/pagesize.html:6
msgid "posts per page"
-msgstr "entradas por página"
+msgstr ""
#: templates/paginator.html:6 templates/paginator.html.py:7
msgid "previous"
-msgstr "previo"
+msgstr ""
#: templates/paginator.html:19
msgid "current page"
-msgstr "página actúal"
+msgstr ""
#: templates/paginator.html:22 templates/paginator.html.py:29
msgid "page number "
-msgstr "número de página"
+msgstr ""
#: templates/paginator.html:22 templates/paginator.html.py:29
msgid "number - make blank in english"
-msgstr " "
+msgstr ""
#: templates/paginator.html:33
msgid "next page"
-msgstr "próxima página"
+msgstr ""
+
+#: templates/post_contributor_info.html:9
+#, python-format
+msgid ""
+"\n"
+" one revision\n"
+" "
+msgid_plural ""
+"\n"
+" %(rev_count)s revisions\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/post_contributor_info.html:19
+msgid "asked"
+msgstr ""
+
+#: templates/post_contributor_info.html:22
+msgid "answered"
+msgstr ""
+
+#: templates/post_contributor_info.html:24
+msgid "posted"
+msgstr ""
+
+#: templates/post_contributor_info.html:45
+msgid "updated"
+msgstr ""
#: templates/privacy.html:6 templates/privacy.html.py:11
msgid "Privacy policy"
-msgstr "Privacidad"
+msgstr ""
#: templates/privacy.html:15
msgid "general message about privacy"
-msgstr "mensaje de privacidad"
+msgstr ""
#: templates/privacy.html:18
msgid "Site Visitors"
-msgstr "Visitantes del Sitio"
+msgstr ""
#: templates/privacy.html:20
msgid "what technical information is collected about visitors"
-msgstr "que información es recolectada sobre los usuarios"
+msgstr ""
#: templates/privacy.html:23
msgid "Personal Information"
-msgstr "Información Personal"
+msgstr ""
#: templates/privacy.html:25
msgid "details on personal information policies"
-msgstr "describir código de manejo de la información personal"
+msgstr ""
#: templates/privacy.html:28
msgid "Other Services"
-msgstr "Otros servicios"
+msgstr ""
#: templates/privacy.html:30
msgid "details on sharing data with third parties"
-msgstr "detalles sobre compartir información con terceros"
+msgstr ""
#: templates/privacy.html:35
msgid "cookie policy details"
-msgstr "uso de cookies"
+msgstr ""
#: templates/privacy.html:37
msgid "Policy Changes"
-msgstr "Cambios de Códigos"
+msgstr ""
#: templates/privacy.html:38
msgid "how privacy policies can be changed"
-msgstr "como pueden ser cambiados los códigos de privacidad"
+msgstr ""
-#: templates/question.html:72 templates/question.html.py:73
-#: templates/question.html:85 templates/question.html.py:87
+#: templates/question.html:77 templates/question.html.py:78
+#: templates/question.html:94 templates/question.html.py:96
msgid "i like this post (click again to cancel)"
-msgstr "Me gusta esta entrada (clickear devuelta para cancelar)"
+msgstr ""
-#: templates/question.html:75 templates/question.html.py:89
-#: templates/question.html:289
+#: templates/question.html:80 templates/question.html.py:98
+#: templates/question.html:257
msgid "current number of votes"
-msgstr "número actual de votos"
+msgstr ""
-#: templates/question.html:80 templates/question.html.py:81
-#: templates/question.html:94 templates/question.html.py:95
+#: templates/question.html:89 templates/question.html.py:90
+#: templates/question.html:103 templates/question.html.py:104
msgid "i dont like this post (click again to cancel)"
-msgstr "No me gusta esta entrada (clickear devuelta para cancelar)"
+msgstr ""
-#: templates/question.html:100 templates/question.html.py:101
+#: templates/question.html:109 templates/question.html.py:110
msgid "mark this question as favorite (click again to cancel)"
-msgstr "marcar esta pregunta como favorita (clickear devuelta para cancelar)"
+msgstr ""
-#: templates/question.html:107 templates/question.html.py:108
+#: templates/question.html:116 templates/question.html.py:117
msgid "remove favorite mark from this question (click again to restore mark)"
msgstr ""
-"remover marca de favorito a esta pregunta (clickear devuelta para volver a "
-"marcar)"
-#: templates/question.html:134 templates/question.html.py:322
-#: templates/revisions_answer.html:53 templates/revisions_question.html:53
+#: templates/question.html:140 templates/question.html.py:294
+#: templates/revisions_answer.html:58 templates/revisions_question.html:58
msgid "edit"
-msgstr "editar"
-
-#: templates/question.html:138 templates/question.html.py:332
-msgid "delete"
-msgstr "borrar"
+msgstr ""
-#: templates/question.html:143
+#: templates/question.html:145
msgid "reopen"
-msgstr "re-abrir"
+msgstr ""
-#: templates/question.html:148
+#: templates/question.html:149
msgid "close"
-msgstr "cerrar"
+msgstr ""
-#: templates/question.html:154 templates/question.html.py:345
+#: templates/question.html:155 templates/question.html.py:300
msgid ""
"report as offensive (i.e containing spam, advertising, malicious text, etc.)"
msgstr ""
-"reportar como ofensivo (ej. contiene spam, publicidad, texto malicioso, etc.)"
-#: templates/question.html:155 templates/question.html.py:346
+#: templates/question.html:156 templates/question.html.py:301
msgid "flag offensive"
-msgstr "marcar como ofensivo"
-
-#: templates/question.html:167 templates/question.html.py:355
-#: templates/revisions_answer.html:65 templates/revisions_question.html:65
-msgid "updated"
-msgstr "actualizado"
+msgstr ""
-#: templates/question.html:216 templates/question.html.py:402
-#: templates/revisions_answer.html:63 templates/revisions_question.html:63
-msgid "asked"
-msgstr "preguntado"
+#: templates/question.html:164 templates/question.html.py:312
+msgid "delete"
+msgstr ""
-#: templates/question.html:246 templates/question.html.py:429
-msgid "comments"
-msgstr "comentarios"
+#: templates/question.html:182 templates/question.html.py:332
+msgid "delete this comment"
+msgstr ""
-#: templates/question.html:247 templates/question.html.py:430
+#: templates/question.html:193 templates/question.html.py:343
+#: templates/question.html:367
msgid "add comment"
-msgstr "agregar comentario"
+msgstr ""
+
+#: templates/question.html:197
+#, python-format
+msgid ""
+"\n"
+" see <strong>one</strong> more \n"
+" "
+msgid_plural ""
+"\n"
+" see <strong>%(counter)s</strong> "
+"more\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/question.html:203
+#, python-format
+msgid ""
+"\n"
+" see <strong>one</strong> more "
+"comment\n"
+" "
+msgid_plural ""
+"\n"
+" see <strong>%(counter)s</strong> "
+"more comments\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
-#: templates/question.html:260
+#: templates/question.html:219
#, python-format
msgid ""
-"The question has been closed for the following reason \"%(question."
-"get_close_reason_display)s\" by"
+"The question has been closed for the following reason \"%(close_reason)s\" by"
msgstr ""
-"La pregunta ha sido cerrada por el siguiente motivo \"%(question."
-"get_close_reason_display)s\" por"
-#: templates/question.html:262
+#: templates/question.html:221
#, python-format
-msgid "close date %(question.closed_at)s"
-msgstr "fecha de cerrada %(question.closed_at)s"
+msgid "close date %(closed_at)s"
+msgstr ""
-#: templates/question.html:269 templates/user_stats.html:28
-msgid "Answers"
-msgstr "Respuestas"
+#: templates/question.html:229
+#, python-format
+msgid ""
+"\n"
+" One Answer:\n"
+" "
+msgid_plural ""
+"\n"
+" %(counter)s Answers:\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
-#: templates/question.html:271
+#: templates/question.html:237
msgid "oldest answers will be shown first"
-msgstr "la respuesta mas vieja será mostrada primero"
+msgstr ""
-#: templates/question.html:271
+#: templates/question.html:237
msgid "oldest answers"
-msgstr "pregunta más vieja"
+msgstr ""
-#: templates/question.html:272
+#: templates/question.html:239
msgid "newest answers will be shown first"
-msgstr "preguntas más nuevas serán mostradas primero"
+msgstr ""
-#: templates/question.html:272
+#: templates/question.html:239
msgid "newest answers"
-msgstr "más nuevas"
+msgstr ""
-#: templates/question.html:273
+#: templates/question.html:241
msgid "most voted answers will be shown first"
-msgstr "las preguntas más votadas serán mostradas primero"
+msgstr ""
-#: templates/question.html:273
+#: templates/question.html:241
msgid "popular answers"
-msgstr "respuestas populares"
+msgstr ""
-#: templates/question.html:287 templates/question.html.py:288
+#: templates/question.html:255 templates/question.html.py:256
msgid "i like this answer (click again to cancel)"
-msgstr "me gusta esta respuesta (clickear devuelta para cancelar)"
+msgstr ""
-#: templates/question.html:294 templates/question.html.py:295
+#: templates/question.html:262 templates/question.html.py:263
msgid "i dont like this answer (click again to cancel)"
-msgstr "no me gusta esta respuesta (clickear devuelta para cancelar)"
+msgstr ""
-#: templates/question.html:300 templates/question.html.py:301
+#: templates/question.html:268 templates/question.html.py:269
msgid "mark this answer as favorite (click again to undo)"
-msgstr "marcar esta respuesta como favorita (clickear devuelta para deshacer)"
+msgstr ""
-#: templates/question.html:306 templates/question.html.py:307
+#: templates/question.html:274 templates/question.html.py:275
msgid "the author of the question has selected this answer as correct"
-msgstr "el autor de esta pregunta ha seleccionado esta respuesta como correcta"
-
-#: templates/question.html:329
-msgid "undelete"
-msgstr "deshacer eliminar"
+msgstr ""
-#: templates/question.html:339
+#: templates/question.html:288
msgid "answer permanent link"
-msgstr "enlace permanente a respuesta"
+msgstr ""
-#: templates/question.html:340
+#: templates/question.html:289
msgid "permanent link"
-msgstr "enlace permanente"
+msgstr ""
+
+#: templates/question.html:312
+msgid "undelete"
+msgstr ""
+
+#: templates/question.html:347
+#, python-format
+msgid ""
+"\n"
+" see <strong>one</"
+"strong> more \n"
+" "
+msgid_plural ""
+"\n"
+" see <strong>%"
+"(counter)s</strong> more\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/question.html:353
+#, python-format
+msgid ""
+"\n"
+" see <strong>one</"
+"strong> more comment\n"
+" "
+msgid_plural ""
+"\n"
+" see <strong>%"
+"(counter)s</strong> more comments\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/question.html:366
+msgid "comments"
+msgstr ""
+
+#: templates/question.html:386 templates/question.html.py:389
+msgid "Notify me once a day when there are any new answers"
+msgstr ""
+
+#: templates/question.html:392
+msgid "Notify me weekly when there are any new answers"
+msgstr ""
+
+#: templates/question.html:397
+#, python-format
+msgid ""
+"\n"
+" You can always adjust frequency of email updates from your %"
+"(profile_url)s\n"
+" "
+msgstr ""
-#: templates/question.html:453
+#: templates/question.html:404
+msgid "once you sign in you will be able to subscribe for any updates here"
+msgstr ""
+
+#: templates/question.html:415
msgid "Your answer"
-msgstr "Tu respuesta"
+msgstr ""
-#: templates/question.html:456
+#: templates/question.html:417
+msgid "Be the first one to answer this question!"
+msgstr ""
+
+#: templates/question.html:423
msgid "you can answer anonymously and then login"
-msgstr "puedes responder de forma anónima y luego ingresar"
+msgstr ""
-#: templates/question.html:479
-msgid "Answer the question"
-msgstr "Responde la pregunta"
+#: templates/question.html:427
+msgid "answer your own question only to give an answer"
+msgstr ""
-#: templates/question.html:481
-msgid "Notify me daily if there are any new answers."
-msgstr "Notificarme diariamente si hay nuevas respuestas."
+#: templates/question.html:429
+msgid "please only give an answer, no discussions"
+msgstr ""
-#: templates/question.html:483
-msgid "once you sign in you will be able to subscribe for any updates here"
+#: templates/question.html:465
+msgid "Login/Signup to Post Your Answer"
+msgstr ""
+
+#: templates/question.html:468
+msgid "Answer Your Own Question"
msgstr ""
-"una vez que hayas ingresado podrás suscribirte a cualquiera de las "
-"actualizaciones aquí."
-#: templates/question.html:494
+#: templates/question.html:470
+msgid "Answer the question"
+msgstr ""
+
+#: templates/question.html:483
msgid "Question tags"
-msgstr "Tags de la pregunta"
+msgstr ""
-#: templates/question.html:504
+#: templates/question.html:493
msgid "question asked"
-msgstr "pregunta preguntada"
-
-#: templates/question.html:504 templates/question.html.py:510
-#: templates/user_info.html:51
-msgid "ago"
-msgstr " atras"
+msgstr ""
-#: templates/question.html:507
+#: templates/question.html:496
msgid "question was seen"
-msgstr "la pregunta fue vista"
+msgstr ""
-#: templates/question.html:507
+#: templates/question.html:496
msgid "times"
-msgstr "veces"
+msgstr ""
-#: templates/question.html:510
+#: templates/question.html:499
msgid "last updated"
-msgstr "última vez actualizada"
+msgstr ""
-#: templates/question.html:515
+#: templates/question.html:504
msgid "Related questions"
-msgstr "Preguntas relacionadas"
+msgstr ""
-#: templates/question_edit.html:4 templates/question_edit.html.py:65
+#: templates/question_edit.html:5 templates/question_edit.html.py:66
msgid "Edit question"
-msgstr "Editar pregunta"
+msgstr ""
#: templates/question_edit_tips.html:4
msgid "question tips"
-msgstr "sugerencias sobre pregunta"
+msgstr ""
#: templates/question_edit_tips.html:7
msgid "please ask a relevant question"
-msgstr "por favor hacer preguntas relevantes"
+msgstr ""
#: templates/question_edit_tips.html:10
msgid "please try provide enough details"
-msgstr "intente proveer suficientes detalles"
+msgstr ""
-#: templates/question_retag.html:3 templates/question_retag.html.py:52
+#: templates/question_retag.html:4 templates/question_retag.html.py:53
msgid "Change tags"
-msgstr "Cambiar etiquetas"
+msgstr ""
-#: templates/question_retag.html:39
+#: templates/question_retag.html:40
msgid "up to 5 tags, less than 20 characters each"
-msgstr "hasta 5 etiquetas, menos de 20 caracteres cada una"
+msgstr ""
-#: templates/question_retag.html:82
+#: templates/question_retag.html:83
msgid "Why use and modify tags?"
-msgstr "¿Porqué usar y modificar etiquetas?"
+msgstr ""
-#: templates/question_retag.html:85
+#: templates/question_retag.html:86
msgid "tags help us keep Questions organized"
-msgstr "las etiquetas nos permiten mantener las Preguntas organizadas"
+msgstr ""
-#: templates/question_retag.html:91
+#: templates/question_retag.html:94
msgid "tag editors receive special awards from the community"
msgstr ""
-"los editores de etiquetas reciben distinciones especiales de la comunidad"
-#: templates/questions.html:23
+#: templates/questions.html:28 templates/questions.html.py:32
msgid "Found by tags"
-msgstr "Encontradas por etiqueta"
+msgstr ""
-#: templates/questions.html:23
+#: templates/questions.html:28 templates/questions.html.py:38
msgid "Found by title"
-msgstr "Encontradas por título"
+msgstr ""
-#: templates/questions.html:23
+#: templates/questions.html:28 templates/questions.html.py:44
msgid "All questions"
-msgstr "Todas las preguntas"
+msgstr ""
+
+#: templates/questions.html:36
+msgid "Search results"
+msgstr ""
+
+#: templates/questions.html:42 templates/unanswered.html:8
+#: templates/unanswered.html.py:19
+msgid "Unanswered questions"
+msgstr ""
-#: templates/questions.html:25 templates/unanswered.html:20
+#: templates/questions.html:51 templates/unanswered.html:21
msgid "most recently asked questions"
-msgstr "preguntas hechas más recientemente"
+msgstr ""
-#: templates/questions.html:26
-msgid "most recently updated questions"
-msgstr "preguntas actualizadas más recientemente"
+#: templates/questions.html:143
+msgid "Category: "
+msgstr ""
-#: templates/questions.html:26
-msgid "active"
-msgstr "actividad"
+#: templates/questions.html:149
+msgid "Did not find anything?"
+msgstr ""
+
+#: templates/questions.html:152
+msgid "Did not find what you were looking for?"
+msgstr ""
+
+#: templates/questions.html:154
+msgid "Please, post your question!"
+msgstr ""
-#: templates/questions.html:109
+#: templates/questions.html:169
#, python-format
msgid ""
"\n"
@@ -1889,15 +2300,9 @@ msgid_plural ""
"\t\t\thave total %(q_num)s questions tagged %(tagname)s\n"
"\t\t\t"
msgstr[0] ""
-"\n"
-"\t\t\ttiene un total de %(q_num)s preguntas etiquetadas con %(tagname)s\n"
-"\t\t\t"
msgstr[1] ""
-"\n"
-"\t\t\ttiene un total de %(q_num)s preguntas etiquetadas con %(tagname)s\n"
-"\t\t\t"
-#: templates/questions.html:116
+#: templates/questions.html:176
#, python-format
msgid ""
"\n"
@@ -1908,16 +2313,10 @@ msgid_plural ""
"\t\t\t\thave total %(q_num)s questions containing %(searchtitle)s\n"
"\t\t\t\t"
msgstr[0] ""
-"\n"
-"\t\t\thay un total de %(q_num)s preguntas que contienen %(searchtitle)s\n"
-"\t\t\t"
msgstr[1] ""
-"\n"
-"\t\t\thay un total de %(q_num)s pregunta que contiene %(searchtitle)s\n"
-"\t\t\t"
-#: templates/questions.html:122
-#, fuzzy, python-format
+#: templates/questions.html:182
+#, python-format
msgid ""
"\n"
"\t\t\t\thave total %(q_num)s questions\n"
@@ -1926,628 +2325,750 @@ msgid_plural ""
"\n"
"\t\t\t\thave total %(q_num)s questions\n"
"\t\t\t\t"
-msgstr[0] "ver preguntas etiquetadas '%(tagname)s'"
-msgstr[1] "ver pregunta etiquetada '%(tagname)s'"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/questions.html:191
+#, python-format
+msgid ""
+"\n"
+" have total %(q_num)s questions tagged %(tagname)s\n"
+" "
+msgid_plural ""
+"\n"
+" have total %(q_num)s questions tagged %(tagname)s\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/questions.html:199
+#, python-format
+msgid ""
+"\n"
+" have total %(q_num)s questions containing %(searchtitle)"
+"s in full text\n"
+" "
+msgid_plural ""
+"\n"
+" have total %(q_num)s questions containing %(searchtitle)"
+"s in full text\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/questions.html:205
+#, python-format
+msgid ""
+"\n"
+" have total %(q_num)s questions containing %(searchtitle)"
+"s\n"
+" "
+msgid_plural ""
+"\n"
+" have total %(q_num)s questions containing %(searchtitle)"
+"s\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/questions.html:213
+#, python-format
+msgid ""
+"\n"
+" have total %(q_num)s unanswered questions\n"
+" "
+msgid_plural ""
+"\n"
+" have total %(q_num)s unanswered questions\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/questions.html:219
+#, python-format
+msgid ""
+"\n"
+" have total %(q_num)s questions\n"
+" "
+msgid_plural ""
+"\n"
+" have total %(q_num)s questions\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
-#: templates/questions.html:131
+#: templates/questions.html:230
msgid "latest questions info"
-msgstr "<strong>Más recientes</strong> preguntas son mostradas primero."
+msgstr ""
-#: templates/questions.html:135
+#: templates/questions.html:234
msgid "Questions are sorted by the <strong>time of last update</strong>."
msgstr ""
-"Las preguntas estan ordenadas por <strong>fecha de último update</strong>."
-#: templates/questions.html:136
+#: templates/questions.html:235
msgid "Most recently answered ones are shown first."
-msgstr "Las más recientemente respondidas son mostradas primero."
+msgstr ""
-#: templates/questions.html:140
+#: templates/questions.html:239
msgid "Questions sorted by <strong>number of responses</strong>."
-msgstr "Preguntas ordenadas por <strong>número de respuestas</strong>."
+msgstr ""
-#: templates/questions.html:141
+#: templates/questions.html:240
msgid "Most answered questions are shown first."
-msgstr "Preguntas más respondidas aparecen primero."
+msgstr ""
-#: templates/questions.html:145
+#: templates/questions.html:244
msgid "Questions are sorted by the <strong>number of votes</strong>."
-msgstr "Las preguntas son ordenadas por el <strong>número de votos</strong>."
+msgstr ""
-#: templates/questions.html:146
+#: templates/questions.html:245
msgid "Most voted questions are shown first."
-msgstr "Las preguntas más votadas son mostradas primero."
+msgstr ""
-#: templates/questions.html:153 templates/unanswered.html:102
+#: templates/questions.html:253 templates/unanswered.html:118
msgid "Related tags"
-msgstr "Etiquetas relacionadas"
+msgstr ""
+
+#: templates/questions.html:263 templates/tag_selector.html:10
+#: templates/tag_selector.html.py:27
+#, python-format
+msgid "see questions tagged '%(tag_name)s'"
+msgstr ""
#: templates/reopen.html:6 templates/reopen.html.py:16
msgid "Reopen question"
-msgstr "Re-abrir pregunta"
+msgstr ""
#: templates/reopen.html:19
msgid "Open the previously closed question"
-msgstr "Abrir pregunta previamente cerrada"
+msgstr ""
#: templates/reopen.html:22
msgid "The question was closed for the following reason "
-msgstr "La pregunta fue cerrada por el siguiente motivo "
+msgstr ""
#: templates/reopen.html:22
msgid "reason - leave blank in english"
-msgstr "razón - "
+msgstr ""
#: templates/reopen.html:22
msgid "on "
-msgstr "el "
+msgstr ""
#: templates/reopen.html:22
msgid "date closed"
-msgstr "fecha cerrada"
+msgstr ""
#: templates/reopen.html:29
msgid "Reopen this question"
-msgstr "Re-abrir esta pregunta"
+msgstr ""
-#: templates/revisions_answer.html:7 templates/revisions_answer.html.py:36
-#: templates/revisions_question.html:8 templates/revisions_question.html:36
+#: templates/revisions_answer.html:7 templates/revisions_answer.html.py:38
+#: templates/revisions_question.html:8 templates/revisions_question.html:38
msgid "Revision history"
-msgstr "Historial de revisiones"
+msgstr ""
+
+#: templates/revisions_answer.html:50 templates/revisions_question.html:50
+msgid "click to hide/show revision"
+msgstr ""
+
+#: templates/tag_selector.html:4
+msgid "Interesting tags"
+msgstr ""
+
+#: templates/tag_selector.html:14
+#, python-format
+msgid "remove '%(tag_name)s' from the list of interesting tags"
+msgstr ""
+
+#: templates/tag_selector.html:20 templates/tag_selector.html.py:37
+msgid "Add"
+msgstr ""
+
+#: templates/tag_selector.html:21
+msgid "Ignored tags"
+msgstr ""
+
+#: templates/tag_selector.html:31
+#, python-format
+msgid "remove '%(tag_name)s' from the list of ignored tags"
+msgstr ""
+
+#: templates/tag_selector.html:40
+msgid "keep ingored questions hidden"
+msgstr ""
#: templates/tags.html:6 templates/tags.html.py:30
msgid "Tag list"
-msgstr "Lista de etiquetas"
+msgstr ""
#: templates/tags.html:32
msgid "sorted alphabetically"
-msgstr "ordenar alfabéticamente"
+msgstr ""
#: templates/tags.html:32
msgid "by name"
-msgstr "por nombre"
+msgstr ""
#: templates/tags.html:33
msgid "sorted by frequency of tag use"
-msgstr "ordenar por frecuencia de uso de la etiqueta"
+msgstr ""
#: templates/tags.html:33
msgid "by popularity"
-msgstr "por popularidad"
+msgstr ""
#: templates/tags.html:39
msgid "All tags matching query"
-msgstr "Todas las etiquetas que coincidan con la busqueda"
+msgstr ""
#: templates/tags.html:39
msgid "all tags - make this empty in english"
-msgstr "todas las tags"
+msgstr ""
#: templates/tags.html:42
msgid "Nothing found"
-msgstr "Nada encontrado"
-
-#: templates/unanswered.html:7 templates/unanswered.html.py:18
-msgid "Unanswered questions"
-msgstr "Preguntas sin respuesta"
+msgstr ""
-#: templates/unanswered.html:97
+#: templates/unanswered.html:114
#, python-format
msgid "have %(num_q)s unanswered questions"
msgstr ""
-"<div class=\"questions-count\">%(num_q)s</div> preguntas <strong>sin "
-"respuesta</strong> "
#: templates/user_edit.html:6
msgid "Edit user profile"
-msgstr "Editar perfil de usuario"
+msgstr ""
#: templates/user_edit.html:19
msgid "edit profile"
-msgstr "editar perfil"
+msgstr ""
#: templates/user_edit.html:31
msgid "image associated with your email address"
-msgstr "imagen asociada con tu email"
+msgstr ""
#: templates/user_edit.html:31
-msgid "avatar"
-msgstr "avatar"
+#, python-format
+msgid "avatar, see %(gravatar_faq_url)s"
+msgstr ""
-#: templates/user_edit.html:36 templates/user_info.html:31
+#: templates/user_edit.html:36 templates/user_info.html:56
msgid "Registered user"
-msgstr "Usuario registrado"
+msgstr ""
-#: templates/user_edit.html:82
+#: templates/user_edit.html:86 templates/user_email_subscriptions.html:23
msgid "Update"
-msgstr "Actualización"
+msgstr ""
+
+#: templates/user_email_subscriptions.html:8
+msgid "Email subscription settings"
+msgstr ""
-#: templates/user_info.html:34
+#: templates/user_email_subscriptions.html:9
+msgid "email subscription settings info"
+msgstr ""
+
+#: templates/user_email_subscriptions.html:24
+msgid "Stop sending email"
+msgstr ""
+
+#: templates/user_info.html:22
+msgid "karma"
+msgstr ""
+
+#: templates/user_info.html:32
+msgid "Moderate this user"
+msgstr ""
+
+#: templates/user_info.html:45
msgid "update profile"
-msgstr "actualizar perfil de usuario"
+msgstr ""
-#: templates/user_info.html:40
+#: templates/user_info.html:60
msgid "real name"
-msgstr "nombre real"
+msgstr ""
-#: templates/user_info.html:45
+#: templates/user_info.html:65
msgid "member for"
-msgstr "miembro de"
+msgstr ""
-#: templates/user_info.html:50
+#: templates/user_info.html:70
msgid "last seen"
-msgstr "última vez visto"
+msgstr ""
-#: templates/user_info.html:56
+#: templates/user_info.html:76
msgid "user website"
-msgstr "sitio web del usuario"
+msgstr ""
-#: templates/user_info.html:62
+#: templates/user_info.html:82
msgid "location"
-msgstr "ubicación"
+msgstr ""
-#: templates/user_info.html:69
+#: templates/user_info.html:89
msgid "age"
-msgstr "edad"
+msgstr ""
-#: templates/user_info.html:70
+#: templates/user_info.html:90
msgid "age unit"
-msgstr "unidad de edad"
+msgstr ""
-#: templates/user_info.html:76
+#: templates/user_info.html:96
msgid "todays unused votes"
-msgstr "votos de hoy no usados"
+msgstr ""
-#: templates/user_info.html:77
+#: templates/user_info.html:97
msgid "votes left"
-msgstr "votos restantes"
-
-#: templates/user_preferences.html:10
-msgid "Connect with Twitter"
-msgstr "Conectar con Twitter"
-
-#: templates/user_preferences.html:13
-msgid "Twitter account name:"
-msgstr "Nombre de usuario en Twitter:"
-
-#: templates/user_preferences.html:15
-msgid "Twitter password:"
-msgstr "Contraseña de Twitter:"
-
-#: templates/user_preferences.html:17
-msgid "Send my Questions to Twitter"
-msgstr "Enviar mis preguntas a Twitter"
-
-#: templates/user_preferences.html:18
-msgid "Send my Answers to Twitter"
-msgstr "Enviar mis respuestas a Twitter"
+msgstr ""
-#: templates/user_preferences.html:19
-msgid "Save"
-msgstr "Guardar"
+#: templates/user_stats.html:12
+#, python-format
+msgid ""
+"\n"
+" <span class=\"count\">1</span> Question\n"
+" "
+msgid_plural ""
+"\n"
+" <span class=\"count\">%(counter)s</span> Questions\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
-#: templates/user_stats.html:16
-msgid "User questions"
-msgstr "Preguntas del usuario"
+#: templates/user_stats.html:23
+#, python-format
+msgid ""
+"\n"
+" <span class=\"count\">1</span> Answer\n"
+" "
+msgid_plural ""
+"\n"
+" <span class=\"count\">%(counter)s</span> Answers\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
-#: templates/user_stats.html:38
+#: templates/user_stats.html:36
#, python-format
msgid "the answer has been voted for %(vote_count)s times"
-msgstr "la respuesta ha sido votada %(vote_count)s veces"
+msgstr ""
-#: templates/user_stats.html:38
+#: templates/user_stats.html:36
msgid "this answer has been selected as correct"
-msgstr "esta respuesta ha sido seleccionada como correcta"
+msgstr ""
#: templates/user_stats.html:46
#, python-format
-msgid "the answer has been commented %(comment_count)s times"
-msgstr "la respuesta ha sido comentada %(comment_count)s veces"
+msgid ""
+"\n"
+" (one comment)\n"
+" "
+msgid_plural ""
+"\n"
+" the answer has been commented %(comment_count)s times\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/user_stats.html:61
+#, python-format
+msgid ""
+"\n"
+" <span class=\"count\">1</span> Vote\n"
+" "
+msgid_plural ""
+"\n"
+" <span class=\"count\">%(cnt)s</span> Votes\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
-#: templates/user_stats.html:60
-msgid "votes total"
-msgstr "votos totales"
+#: templates/user_stats.html:72
+msgid "thumb up"
+msgstr ""
-#: templates/user_stats.html:69
+#: templates/user_stats.html:73
msgid "user has voted up this many times"
-msgstr "el usuario ha votado positivo esta cantidad de veces"
+msgstr ""
-#: templates/user_stats.html:74
+#: templates/user_stats.html:77
+msgid "thumb down"
+msgstr ""
+
+#: templates/user_stats.html:78
msgid "user voted down this many times"
-msgstr "el usuario voto negativo esta cantidad de veces"
+msgstr ""
#: templates/user_stats.html:87
-msgid "Tags"
-msgstr "Etiquetas"
+#, python-format
+msgid ""
+"\n"
+" <span class=\"count\">1</span> Tag\n"
+" "
+msgid_plural ""
+"\n"
+" <span class=\"count\">%(counter)s</span> Tags\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
-#: templates/user_stats.html:97
+#: templates/user_stats.html:100
#, python-format
-msgid "see other questions tagged '%(tag)s' "
-msgstr "ver otras preguntas etiqueteadas '%(tag)s'"
+msgid ""
+"see other questions with %(view_user)s's contributions tagged '%(tag_name)s' "
+msgstr ""
+
+#: templates/user_stats.html:115
+#, python-format
+msgid ""
+"\n"
+" <span class=\"count\">1</span> Badge\n"
+" "
+msgid_plural ""
+"\n"
+" <span class=\"count\">%(counter)s</span> Badges\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
#: templates/user_tabs.html:7
msgid "User profile"
-msgstr "Perfil de usuario"
+msgstr ""
#: templates/user_tabs.html:16
msgid "graph of user reputation"
-msgstr "gráfica de la reputación del usuario"
+msgstr ""
#: templates/user_tabs.html:17
msgid "reputation history"
-msgstr "historial de reputación"
+msgstr ""
+
+#: templates/user_tabs.html:23
+msgid "questions that user selected as his/her favorite"
+msgstr ""
#: templates/user_tabs.html:24
msgid "favorites"
-msgstr "favoritos"
-
-#: templates/user_tabs.html:28
-msgid "settings"
-msgstr "preferencias"
+msgstr ""
#: templates/users.html:6 templates/users.html.py:24
msgid "Users"
-msgstr "Usuarios"
+msgstr ""
#: templates/users.html:27
msgid "recent"
-msgstr "reciente"
+msgstr ""
#: templates/users.html:28
msgid "oldest"
-msgstr "más viejo"
+msgstr ""
#: templates/users.html:29
msgid "by username"
-msgstr "por nombre de usuario"
+msgstr ""
#: templates/users.html:35
#, python-format
msgid "users matching query %(suser)s:"
-msgstr "usuarios que coincidan con la busqueda %(suser)s:"
+msgstr ""
#: templates/users.html:39
msgid "Nothing found."
-msgstr "Nada encontrado."
+msgstr ""
#: templates/users_questions.html:11
msgid "this questions was selected as favorite"
-msgstr "esta pregunta ha sido seleccionada como favorita"
+msgstr ""
+
+#: templates/users_questions.html:12
+msgid "thumb-up on"
+msgstr ""
-#: templates/users_questions.html:33
+#: templates/users_questions.html:19
+msgid "thumb-up off"
+msgstr ""
+
+#: templates/users_questions.html:34
msgid "this answer has been accepted to be correct"
-msgstr "esta respuesta ha sido aceptada como correcta"
+msgstr ""
-#: templates/authopenid/changeemail.html:7
-#: templates/authopenid/changeemail.html:33
+#: templates/authopenid/changeemail.html:3
+#: templates/authopenid/changeemail.html:9
+#: templates/authopenid/changeemail.html:38
msgid "Change email"
-msgstr "Cambiar dirección email"
+msgstr ""
-#: templates/authopenid/changeemail.html:10
+#: templates/authopenid/changeemail.html:11
+msgid "Save your email address"
+msgstr ""
+
+#: templates/authopenid/changeemail.html:16
#, python-format
msgid "change %(email)s info"
-msgstr "Cambiar información del correo electrónico %(email)s"
+msgstr ""
-#: templates/authopenid/changeemail.html:13
-#: templates/authopenid/changeopenid.html:14
-#: templates/authopenid/changepw.html:19 templates/authopenid/delete.html:15
-#: templates/authopenid/delete.html:25
-msgid "Please correct errors below:"
-msgstr "Por favor corrija los errores debajo: "
+#: templates/authopenid/changeemail.html:18
+#, python-format
+msgid "here is why email is required, see %(gravatar_faq_url)s"
+msgstr ""
-#: templates/authopenid/changeemail.html:30
+#: templates/authopenid/changeemail.html:31
msgid "Your new Email"
-msgstr "Tu nuevo Email"
+msgstr ""
#: templates/authopenid/changeemail.html:31
-#: templates/authopenid/signin.html:136
-msgid "Password"
-msgstr "Contraseña"
+msgid "Your Email"
+msgstr ""
-#: templates/authopenid/changeemail.html:42
-#, fuzzy
+#: templates/authopenid/changeemail.html:38
+msgid "Save Email"
+msgstr ""
+
+#: templates/authopenid/changeemail.html:49
msgid "Validate email"
-msgstr "Cambiar dirección email"
+msgstr ""
-#: templates/authopenid/changeemail.html:45
+#: templates/authopenid/changeemail.html:52
#, python-format
-msgid "validate %(email)s info"
-msgstr "validar información de %(email)s "
+msgid "validate %(email)s info or go to %(change_email_url)s"
+msgstr ""
-#: templates/authopenid/changeemail.html:50
+#: templates/authopenid/changeemail.html:57
msgid "Email not changed"
-msgstr "Email no modificado."
+msgstr ""
-#: templates/authopenid/changeemail.html:53
+#: templates/authopenid/changeemail.html:60
#, python-format
-msgid "old %(email)s kept"
-msgstr "se ha conservado el viejo email %(email)s "
+msgid "old %(email)s kept, if you like go to %(change_email_url)s"
+msgstr ""
-#: templates/authopenid/changeemail.html:58
+#: templates/authopenid/changeemail.html:65
msgid "Email changed"
-msgstr "Email modificado."
+msgstr ""
-#: templates/authopenid/changeemail.html:61
+#: templates/authopenid/changeemail.html:68
#, python-format
msgid "your current %(email)s can be used for this"
-msgstr "tu email actual %(email)s puede ser usado para esto"
+msgstr ""
-#: templates/authopenid/changeemail.html:66
+#: templates/authopenid/changeemail.html:73
msgid "Email verified"
-msgstr "Email verificado"
+msgstr ""
-#: templates/authopenid/changeemail.html:69
+#: templates/authopenid/changeemail.html:76
msgid "thanks for verifying email"
-msgstr "gracias por verificar su correo"
+msgstr ""
-#: templates/authopenid/changeemail.html:74
+#: templates/authopenid/changeemail.html:81
msgid "email key not sent"
-msgstr "llave de correo no enviada"
+msgstr ""
-#: templates/authopenid/changeemail.html:77
+#: templates/authopenid/changeemail.html:84
#, python-format
msgid "email key not sent %(email)s change email here %(change_link)s"
-msgstr "email no enviado %(email)s cambiar email aquí %(change_link)s"
+msgstr ""
+
+#: templates/authopenid/changeopenid.html:4
+#: templates/authopenid/changeopenid.html:30
+#: templates/authopenid/settings.html:34
+msgid "Change OpenID"
+msgstr ""
#: templates/authopenid/changeopenid.html:8
msgid "Account: change OpenID URL"
-msgstr "Cuenta: cambiar la URL de OpenID"
+msgstr ""
#: templates/authopenid/changeopenid.html:12
msgid ""
"This is where you can change your OpenID URL. Make sure you remember it!"
-msgstr "Aquí es donde puedes cambiar tu OpenID URL. Asegurate de recordarla!"
+msgstr ""
+
+#: templates/authopenid/changeopenid.html:14
+#: templates/authopenid/delete.html:14 templates/authopenid/delete.html:24
+msgid "Please correct errors below:"
+msgstr ""
#: templates/authopenid/changeopenid.html:29
msgid "OpenID URL:"
-msgstr "URL de OpenID:"
+msgstr ""
-#: templates/authopenid/changeopenid.html:30
-msgid "Change OpenID"
-msgstr "Cambiar OpenID"
+#: templates/authopenid/changepw.html:5 templates/authopenid/changepw.html:14
+#: templates/authopenid/settings.html:29
+msgid "Change password"
+msgstr ""
-#: templates/authopenid/changepw.html:14
+#: templates/authopenid/changepw.html:7
msgid "Account: change password"
-msgstr "Cuenta: cambiar contraseña"
+msgstr ""
-#: templates/authopenid/changepw.html:17
+#: templates/authopenid/changepw.html:8
msgid "This is where you can change your password. Make sure you remember it!"
-msgstr "Aquí es donde puedes cambiar tu contraseña. Asegurate de recordarlo!"
-
-#: templates/authopenid/changepw.html:27
-msgid "Current password"
-msgstr "Contraseña actual"
-
-#: templates/authopenid/changepw.html:28
-msgid "New password"
-msgstr "Nueva contraseña"
-
-#: templates/authopenid/changepw.html:29
-msgid "New password again"
-msgstr "Nueva contraseña nuevamente"
-
-#: templates/authopenid/changepw.html:30 templates/authopenid/settings.html:29
-msgid "Change password"
-msgstr "Cambiar contraseña"
+msgstr ""
-#: templates/authopenid/complete.html:5
+#: templates/authopenid/complete.html:19
msgid "Connect your OpenID with this site"
-msgstr "Vincular tu OpenID con este sitio"
+msgstr ""
-#: templates/authopenid/complete.html:8
+#: templates/authopenid/complete.html:22
msgid "Connect your OpenID with your account on this site"
-msgstr "Vincular tu OpenID con tu cuenta en este sitio"
+msgstr ""
+
+#: templates/authopenid/complete.html:27
+#, python-format
+msgid "register new %(provider)s account info, see %(gravatar_faq_url)s"
+msgstr ""
+
+#: templates/authopenid/complete.html:31
+#, python-format
+msgid ""
+"%(username)s already exists, choose another name for \n"
+" %(provider)s. Email is required too, see %"
+"(gravatar_faq_url)s\n"
+" "
+msgstr ""
-#: templates/authopenid/complete.html:12
+#: templates/authopenid/complete.html:35
#, python-format
-msgid "register new %(provider)s account info"
-msgstr "Registrar una nueva cuenta %(provider)s."
+msgid ""
+"register new external %(provider)s account info, see %(gravatar_faq_url)s"
+msgstr ""
-#: templates/authopenid/complete.html:14
+#: templates/authopenid/complete.html:40
msgid "This account already exists, please use another."
-msgstr "Esta cuenta ya existe, por favor usar otra."
+msgstr ""
-#: templates/authopenid/complete.html:19 templates/authopenid/complete.html:32
-#: templates/authopenid/signin.html:120
+#: templates/authopenid/complete.html:55
msgid "Sorry, looks like we have some errors:"
-msgstr "Ups, parece que hay errores:"
+msgstr ""
-#: templates/authopenid/complete.html:47
+#: templates/authopenid/complete.html:76
msgid "Screen name label"
-msgstr "Nombre de Usuario"
+msgstr ""
-#: templates/authopenid/complete.html:48
+#: templates/authopenid/complete.html:83
msgid "Email address label"
-msgstr "Su email (correo electrónico)"
+msgstr ""
+
+#: templates/authopenid/complete.html:89 templates/authopenid/signup.html:15
+msgid "receive updates motivational blurb"
+msgstr ""
+
+#: templates/authopenid/complete.html:93
+msgid "Tag filter tool will be your right panel, once you log in."
+msgstr ""
-#: templates/authopenid/complete.html:49
+#: templates/authopenid/complete.html:95
msgid "create account"
-msgstr "crear cuenta"
+msgstr ""
-#: templates/authopenid/complete.html:56
+#: templates/authopenid/complete.html:104
msgid "Existing account"
-msgstr "Cuenta existente"
+msgstr ""
-#: templates/authopenid/complete.html:57
+#: templates/authopenid/complete.html:105
msgid "user name"
-msgstr "nombre de usuario"
+msgstr ""
-#: templates/authopenid/complete.html:58
+#: templates/authopenid/complete.html:106
msgid "password"
-msgstr "contraseña"
-
-#: templates/authopenid/complete.html:61
-msgid "Register"
-msgstr "Registrarse"
-
-#: templates/authopenid/complete.html:62 templates/authopenid/signin.html:138
-msgid "Forgot your password?"
-msgstr "¿Olvidaste tu contraseña?"
-
-#: templates/authopenid/confirm_email.txt:2
-msgid "Thank you for registering at our Q&A forum!"
msgstr ""
-#: templates/authopenid/confirm_email.txt:4
-msgid "Your account details are:"
+#: templates/authopenid/complete.html:111
+msgid "Register"
msgstr ""
-#: templates/authopenid/confirm_email.txt:6
-#: templates/authopenid/sendpw_email.txt:7
-msgid "Username:"
-msgstr "Nombre de usuario:"
-
-#: templates/authopenid/confirm_email.txt:7
-#: templates/authopenid/delete.html:20
-msgid "Password:"
-msgstr "Contraseña"
-
-#: templates/authopenid/confirm_email.txt:9
-msgid "Please sign in here:"
+#: templates/authopenid/complete.html:112 templates/authopenid/signin.html:140
+msgid "Forgot your password?"
msgstr ""
-#: templates/authopenid/confirm_email.txt:12
-#: templates/authopenid/email_validation.txt:14
-#: templates/authopenid/sendpw_email.txt:13
-msgid ""
-"Sincerely,\n"
-"Forum Administrator"
+#: templates/authopenid/delete.html:4 templates/authopenid/settings.html:38
+msgid "Delete account"
msgstr ""
-#: templates/authopenid/delete.html:9
+#: templates/authopenid/delete.html:8
msgid "Account: delete account"
-msgstr "Cuenta: borrar cuenta"
+msgstr ""
-#: templates/authopenid/delete.html:13
+#: templates/authopenid/delete.html:12
msgid ""
"Note: After deleting your account, anyone will be able to register this "
"username."
msgstr ""
-"Nota: Luego de borrar tu cuenta, cualquiera va a poder registrarse con este "
-"nombre de usuario."
-#: templates/authopenid/delete.html:17
+#: templates/authopenid/delete.html:16
msgid "Check confirm box, if you want delete your account."
-msgstr "Marca caja de confirmación, si deseas borrar tu cuenta."
+msgstr ""
-#: templates/authopenid/delete.html:32
+#: templates/authopenid/delete.html:19
+msgid "Password:"
+msgstr ""
+
+#: templates/authopenid/delete.html:31
msgid "I am sure I want to delete my account."
-msgstr "Estoy seguro que quiero borrar mi cuenta."
+msgstr ""
-#: templates/authopenid/delete.html:33
+#: templates/authopenid/delete.html:32
msgid "Password/OpenID URL"
-msgstr "Contraseña/OpenID URL"
+msgstr ""
-#: templates/authopenid/delete.html:33
+#: templates/authopenid/delete.html:32
msgid "(required for your security)"
-msgstr "(requerido por tu seguridad)"
-
-#: templates/authopenid/delete.html:35
-msgid "Delete account permanently"
-msgstr "Borrar la cuenta de forma permanente"
-
-#: templates/authopenid/email_validation.txt:2
-msgid "Greetings from the Q&A forum"
msgstr ""
-#: templates/authopenid/email_validation.txt:4
-msgid "To make use of the Forum, please follow the link below:"
+#: templates/authopenid/delete.html:34
+msgid "Delete account permanently"
msgstr ""
-#: templates/authopenid/email_validation.txt:8
-msgid "Following the link above will help us verify your email address."
+#: templates/authopenid/external_legacy_login_info.html:4
+#: templates/authopenid/external_legacy_login_info.html:7
+msgid "Traditional login information"
msgstr ""
-#: templates/authopenid/email_validation.txt:10
-msgid ""
-"If you beleive that this message was sent in mistake - \n"
-"no further action is needed. Just ingore this email, we apologize\n"
-"for any inconvenience"
+#: templates/authopenid/external_legacy_login_info.html:17
+msgid "how to login with password through external login website"
msgstr ""
-#: templates/authopenid/sendpw.html:4 templates/authopenid/sendpw.html.py:8
+#: templates/authopenid/sendpw.html:4 templates/authopenid/sendpw.html.py:7
msgid "Send new password"
-msgstr "Enviar nueva contraseña"
-
-#: templates/authopenid/sendpw.html:12
-msgid "Lost your password? No problem - here you can reset it."
-msgstr "¿Haz perdido tu contraseña? No hay problema - aquí puedes re-crearla."
-
-#: templates/authopenid/sendpw.html:13
-msgid ""
-"Please enter your username below and new password will be sent to your "
-"registered e-mail"
msgstr ""
-"Por favor, ingresa tu nombre de usuario y una nueva contraseña será enviada "
-"a la dirección de email registrada."
-
-#: templates/authopenid/sendpw.html:28
-msgid "User name"
-msgstr "Nombre de usuario"
-
-#: templates/authopenid/sendpw.html:30
-msgid "Reset password"
-msgstr "Re-crear contraseña"
-
-#: templates/authopenid/sendpw.html:30
-msgid "return to login"
-msgstr "volver a 'Ingresar'"
-#: templates/authopenid/sendpw.html:33
-msgid ""
-"Note: your new password will be activated only after you click the "
-"activation link in the email message"
+#: templates/authopenid/sendpw.html:10
+msgid "password recovery information"
msgstr ""
-"Nota: tu nueva contraseña solo será activada luego de que hagas click en el "
-"link de activación en el email enviado."
-#: templates/authopenid/sendpw_email.txt:2
-#, python-format
-msgid ""
-"Someone has requested to reset your password on %(site_url)s.\n"
-"If it were not you, it is safe to ignore this email."
+#: templates/authopenid/sendpw.html:21
+msgid "Reset password"
msgstr ""
-#: templates/authopenid/sendpw_email.txt:5
-msgid "Your new account details are:"
+#: templates/authopenid/sendpw.html:22
+msgid "return to login"
msgstr ""
-#: templates/authopenid/sendpw_email.txt:8
-#, fuzzy
-msgid "New password:"
-msgstr "Nueva contraseña:"
-
-#: templates/authopenid/sendpw_email.txt:10
-msgid "To confirm that you wanted to reset your password please visit:"
+#: templates/authopenid/settings.html:4
+msgid "Account functions"
msgstr ""
#: templates/authopenid/settings.html:30
msgid "Give your account a new password."
-msgstr "Crea una nueva contraseña para tu cuenta."
+msgstr ""
#: templates/authopenid/settings.html:31
msgid "Change email "
-msgstr "Cambiar email "
+msgstr ""
#: templates/authopenid/settings.html:32
msgid "Add or update the email address associated with your account."
-msgstr "Agrega o actualiza el email asociado a tu cuenta."
+msgstr ""
#: templates/authopenid/settings.html:35
msgid "Change openid associated to your account"
-msgstr "Cambia el OpenID asociado a tu cuenta"
-
-#: templates/authopenid/settings.html:38
-msgid "Delete account"
-msgstr "Eliminar cuenta"
+msgstr ""
#: templates/authopenid/settings.html:39
msgid "Erase your username and all your data from website"
-msgstr "Eliminar tu nombre de usuario y toda tu información del sitio"
+msgstr ""
-#: templates/authopenid/signin.html:4 templates/authopenid/signin.html:21
+#: templates/authopenid/signin.html:5 templates/authopenid/signin.html:21
msgid "User login"
-msgstr "Ingreso de usuario"
+msgstr ""
#: templates/authopenid/signin.html:28
#, python-format
@@ -2557,10 +3078,6 @@ msgid ""
"log in\n"
" "
msgstr ""
-"\n"
-" Tu respuesta a %(title)s %(summary)s será publicada una vez "
-"que ingreses \n"
-" "
#: templates/authopenid/signin.html:35
#, python-format
@@ -2569,127 +3086,85 @@ msgid ""
" %(title)s %(summary)s will be posted once you log in\n"
" "
msgstr ""
-"Tu pregunta \n"
-" %(title)s %(summary)s será publicada una vez que ingreses\n"
-" "
-#: templates/authopenid/signin.html:40
+#: templates/authopenid/signin.html:42
msgid "Click to sign in through any of these services."
-msgstr "Clickea para entrar por cualquiera de estos servicios."
+msgstr ""
-#: templates/authopenid/signin.html:103
+#: templates/authopenid/signin.html:117
msgid "Enter your <span id=\"enter_your_what\">Provider user name</span>"
-msgstr "Ingresa tu <span id=\"enter_your_what\">nombre de usuario</span>"
+msgstr ""
-#: templates/authopenid/signin.html:110
+#: templates/authopenid/signin.html:124
msgid ""
"Enter your <a class=\"openid_logo\" href=\"http://openid.net\">OpenID</a> "
"web address"
msgstr ""
-"Ingresa tu dirección (URL) de <a class=\"openid_logo\" href=\"http://openid."
-"net\">OpenID</a>"
-#: templates/authopenid/signin.html:112 templates/authopenid/signin.html:137
+#: templates/authopenid/signin.html:126 templates/authopenid/signin.html:138
msgid "Login"
-msgstr "Ingresar"
+msgstr ""
-#: templates/authopenid/signin.html:116
-msgid "we support two login modes"
-msgstr "soportamos dos tipos de ingreso"
+#: templates/authopenid/signin.html:129
+msgid "Enter your login name and password"
+msgstr ""
-#: templates/authopenid/signin.html:134
-msgid "Use login name and password"
-msgstr "Nombre de usuario y contraseña"
+#: templates/authopenid/signin.html:133
+msgid "Login name"
+msgstr ""
#: templates/authopenid/signin.html:135
-msgid "Login name"
-msgstr "Nombre de usuario"
+msgid "Password"
+msgstr ""
#: templates/authopenid/signin.html:139
-msgid "Create new account"
-msgstr "Crear cuenta nueva"
+msgid "Create account"
+msgstr ""
-#: templates/authopenid/signin.html:148
+#: templates/authopenid/signin.html:149
msgid "Why use OpenID?"
-msgstr "¿Porqué usar OpenID?"
+msgstr ""
-#: templates/authopenid/signin.html:151
+#: templates/authopenid/signin.html:152
msgid "with openid it is easier"
-msgstr "Con OpenID no necesitas crear un nuevo nombre de usuario y contraseña."
+msgstr ""
-#: templates/authopenid/signin.html:154
+#: templates/authopenid/signin.html:155
msgid "reuse openid"
msgstr ""
-"Puedes de forma segura re-usar el mismo nombre de usuario para todos los "
-"sitios que acepten OpenID."
-#: templates/authopenid/signin.html:157
+#: templates/authopenid/signin.html:158
msgid "openid is widely adopted"
msgstr ""
-"OpenID es extensamente usado. Hay más de 160,000,000 cuentas de OpenID en "
-"uso en el mundo. Mas de 10,000 sitios aceptan OpenID."
-#: templates/authopenid/signin.html:160
+#: templates/authopenid/signin.html:161
msgid "openid is supported open standard"
msgstr ""
-"OpenID es basado en un standard abierto, apoyado por muchas organizaciones."
-#: templates/authopenid/signin.html:165
+#: templates/authopenid/signin.html:166
msgid "Find out more"
-msgstr "Averigua más"
+msgstr ""
-#: templates/authopenid/signin.html:166
+#: templates/authopenid/signin.html:167
msgid "Get OpenID"
-msgstr "Adquiere una OpenID"
+msgstr ""
-#: templates/authopenid/signup.html:4 templates/authopenid/signup.html.py:8
+#: templates/authopenid/signup.html:4
msgid "Signup"
-msgstr "Registrate"
+msgstr ""
-#: templates/authopenid/signup.html:12
-msgid ""
-"We support two types of user registration: conventional username/password, "
-"and"
+#: templates/authopenid/signup.html:8
+msgid "Create login name and password"
msgstr ""
-"Soportamos dos formas de registro de usuario: convencional usuario/"
-"contraseña, y"
-#: templates/authopenid/signup.html:12
-msgid "the OpenID method"
-msgstr "OpenID"
+#: templates/authopenid/signup.html:10
+msgid "Traditional signup info"
+msgstr ""
#: templates/authopenid/signup.html:17
-msgid "Sorry, looks like we have some errors"
-msgstr "Ups, parece que hay errores."
-
-#: templates/authopenid/signup.html:35
-msgid "Conventional registration"
-msgstr "Registro clásico"
-
-#: templates/authopenid/signup.html:36
-msgid "choose a user name"
-msgstr "elije un nombre de usuario"
-
-#: templates/authopenid/signup.html:42
-msgid "back to login"
-msgstr "volver al ingreso de usuario"
-
-#: templates/authopenid/signup.html:46
-msgid "Register with your OpenID"
-msgstr "Registrate con tu OpenID"
-
-#: templates/authopenid/signup.html:49
-msgid "Login with your OpenID"
-msgstr "Ingresar con tu OpenID"
-
-#~ msgid "site title"
-#~ msgstr "Preguntalo.com.uy"
-
-#~ msgid "Have a total of"
-#~ msgstr "Hay un total de"
-
-#~ msgid "/account/"
-#~ msgstr "/cuenta/"
+msgid "Create Account"
+msgstr ""
-#~ msgid "content/"
-#~ msgstr "contenido/"
+#: templates/authopenid/signup.html:19
+msgid "return to OpenID login"
+msgstr ""
diff --git a/middleware/__init__.py~HEAD b/middleware/__init__.py~HEAD
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/middleware/__init__.py~HEAD
diff --git a/rmpyc b/rmpyc
deleted file mode 100755
index 014575f6..00000000
--- a/rmpyc
+++ /dev/null
@@ -1 +0,0 @@
-rm `find . -name '*.pyc'`
diff --git a/session_messages/.svn/all-wcprops b/session_messages/.svn/all-wcprops
new file mode 100644
index 00000000..2a15b353
--- /dev/null
+++ b/session_messages/.svn/all-wcprops
@@ -0,0 +1,23 @@
+K 25
+svn:wc:ra_dav:version-url
+V 38
+/svn/!svn/ver/5/trunk/session_messages
+END
+__init__.py
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/5/trunk/session_messages/__init__.py
+END
+models.py
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/2/trunk/session_messages/models.py
+END
+context_processors.py
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/2/trunk/session_messages/context_processors.py
+END
diff --git a/session_messages/.svn/dir-prop-base b/session_messages/.svn/dir-prop-base
new file mode 100644
index 00000000..4cc643b7
--- /dev/null
+++ b/session_messages/.svn/dir-prop-base
@@ -0,0 +1,6 @@
+K 10
+svn:ignore
+V 6
+*.pyc
+
+END
diff --git a/session_messages/.svn/entries b/session_messages/.svn/entries
new file mode 100644
index 00000000..67c0db8a
--- /dev/null
+++ b/session_messages/.svn/entries
@@ -0,0 +1,64 @@
+8
+
+dir
+5
+http://django-session-messages.googlecode.com/svn/trunk/session_messages
+http://django-session-messages.googlecode.com/svn
+
+
+
+2009-03-10T23:30:03.043791Z
+5
+carl.j.meyer
+has-props
+
+svn:special svn:externals svn:needs-lock
+
+
+
+
+
+
+
+
+
+
+
+b8288d2d-7354-0410-af5b-714f73743f4b
+
+__init__.py
+file
+
+
+
+
+2009-10-25T23:36:02.000000Z
+89aa0f71c9973e4889e5fad0b4771a34
+2009-03-10T23:30:03.043791Z
+5
+carl.j.meyer
+
+models.py
+file
+
+
+
+
+2009-10-25T23:36:02.000000Z
+c5b4f274dbb06bc66a14f0c18c9115cd
+2008-08-14T23:13:23.180432Z
+2
+carl.j.meyer
+
+context_processors.py
+file
+
+
+
+
+2009-10-25T23:36:02.000000Z
+24779c7e504d3f7f1918fdf3fe8096bc
+2008-08-14T23:13:23.180432Z
+2
+carl.j.meyer
+
diff --git a/session_messages/.svn/format b/session_messages/.svn/format
new file mode 100644
index 00000000..45a4fb75
--- /dev/null
+++ b/session_messages/.svn/format
@@ -0,0 +1 @@
+8
diff --git a/session_messages/.svn/text-base/__init__.py.svn-base b/session_messages/.svn/text-base/__init__.py.svn-base
new file mode 100644
index 00000000..0136c888
--- /dev/null
+++ b/session_messages/.svn/text-base/__init__.py.svn-base
@@ -0,0 +1,36 @@
+"""
+Lightweight session-based messaging system.
+
+Time-stamp: <2009-03-10 19:22:29 carljm __init__.py>
+
+"""
+VERSION = (0, 1, 'pre')
+
+def create_message (request, message):
+ """
+ Create a message in the current session.
+
+ """
+ assert hasattr(request, 'session'), "django-session-messages requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
+
+ try:
+ request.session['messages'].append(message)
+ except KeyError:
+ request.session['messages'] = [message]
+
+def get_and_delete_messages (request, include_auth=False):
+ """
+ Get and delete all messages for current session.
+
+ Optionally also fetches user messages from django.contrib.auth.
+
+ """
+ assert hasattr(request, 'session'), "django-session-messages requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
+
+ messages = request.session.pop('messages', [])
+
+ if include_auth and request.user.is_authenticated():
+ messages.extend(request.user.get_and_delete_messages())
+
+ return messages
+
diff --git a/session_messages/.svn/text-base/context_processors.py.svn-base b/session_messages/.svn/text-base/context_processors.py.svn-base
new file mode 100644
index 00000000..df9840fd
--- /dev/null
+++ b/session_messages/.svn/text-base/context_processors.py.svn-base
@@ -0,0 +1,48 @@
+"""
+Context processor for lightweight session messages.
+
+Time-stamp: <2008-07-19 23:16:19 carljm context_processors.py>
+
+"""
+from django.utils.encoding import StrAndUnicode
+
+from session_messages import get_and_delete_messages
+
+def session_messages (request):
+ """
+ Returns session messages for the current session.
+
+ """
+ return { 'session_messages': LazyMessages(request) }
+
+class LazyMessages (StrAndUnicode):
+ """
+ Lazy message container, so messages aren't actually retrieved from
+ session and deleted until the template asks for them.
+
+ """
+ def __init__(self, request):
+ self.request = request
+
+ def __iter__(self):
+ return iter(self.messages)
+
+ def __len__(self):
+ return len(self.messages)
+
+ def __nonzero__(self):
+ return bool(self.messages)
+
+ def __unicode__(self):
+ return unicode(self.messages)
+
+ def __getitem__(self, *args, **kwargs):
+ return self.messages.__getitem__(*args, **kwargs)
+
+ def _get_messages(self):
+ if hasattr(self, '_messages'):
+ return self._messages
+ self._messages = get_and_delete_messages(self.request)
+ return self._messages
+ messages = property(_get_messages)
+
diff --git a/session_messages/.svn/text-base/models.py.svn-base b/session_messages/.svn/text-base/models.py.svn-base
new file mode 100644
index 00000000..b67ead6d
--- /dev/null
+++ b/session_messages/.svn/text-base/models.py.svn-base
@@ -0,0 +1,3 @@
+"""
+blank models.py
+"""
diff --git a/settings.py b/settings.py
index 3ffc6d4f..775bda45 100755
--- a/settings.py
+++ b/settings.py
@@ -2,7 +2,6 @@
# Django settings for lanai project.
import os.path
import sys
-
SITE_ID = 1
ADMIN_MEDIA_PREFIX = '/forum/admin/media/'
diff --git a/settings_local.py.dist b/settings_local.py.dist
new file mode 100755
index 00000000..2251e58e
--- /dev/null
+++ b/settings_local.py.dist
@@ -0,0 +1,107 @@
+# encoding:utf-8
+import os.path
+from django.utils.translation import ugettext as _
+
+SITE_SRC_ROOT = os.path.dirname(__file__)
+LOG_FILENAME = 'django.lanai.log'
+
+#for logging
+import logging
+logging.basicConfig(filename=os.path.join(SITE_SRC_ROOT, 'log', LOG_FILENAME), level=logging.DEBUG,)
+def check_local_setting(name, value):
+ local_vars = locals()
+ if name in local_vars and local_var[name] == value:
+ return True
+ else:
+ return False
+
+SITE_SRC_ROOT = os.path.dirname(__file__)
+LOG_FILENAME = 'django.osqa.log'
+
+#for logging
+import logging
+logging.basicConfig(
+ filename=os.path.join(SITE_SRC_ROOT, 'log', LOG_FILENAME),
+ level=logging.DEBUG,
+ format='%(pathname)s TIME: %(asctime)s MSG: %(filename)s:%(funcName)s:%(lineno)d %(message)s',
+)
+
+#ADMINS and MANAGERS
+ADMINS = (('Forum Admin', 'forum@example.com'),)
+MANAGERS = ADMINS
+
+#DEBUG SETTINGS
+DEBUG = False
+TEMPLATE_DEBUG = DEBUG
+INTERNAL_IPS = ('127.0.0.1',)
+
+DATABASE_NAME = 'osqa' # Or path to database file if using sqlite3.
+DATABASE_USER = '' # Not used with sqlite3.
+DATABASE_PASSWORD = '' # Not used with sqlite3.
+DATABASE_ENGINE = 'mysql' #mysql, etc
+DATABASE_HOST = ''
+DATABASE_PORT = ''
+
+#email server settings
+SERVER_EMAIL = ''
+DEFAULT_FROM_EMAIL = ''
+EMAIL_HOST_USER = ''
+EMAIL_HOST_PASSWORD = ''
+EMAIL_SUBJECT_PREFIX = '[OSQA] '
+EMAIL_HOST='osqa.net'
+EMAIL_PORT='25'
+EMAIL_USE_TLS=False
+
+FORUM_SCRIPT_ALIAS = '' #no leading slash, default = '' empty string
+
+#LOCALIZATIONS
+TIME_ZONE = 'Asia/Chongqing Asia/Chungking'
+# LANGUAGE_CODE = 'en-us'
+
+#OTHER SETTINGS
+APP_COPYRIGHT = 'Copyright CNPROG.COM 2009'
+APP_TITLE = u'OSQA: Open Source Q&A Forum'
+APP_SHORT_NAME = u'OSQA'
+APP_KEYWORDS = u'OSQA,CNPROG,forum,community'
+APP_DESCRIPTION = u'Ask and answer questions.'
+APP_INTRO = u'<p>Ask and answer questions, make the world better!</p>'
+APP_COPYRIGHT = 'Copyright OSQA, 2009. Some rights reserved under creative commons license.'
+LOGIN_URL = '/%s%s%s' % (FORUM_SCRIPT_ALIAS,'account/','signin/')
+GREETING_URL = LOGIN_URL #may be url of "faq" page or "about", etc
+
+USE_I18N = True
+LANGUAGE_CODE = 'en'
+EMAIL_VALIDATION = 'off' #string - on|off
+MIN_USERNAME_LENGTH = 1
+EMAIL_UNIQUE = False
+APP_URL = 'http://osqa.net' #used by email notif system and RSS
+GOOGLE_SITEMAP_CODE = ''
+BOOKS_ON = False
+WIKI_ON = True
+USE_EXTERNAL_LEGACY_LOGIN = False
+EXTERNAL_LEGACY_LOGIN_HOST = 'login.osqa.net'
+EXTERNAL_LEGACY_LOGIN_PORT = 80
+EXTERNAL_LEGACY_LOGIN_PROVIDER_NAME = '<span class="orange">OSQA</span>'
+FEEDBACK_SITE_URL = None #None or url
+EDITABLE_SCREEN_NAME = False #True or False - can user change screen name?
+
+DJANGO_VERSION = 1.1
+RESOURCE_REVISION=4
+
+USE_SPHINX_SEARCH = False #if True all SPHINX_* settings are required
+#also sphinx search engine and djangosphinxs app must be installed
+#sample sphinx configuration file is /sphinx/sphinx.conf
+SPHINX_API_VERSION = 0x113 #refer to djangosphinx documentation
+SPHINX_SEARCH_INDICES=('osqa',) #a tuple of index names remember about a comma after the
+#last item, especially if you have just one :)
+SPHINX_SERVER='localhost'
+SPHINX_PORT=3312
+
+#please get these at recaptcha.net
+RECAPTCHA_PRIVATE_KEY='...'
+RECAPTCHA_PUBLIC_KEY='...'
+
+#Facebook settings
+USE_FB_CONNECT=True
+FB_API_KEY='' #your api key from facebook
+FB_SECRET='' #your application secret
diff --git a/templates/unanswered.html b/templates/unanswered.html
new file mode 100644
index 00000000..80a23631
--- /dev/null
+++ b/templates/unanswered.html
@@ -0,0 +1,132 @@
+{% extends "base.html" %}
+<!-- unanswered.html -->
+{% load extra_tags %}
+{% load i18n %}
+{% load humanize %}
+{% load extra_filters %}
+{% load smart_if %}
+{% block title %}{% spaceless %}{% trans "Unanswered questions" %}{% endspaceless %}{% endblock %}
+{% block forejs %}
+ <script type="text/javascript">
+ $().ready(function(){
+ $("#nav_unanswered").attr('className',"on");
+ });
+
+ </script>
+{% endblock %}
+{% block content %}
+<div class="tabBar">
+ <span class="headQuestions">{% trans "Unanswered questions" %}</span>
+ <div class="tabsA">
+ <a id="latest" href="{% url unanswered %}?sort=latest" class="on" title="{% trans "most recently asked questions" %}">{% trans "newest" %}</a>
+ </div>
+</div>
+<div id="listA">
+ {% for question in questions.object_list %}
+ <div class="qstA">
+ <h2>
+ <a href="{{ question.get_absolute_url }}">{{ question.get_question_title }}</a>
+ </h2>
+ <div class="stat">
+ <table>
+ <tr>
+ <td><span class="num">{{ question.answer_count|intcomma }}</span> </td>
+ <td><span class="num">{{ question.score|intcomma }}</span> </td>
+ <td><span class="num">{{ question.view_count|cnprog_intword|safe }}</span> </td>
+ </tr>
+ <tr>
+ <td><span class="unit">{% trans "answers" %}</span></td>
+ <td><span class="unit">{% trans "votes" %}</span></td>
+ <td><span class="unit">{% trans "views" %}</span></td>
+ </tr>
+ </table>
+ </div>
+
+ <div class="summary">
+ {{ question.summary }}...
+ </div>
+
+ {% ifequal tab_id 'active'%}
+ {% if question.wiki and settings.WIKI_ON %}
+ <span class="from wiki">{% trans "community wiki" %}</span>
+ <span class="date" title="{{ question.added_at }}">{% diff_date question.added_at %}</span>
+ {% else %}
+ <div class="from">
+ {% comment %}{% gravatar question.last_activity_by 24 %}{% endcomment %}
+ <span class="author"><a href="{{ question.last_activity_by.get_profile_url }}">{{ question.last_activity_by }}</a></span>
+ <span class="score">{% get_score_badge question.last_activity_by %} </span>
+ <span class="date" title="{{ question.last_activity_at }}">{% diff_date question.last_activity_at %}</span>
+ </div>
+ {% endif %}
+ {% else %}
+ {% if question.wiki and settings.WIKI_ON %}
+ <span class="from wiki">{% trans "community wiki" %}</span>
+ <span class="date" title="{{ question.added_at }}">{% diff_date question.added_at %}</span>
+ {% else %}
+ <div class="from">
+ {% comment %}{% gravatar question.author 24 %}{% endcomment %}
+ {% if question.last_activity_at != question.added_at %}
+ {% if question.author.id != question.last_activity_by.id %}
+ {% trans "Posted:" %}
+ <span class="author"><a href="{{ question.author.get_profile_url }}">{{ question.author }}</a></span>
+ <span class="score">{% get_score_badge question.author %} </span>
+ / {% trans "Updated:" %}
+ <span class="author"><a href="{{ question.last_activity_by.get_profile_url }}">{{ question.last_activity_by }}</a></span>
+ <span class="score">{% get_score_badge question.last_activity_by %} </span>
+ <span class="date" title="{{ question.last_activity_at }}">{% diff_date question.last_activity_at %}</span>
+ {% else %}
+ {% trans "Updated:" %}
+ <span class="author"><a href="{{ question.last_activity_by.get_profile_url }}">{{ question.last_activity_by }}</a></span>
+ <span class="score">{% get_score_badge question.last_activity_by %} </span>
+ <span class="date" title="{{ question.last_activity_at }}">{% diff_date question.last_activity_at %}</span>
+ {% endif %}
+ {% else %}
+ {% trans "Posted:" %}
+ <span class="author"><a href="{{ question.author.get_profile_url }}">{{ question.author }}</a></span>
+ <span class="score">{% get_score_badge question.author %} </span>
+ <span class="date" title="{{ question.added_at }}">{% diff_date question.added_at %}</span>
+ {% endif %}
+ </div>
+ {% endif %}
+ {% endifequal %}
+
+ <div class="tags">
+ {% for tag in question.tagname_list %}
+ <a href="{% url forum.views.tag tag|urlencode %}" title="{% trans "see questions tagged" %}'{{ tag }}'{% trans "using tags" %}" rel="tag">{{ tag }}</a>
+ {% endfor %}
+ </div>
+ </div>
+ {% endfor %}
+</div>
+{% endblock %}
+
+{% block tail %}
+ <div class="pager">
+ {% cnprog_paginator context %}
+ </div>
+ <div class="pagesize">
+ {% cnprog_pagesize context %}
+ </div>
+{% endblock %}
+
+{% block sidebar %}
+<div class="boxC">
+ {% blocktrans with questions_count|intcomma as num_q %}have {{num_q}} unanswered questions{% endblocktrans %}
+ <!---<p>问题按 <strong>问题创建时间</strong> 排序。最新加入的问题将显示在最前面。</p>-->
+</div>
+<div class="boxC">
+ <h3 class="subtitle">{% trans "Related tags" %}</h3>
+ <div class="body">
+ <div class="tags">
+ {% for tag in tags %}
+ <a rel="tag" title="{% trans "see questions tagged"%}'{{ tag.name }}'{% trans "using tags" %}" href="{% url forum.views.tag tag.name|urlencode %}">{{ tag.name }}</a>
+ <span class="tag-number"> &#215; {{ tag.used_count|intcomma }}</span>
+ <br/>
+ {% endfor %}
+ <br/>
+ </div>
+ </div>
+</div>
+
+{% endblock %}
+<!-- end unanswered.html -->