Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

merge Evgeny's English and Botum's Spanish translations

  • Loading branch information...
commit b6aa7c847234ed985ec693c53633a7f0f3e2cd9c 1 parent 0173b3d
@chagel authored
Showing with 7,773 additions and 1,083 deletions.
  1. +30 −1 development.log
  2. +9 −9 django_authopenid/forms.py
  3. +36 −38 forum/const.py
  4. +7 −5 forum/feed.py
  5. +43 −44 forum/forms.py
  6. +5 −4 forum/models.py
  7. +30 −22 forum/templatetags/extra_tags.py
  8. +21 −21 forum/user.py
  9. +6 −5 forum/views.py
  10. BIN  locale/en/LC_MESSAGES/django.mo
  11. +1,973 −0 locale/en/LC_MESSAGES/django.po
  12. BIN  locale/es/LC_MESSAGES/django.mo
  13. +1,973 −0 locale/es/LC_MESSAGES/django.po
  14. BIN  locale/zh_CN/LC_MESSAGES/django.mo
  15. +2,070 −248 locale/zh_CN/LC_MESSAGES/django.po
  16. 0  middleware/__init__.py → log/cnprog.log
  17. +14 −13 templates/404.html
  18. +15 −13 templates/500.html
  19. +16 −67 templates/answer_edit.html
  20. +589 −0 templates/answer_edit_tips.html
  21. +18 −69 templates/ask.html
  22. +0 −4 templates/authopenid/changeemail.html
  23. +19 −18 templates/authopenid/complete.html
  24. +9 −8 templates/authopenid/sendpw.html
  25. +5 −5 templates/authopenid/settings.html
  26. +23 −24 templates/authopenid/signin.html
  27. +13 −12 templates/authopenid/signup.html
  28. +6 −7 templates/badge.html
  29. +14 −14 templates/badges.html
  30. +19 −11 templates/base.html
  31. +18 −10 templates/base_content.html
  32. +27 −25 templates/book.html
  33. +9 −9 templates/close.html
  34. BIN  templates/content/images/favicon.ico
  35. +90 −0 templates/content/js/com.cnprog.i18n.js
  36. +76 −33 templates/content/js/com.cnprog.post.js
  37. +0 −1  templates/content/js/com.cnprog.post.pack.js
  38. +14 −8 templates/content/js/com.cnprog.utils.js
  39. +133 −0 templates/content/js/jquery.i18n.js
  40. +16 −18 templates/content/js/wmd/wmd.js
  41. +21 −16 templates/header.html
  42. +23 −21 templates/index.html
  43. +6 −6 templates/logout.html
  44. +20 −17 templates/privacy.html
  45. +103 −62 templates/question.html
  46. +17 −68 templates/question_edit.html
  47. +51 −0 templates/question_edit_tips.html
  48. +9 −6 templates/reopen.html
  49. +10 −8 templates/revisions_answer.html
  50. +11 −10 templates/revisions_question.html
  51. +10 −8 templates/tags.html
  52. +30 −25 templates/unanswered.html
  53. +2 −1  templates/user.html
  54. +10 −9 templates/user_edit.html
  55. +3 −1 templates/user_favorites.html
  56. +2 −1  templates/user_footer.html
  57. +19 −15 templates/user_info.html
  58. +3 −1 templates/user_recent.html
  59. +2 −1  templates/user_reputation.html
  60. +4 −2 templates/user_responses.html
  61. +17 −10 templates/user_stats.html
  62. +22 −8 templates/user_tabs.html
  63. +6 −3 templates/user_votes.html
  64. +12 −10 templates/users.html
  65. +14 −8 templates/users_questions.html
View
31 development.log
@@ -1 +1,30 @@
-# development log
+# development
+
+==July 26 2009, Evgeny==
+
+django_authopenid:
+considerably changed user interface
+
+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 -->
View
18 django_authopenid/forms.py
@@ -155,11 +155,11 @@ def clean_username(self):
""" test if username is valid and exist in database """
if 'username' in self.cleaned_data:
if not username_re.search(self.cleaned_data['username']):
- raise forms.ValidationError(u"用户名只能包含英文字母、数字和下划线")
+ raise forms.ValidationError(_('invalid user name'))
if self.cleaned_data['username'] in RESERVED_NAMES:
- raise forms.ValidationError(u'对不起,您不能注册该用户名,请换一个试试')
+ raise forms.ValidationError(_('sorry, this name can not be used, please try another'))
if len(self.cleaned_data['username']) < 3:
- raise forms.ValidationError(u'用户名太短,请使用三个或三个以上字符')
+ raise forms.ValidationError(_('username too short'))
try:
user = User.objects.get(
username__exact = self.cleaned_data['username']
@@ -167,8 +167,8 @@ def clean_username(self):
except User.DoesNotExist:
return self.cleaned_data['username']
except User.MultipleObjectsReturned:
- raise forms.ValidationError(u'该用户名已被注册,请换一个试试')
- raise forms.ValidationError(u'该用户名已被注册,请换个试试')
+ raise forms.ValidationError(_('this name is already in use - please try anoter'))
+ raise forms.ValidationError(_('this name is already in use - please try anoter'))
def clean_email(self):
"""For security reason one unique email in database"""
@@ -250,13 +250,13 @@ class RegistrationForm(forms.Form):
required=False)
username = forms.CharField(max_length=30,
widget=forms.TextInput(attrs=attrs_dict),
- label=u'Username')
+ label=_('choose a username'))
email = forms.EmailField(widget=forms.TextInput(attrs=dict(attrs_dict,
- maxlength=200)), label=u'Email address')
+ maxlength=200)), label=_('your email address'))
password1 = forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict),
- label=u'Password')
+ label=_('choose password'))
password2 = forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict),
- label=u'Password (again, to catch typos)')
+ label=_('retype password'))
def clean_username(self):
"""
View
74 forum/const.py
@@ -1,18 +1,19 @@
-# encoding:utf-8
+# encoding:utf-8
+from django.utils.translation import ugettext as _
"""
All constants could be used in other modules
For reasons that models, views can't have unicode text in this project, all unicode text go here.
"""
CLOSE_REASONS = (
- (1, u'完全重复的问题'),
- (2, u'不是编程技术问题'),
- (3, u'太主观性、引起争吵的问题'),
- (4, u'不是一个可以回答的“问题”'),
- (5, u'问题已经解决,已得到正确答案'),
- (6, u'已经过时、不可重现的问题'),
- (7, u'太局部、本地化的问题'),
- (8, u'恶意言论'),
- (9, u'垃圾广告'),
+ (1, _('duplicate question')),
+ (2, _('question if off-topic or not relevant')),
+ (3, _('too subjective and argumentative')),
+ (4, _('is not an answer to the question')),
+ (5, _('the question is answered, right answer was accepted')),
+ (6, _('problem is not reproducible or outdated')),
+ #(7, u'太局部、本地化的问题',)
+ (7, _('question contains offensive inappropriate, or malicious remarks')),
+ (8, _('spam or advertising')),
)
TYPE_REPUTATION = (
@@ -52,38 +53,35 @@
#TYPE_ACTIVITY_EDIT_ANSWER=18
TYPE_ACTIVITY = (
- (TYPE_ACTIVITY_ASK_QUESTION, u'提问'),
- (TYPE_ACTIVITY_ANSWER, u'回答'),
- (TYPE_ACTIVITY_COMMENT_QUESTION, u'评论问题'),
- (TYPE_ACTIVITY_COMMENT_ANSWER, u'评论回答'),
- (TYPE_ACTIVITY_UPDATE_QUESTION, u'修改问题'),
- (TYPE_ACTIVITY_UPDATE_ANSWER, u'修改回答'),
- (TYPE_ACTIVITY_PRIZE, u'获奖'),
- (TYPE_ACTIVITY_MARK_ANSWER, u'标记最佳答案'),
- (TYPE_ACTIVITY_VOTE_UP, u'投赞成票'),
- (TYPE_ACTIVITY_VOTE_DOWN, u'投反对票'),
- (TYPE_ACTIVITY_CANCEL_VOTE, u'撤销投票'),
- (TYPE_ACTIVITY_DELETE_QUESTION, u'删除问题'),
- (TYPE_ACTIVITY_DELETE_ANSWER, u'删除回答'),
- (TYPE_ACTIVITY_MARK_OFFENSIVE, u'标记垃圾帖'),
- (TYPE_ACTIVITY_UPDATE_TAGS, u'更新标签'),
- (TYPE_ACTIVITY_FAVORITE, u'收藏'),
- (TYPE_ACTIVITY_USER_FULL_UPDATED, u'完成个人所有资料'),
- #(TYPE_ACTIVITY_EDIT_QUESTION, u'编辑问题'),
- #(TYPE_ACTIVITY_EDIT_ANSWER, u'编辑答案'),
+ (TYPE_ACTIVITY_ASK_QUESTION, _('question')),
+ (TYPE_ACTIVITY_ANSWER, _('answer')),
+ (TYPE_ACTIVITY_COMMENT_QUESTION, _('commented question')),
+ (TYPE_ACTIVITY_COMMENT_ANSWER, _('commented answer')),
+ (TYPE_ACTIVITY_UPDATE_QUESTION, _('edited question')),
+ (TYPE_ACTIVITY_UPDATE_ANSWER, _('edited answer')),
+ (TYPE_ACTIVITY_PRIZE, _('received award')),
+ (TYPE_ACTIVITY_MARK_ANSWER, _('marked best answer')),
+ (TYPE_ACTIVITY_VOTE_UP, _('upvoted')),
+ (TYPE_ACTIVITY_VOTE_DOWN, _('downvoted')),
+ (TYPE_ACTIVITY_CANCEL_VOTE, _('canceled vote')),
+ (TYPE_ACTIVITY_DELETE_QUESTION, _('deleted question')),
+ (TYPE_ACTIVITY_DELETE_ANSWER, _('deleted answer')),
+ (TYPE_ACTIVITY_MARK_OFFENSIVE, _('marked offensive')),
+ (TYPE_ACTIVITY_UPDATE_TAGS, _('updated tags')),
+ (TYPE_ACTIVITY_FAVORITE, _('selected favorite')),
+ (TYPE_ACTIVITY_USER_FULL_UPDATED, _('completed user profile')),
)
TYPE_RESPONSE = {
- 'QUESTION_ANSWERED' : u'回答问题',
- 'QUESTION_COMMENTED': u'问题评论',
- 'ANSWER_COMMENTED' : u'回答评论',
- 'ANSWER_ACCEPTED' : u'最佳答案',
+ 'QUESTION_ANSWERED' : 'question_answered',
+ 'QUESTION_COMMENTED': 'question_commented',
+ 'ANSWER_COMMENTED' : 'answer_commented',
+ 'ANSWER_ACCEPTED' : 'answer_accepted',
}
CONST = {
- 'closed' : u' [已关闭]',
- 'deleted' : u' [已删除]',
- 'default_version' : u'初始版本',
- 'retagged' : u'更新了标签',
-
+ 'closed' : _('[closed]'),
+ 'deleted' : _('[deleted]'),
+ 'default_version' : _('initial version'),
+ 'retagged' : _('retagged'),
}
View
12 forum/feed.py
@@ -11,13 +11,15 @@
# Licence: GPL V2
#-------------------------------------------------------------------------------
from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
+from django.utils.translation import ugettext as _
from models import Question
class RssLastestQuestionsFeed(Feed):
- title = u"CNProg程序员问答社区-最新问题"
- link = u"http://www.cnprog.com/questions/"
- description = u"中国程序员的编程技术问答社区。我们做专业的、可协作编辑的技术问答社区。"
+ title = _('site title') + _(' - ') + _('site slogan') + _(' - ')+ _('latest questions')
+ #EDIT!!!
+ link = 'http://where.com/questions/'
+ description = _('meta site content')
#ttl = 10
- copyright = u'Copyright(c)2009.CNPROG.COM'
+ copyright = _('copyright message')
def item_link(self, item):
return '/questions/%s/' % item.id
@@ -38,4 +40,4 @@ def main():
pass
if __name__ == '__main__':
- main()
+ main()
View
87 forum/forms.py
@@ -1,8 +1,9 @@
-import re
+import re
from datetime import date
from django import forms
from models import *
from const import *
+from django.utils.translation import ugettext as _
class TitleField(forms.CharField):
def __init__(self, *args, **kwargs):
@@ -10,13 +11,13 @@ def __init__(self, *args, **kwargs):
self.required = True
self.widget = forms.TextInput(attrs={'size' : 70, 'autocomplete' : 'off'})
self.max_length = 255
- self.label = u'标题'
- self.help_text = u'请输入对问题具有描述性质的标题 - “帮忙!紧急求助!”不是建议的提问方式。'
+ self.label = _('title')
+ self.help_text = _('please enter a descriptive title for your question')
self.initial = ''
def clean(self, value):
if len(value) < 10:
- raise forms.ValidationError(u"标题的长度必须大于10")
+ raise forms.ValidationError(_('title must be > 10 characters'))
return value
@@ -25,13 +26,13 @@ def __init__(self, *args, **kwargs):
super(EditorField, self).__init__(*args, **kwargs)
self.required = True
self.widget = forms.Textarea(attrs={'id':'editor'})
- self.label = u'内容'
+ self.label = _('content')
self.help_text = u''
self.initial = ''
def clean(self, value):
if len(value) < 10:
- raise forms.ValidationError(u"内容至少要10个字符")
+ raise forms.ValidationError(_('question content must be > 10 characters'))
return value
@@ -41,39 +42,37 @@ def __init__(self, *args, **kwargs):
self.required = True
self.widget = forms.TextInput(attrs={'size' : 50, 'autocomplete' : 'off'})
self.max_length = 255
- self.label = u'标签'
- self.help_text = u'多个标签请用空格间隔-最多5个标签。(优先使用自动匹配的英文标签。)'
+ self.label = _('tags')
+ self.help_text = _('please use space to separate tags (this enables autocomplete feature)')
self.initial = ''
- def clean(self, value):
- value = super(TagNamesField, self).clean(value)
- data = value.strip()
- if len(data) < 1:
- raise forms.ValidationError(u'标签不能为空')
- list = data.split(' ')
- list_temp = []
- if len(list) > 5:
- raise forms.ValidationError(u'最多只能有5个标签')
- for tag in list:
- if len(tag) > 20:
- raise forms.ValidationError(u'每个标签的长度不超过20')
-
- #TODO: regex match not allowed characters here
-
- if tag.find('/') > -1 or tag.find('\\') > -1 or tag.find('<') > -1 or tag.find('>') > -1 or tag.find('&') > -1 or tag.find('\'') > -1 or tag.find('"') > -1:
- #if not tagname_re.match(tag):
- raise forms.ValidationError(u'标签请使用英文字母,中文或者数字字符串(. - _ # 也可以)')
- # only keep one same tag
- if tag not in list_temp and len(tag.strip()) > 0:
- list_temp.append(tag)
- return u' '.join(list_temp)
+ def clean(self, value):
+ value = super(TagNamesField, self).clean(value)
+ data = value.strip()
+ if len(data) < 1:
+ raise forms.ValidationError(_('tags are required'))
+ list = data.split(' ')
+ list_temp = []
+ if len(list) > 5:
+ raise forms.ValidationError(_('please use 5 tags or less'))
+ for tag in list:
+ if len(tag) > 20:
+ raise forms.ValidationError(_('tags must be shorter than 20 characters'))
+ #take tag regex from settings
+ tagname_re = re.compile(r'[a-z0-9]+')
+ if not tagname_re.match(tag):
+ raise forms.ValidationError(_('please use following characters in tags: letters \'a-z\', numbers, and characters \'.-_#\''))
+ # only keep one same tag
+ if tag not in list_temp and len(tag.strip()) > 0:
+ list_temp.append(tag)
+ return u' '.join(list_temp)
class WikiField(forms.BooleanField):
def __init__(self, *args, **kwargs):
super(WikiField, self).__init__(*args, **kwargs)
self.required = False
- self.label = u'社区wiki模式'
- self.help_text = u'选择社区wiki模式,问答不计算积分,签名也不显示作者信息'
+ self.label = _('community wiki')
+ self.help_text = _('if you choose community wiki option, the question and answer do not generate points and name of author will not be shown')
class SummaryField(forms.CharField):
@@ -82,8 +81,8 @@ def __init__(self, *args, **kwargs):
self.required = False
self.widget = forms.TextInput(attrs={'size' : 50, 'autocomplete' : 'off'})
self.max_length = 300
- self.label = u'更新概要:'
- self.help_text = u'输入本次修改的简单概述(如:修改了别字,修正了语法,改进了样式等。非必填项。)'
+ self.label = _('update summary:')
+ self.help_text = _('enter a brief summary of your revision (e.g. fixed spelling, grammar, improved style, this field is optional)')
class AskForm(forms.Form):
title = TitleField()
@@ -158,12 +157,12 @@ def __init__(self, answer, revision, *args, **kwargs):
self.fields['text'].initial = revision.text
class EditUserForm(forms.Form):
- email = forms.EmailField(label=u'Email', help_text=u'不会公开,用于头像显示服务', required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35}))
- realname = forms.CharField(label=u'真实姓名', required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35}))
- website = forms.URLField(label=u'个人网站', required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35}))
- city = forms.CharField(label=u'城市', required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35}))
- birthday = forms.DateField(label=u'生日', help_text=u'不会公开,只会显示您的年龄,格式为:YYYY-MM-DD', required=True, widget=forms.TextInput(attrs={'size' : 35}))
- about = forms.CharField(label=u'个人简介', required=False, widget=forms.Textarea(attrs={'cols' : 60}))
+ email = forms.EmailField(label=u'Email', help_text=_('this email does not have to be linked to gravatar'), required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35}))
+ realname = forms.CharField(label=_('Real name'), required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35}))
+ website = forms.URLField(label=_('Website'), required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35}))
+ city = forms.CharField(label=_('Location'), required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35}))
+ birthday = forms.DateField(label=_('Date of birth'), help_text=_('will not be shown, used to calculate age, format: YYYY-MM-DD'), required=False, widget=forms.TextInput(attrs={'size' : 35}))
+ about = forms.CharField(label=_('Profile'), required=False, widget=forms.Textarea(attrs={'cols' : 60}))
def __init__(self, user, *args, **kwargs):
super(EditUserForm, self).__init__(*args, **kwargs)
@@ -173,7 +172,7 @@ def __init__(self, user, *args, **kwargs):
self.fields['city'].initial = user.location
if user.date_of_birth is not None:
- self.fields['birthday'].initial = user.date_of_birth.date()
+ self.fields['birthday'].initial = user.date_of_birth
else:
self.fields['birthday'].initial = '1990-01-01'
self.fields['about'].initial = user.about
@@ -188,7 +187,7 @@ def clean_email(self):
except User.DoesNotExist:
return self.cleaned_data['email']
except User.MultipleObjectsReturned:
- raise forms.ValidationError(u'该电子邮件已被注册,请选择另一个再试。')
- raise forms.ValidationError("该电子邮件帐号已被注册,请选择另一个再试。")
+ raise forms.ValidationError(_('this email has already been registered, please use another one'))
+ raise forms.ValidationError(_('this email has already been registered, please use another one'))
else:
- return self.cleaned_data['email']
+ return self.cleaned_data['email']
View
9 forum/models.py
@@ -10,6 +10,7 @@
from django.contrib.contenttypes.models import ContentType
from django.template.defaultfilters import slugify
from django.db.models.signals import post_delete, post_save, pre_save
+from django.utils.translation import ugettext as _
import django.dispatch
from forum.managers import *
@@ -312,9 +313,9 @@ class Badge(models.Model):
SILVER = 2
BRONZE = 3
TYPE_CHOICES = (
- (GOLD, u'金牌'),
- (SILVER, u'银牌'),
- (BRONZE, u'铜牌'),
+ (GOLD, _('gold')),
+ (SILVER, _('silver')),
+ (BRONZE, _('bronze')),
)
name = models.CharField(max_length=50)
@@ -650,4 +651,4 @@ def record_user_full_updated(instance, **kwargs):
mark_offensive.connect(record_mark_offensive, sender=Answer)
tags_updated.connect(record_update_tags, sender=Question)
post_save.connect(record_favorite_question, sender=FavoriteQuestion)
-user_updated.connect(record_user_full_updated, sender=User)
+user_updated.connect(record_user_full_updated, sender=User)
View
52 forum/templatetags/extra_tags.py
@@ -8,6 +8,7 @@
from django.utils.safestring import mark_safe
from django.utils.timesince import timesince
from forum.const import *
+from django.utils.translation import ugettext as _
register = template.Library()
@@ -110,23 +111,23 @@ def cnprog_pagesize(context):
"pagesize" : context["pagesize"],
"is_paginated": context["is_paginated"]
}
-
+
@register.simple_tag
def get_score_badge(user):
- BADGE_TEMPLATE = '<span class="score" title="%(reputation)s用户积分">%(reputation)s</span>'
+ BADGE_TEMPLATE = '<span class="score" title="%(reputation)s %(reputationword)s">%(reputation)s</span>'
if user.gold > 0 :
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ' <span title="%(gold)s枚金牌">'
- '<span class="badge1"></span>'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(gold)s %(badgesword)s">'
+ '<span class="badge1">&#9679;</span>'
'<span class="badgecount">%(gold)s</span>'
'</span>')
if user.silver > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ' <span title="%(silver)s枚银牌">'
- '<span class="silver"></span>'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(silver)s %(badgesword)s">'
+ '<span class="silver">&#9679;</span>'
'<span class="badgecount">%(silver)s</span>'
'</span>')
if user.bronze > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ' <span title="%(bronze)s枚铜牌">'
- '<span class="bronze"></span>'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(bronze)s %(badgesword)s">'
+ '<span class="bronze">&#9679;</span>'
'<span class="badgecount">%(bronze)s</span>'
'</span>')
BADGE_TEMPLATE = smart_unicode(BADGE_TEMPLATE, encoding='utf-8', strings_only=False, errors='strict')
@@ -135,24 +136,26 @@ def get_score_badge(user):
'gold' : user.gold,
'silver' : user.silver,
'bronze' : user.bronze,
+ 'badgesword' : _('badges'),
+ 'reputationword' : _('reputation points'),
})
-
+
@register.simple_tag
def get_score_badge_by_details(rep, gold, silver, bronze):
- BADGE_TEMPLATE = '<span class="reputation-score" title="%(reputation)s用户积分">%(reputation)s</span>'
+ BADGE_TEMPLATE = '<span class="reputation-score" title="%(reputation)s %(repword)s">%(reputation)s</span>'
if gold > 0 :
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(gold)s枚金牌">'
- '<span class="badge1"></span>'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(gold)s %(badgeword)s">'
+ '<span class="badge1">&#9679;</span>'
'<span class="badgecount">%(gold)s</span>'
'</span>')
if silver > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(silver)s枚银牌">'
- '<span class="badge2"></span>'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(silver)s %(badgeword)s">'
+ '<span class="badge2">&#9679;</span>'
'<span class="badgecount">%(silver)s</span>'
'</span>')
if bronze > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(bronze)s枚铜牌">'
- '<span class="badge3"></span>'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(bronze)s %(badgeword)s">'
+ '<span class="badge3">&#9679;</span>'
'<span class="badgecount">%(bronze)s</span>'
'</span>')
BADGE_TEMPLATE = smart_unicode(BADGE_TEMPLATE, encoding='utf-8', strings_only=False, errors='strict')
@@ -161,19 +164,24 @@ def get_score_badge_by_details(rep, gold, silver, bronze):
'gold' : gold,
'silver' : silver,
'bronze' : bronze,
- })
-
+ 'repword' : _('reputation points'),
+ 'badgeword' : _('badges'),
+ })
+
@register.simple_tag
def get_user_vote_image(dic, key, arrow):
if dic.has_key(key):
if int(dic[key]) == int(arrow):
return '-on'
return ''
-
+
@register.simple_tag
def get_age(birthday):
current_time = datetime.datetime(*time.localtime()[0:6])
- diff = current_time - birthday
+ year = birthday.year
+ month = birthday.month
+ day = birthday.day
+ diff = current_time - datetime.datetime(year,month,day,0,0,0)
return diff.days / 365
@register.simple_tag
@@ -210,8 +218,8 @@ def diff_date(date, limen=2):
if diff_days > limen:
return date
else:
- return timesince(date) + u''
-
+ return timesince(date) + _(' ago')
+
@register.simple_tag
def get_latest_changed_timestamp():
try:
View
42 forum/user.py
@@ -14,61 +14,61 @@ def __init__(self, id, tab_title, tab_description, page_title, view_name, templa
USER_TEMPLATE_VIEWS = (
UserView(
id = 'stats',
- tab_title = _("Overview"),
- tab_description = _('User overview'),
- page_title = _('Overview - User Profile'),
+ tab_title = _('overview'),
+ tab_description = _('user profile'),
+ page_title = _('user profile overview'),
view_name = 'user_stats',
template_file = 'user_stats.html'
),
UserView(
id = 'recent',
- tab_title = _('Recent'),
- tab_description = _("Recent activities"),
- page_title = _('Recent - User Profile'),
+ tab_title = _('recent activity'),
+ tab_description = _('recent user activity'),
+ page_title = _('profile - recent activity'),
view_name = 'user_recent',
template_file = 'user_recent.html',
data_size = 50
),
UserView(
id = 'responses',
- tab_title = _("Response"),
- tab_description = _("Responses from others"),
- page_title = _("Response - User Profile"),
+ tab_title = _('responses'),
+ tab_description = _('comments and answers to others questions'),
+ page_title = _('profile - responses'),
view_name = 'user_responses',
template_file = 'user_responses.html',
data_size = 50
),
UserView(
id = 'reputation',
- tab_title = _("Reputation"),
- tab_description = _("Community reputation"),
- page_title = _("Reputation - User Profile"),
+ tab_title = _('reputation'),
+ tab_description = _('user reputation in the community'),
+ page_title = _('profile - user reputation'),
view_name = 'user_reputation',
template_file = 'user_reputation.html'
),
UserView(
id = 'favorites',
- tab_title = _("Favorites"),
- tab_description = _("User's favorite questions"),
- page_title = _("Favorites - User Profile"),
+ tab_title = _('favorite questions'),
+ tab_description = _('users favorite questions'),
+ page_title = _('profile - favorite questions'),
view_name = 'user_favorites',
template_file = 'user_favorites.html',
data_size = 50
),
UserView(
id = 'votes',
- tab_title = _("Votes"),
- tab_description = _("Votes history"),
- page_title = _("Votes - User Profile"),
+ tab_title = _('casted votes'),
+ tab_description = _('user vote record'),
+ page_title = _('profile - votes'),
view_name = 'user_votes',
template_file = 'user_votes.html',
data_size = 50
),
UserView(
id = 'preferences',
- tab_title = _("Preferences"),
- tab_description = _("User preferences"),
- page_title = _("Preferences - User Profile"),
+ tab_title = _('preferences'),
+ tab_description = _('user preference settings'),
+ page_title = _('profile - user preferences'),
view_name = 'user_preferences',
template_file = 'user_preferences.html'
)
View
11 forum/views.py
@@ -15,6 +15,7 @@
from django.core import serializers
from django.db import transaction
from django.contrib.contenttypes.models import ContentType
+from django.utils.translation import ugettext as _
from utils.html import sanitize_html
from markdown2 import Markdown
@@ -1722,13 +1723,13 @@ class UploadPermissionNotAuthorized(Exception):
result = xml_template % ('Good', '', default_storage.url(new_file_name))
except UploadPermissionNotAuthorized:
- result = xml_template % ('', u"上传图片只限于积分+60以上注册用户!", '')
+ result = xml_template % ('', _('uploading images is limited to users with >60 reputation points'), '')
except FileTypeNotAllow:
- result = xml_template % ('', u"只允许上传'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'类型的文件!", '')
+ result = xml_template % ('', _("allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"), '')
except FileSizeNotAllow:
- result = xml_template % ('', u"只允许上传%sK大小的文件!" % settings.ALLOW_MAX_FILE_SIZE / 1024, '')
- except Exception:
- result = xml_template % ('', u"在文件上传过程中产生了错误,请联系管理员,谢谢^_^", '')
+ result = xml_template % ('', _("maximum upload file size is %sK") % settings.ALLOW_MAX_FILE_SIZE / 1024, '')
+ except Exception as e:
+ result = xml_template % ('', _('Error uploading file. Please contact the site administrator. Thank you. %s' % e), '')
return HttpResponse(result, mimetype="application/xml")
View
BIN  locale/en/LC_MESSAGES/django.mo
Binary file not shown
View
1,973 locale/en/LC_MESSAGES/django.po
@@ -0,0 +1,1973 @@
+# 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: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-07-28 15:57+0000\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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: settings.py:12
+msgid "account/"
+msgstr ""
+
+#: settings.py:12 django_authopenid/urls.py:9 django_authopenid/urls.py:11
+msgid "signin/"
+msgstr ""
+
+#: django_authopenid/forms.py:67 django_authopenid/views.py:93
+msgid "i-names are not supported"
+msgstr ""
+
+#: django_authopenid/forms.py:102 django_authopenid/forms.py:207
+msgid ""
+"Usernames can only contain letters, numbers and "
+"underscores"
+msgstr ""
+
+#: django_authopenid/forms.py:109
+msgid ""
+"This username does not exist in our database. Please "
+"choose another."
+msgstr ""
+
+#: django_authopenid/forms.py:126 django_authopenid/forms.py:231
+msgid ""
+"Please enter a valid username and password. Note that "
+"both fields are case-sensitive."
+msgstr ""
+
+#: django_authopenid/forms.py:130 django_authopenid/forms.py:235
+msgid "This account is inactive."
+msgstr ""
+
+#: django_authopenid/forms.py:158
+msgid "invalid user name"
+msgstr ""
+
+#: django_authopenid/forms.py:160
+msgid "sorry, this name can not be used, please try another"
+msgstr ""
+
+#: django_authopenid/forms.py:162
+msgid "username too short"
+msgstr ""
+
+#: django_authopenid/forms.py:170 django_authopenid/forms.py:171
+msgid "this name is already in use - please try anoter"
+msgstr ""
+
+#: django_authopenid/forms.py:184
+msgid ""
+"This email is already registered in our database. Please "
+"choose another."
+msgstr ""
+
+#: django_authopenid/forms.py:214
+msgid ""
+"This username don't exist. Please choose another."
+msgstr ""
+
+#: django_authopenid/forms.py:253
+msgid "choose a username"
+msgstr ""
+
+#: django_authopenid/forms.py:255 templates/authopenid/signup.html:36
+msgid "your email address"
+msgstr ""
+
+#: django_authopenid/forms.py:257 templates/authopenid/signup.html:37
+msgid "choose password"
+msgstr ""
+
+#: django_authopenid/forms.py:259 templates/authopenid/signup.html:38
+msgid "retype password"
+msgstr ""
+
+#: django_authopenid/forms.py:330
+msgid ""
+"Old password is incorrect. Please enter the correct "
+"password."
+msgstr ""
+
+#: django_authopenid/forms.py:342
+msgid "new passwords do not match"
+msgstr ""
+
+#: django_authopenid/forms.py:434
+msgid "Incorrect username."
+msgstr ""
+
+#: django_authopenid/urls.py:10
+msgid "signout/"
+msgstr ""
+
+#: django_authopenid/urls.py:11
+msgid "complete/"
+msgstr ""
+
+#: django_authopenid/urls.py:13
+msgid "register/"
+msgstr ""
+
+#: django_authopenid/urls.py:14
+msgid "signup/"
+msgstr ""
+
+#: django_authopenid/urls.py:16
+msgid "sendpw/"
+msgstr ""
+
+#: django_authopenid/urls.py:26
+msgid "delete/"
+msgstr ""
+
+#: django_authopenid/views.py:99
+#, python-format
+msgid "非法OpenID地址: %s"
+msgstr ""
+
+#: django_authopenid/views.py:366
+msgid "Welcome"
+msgstr ""
+
+#: django_authopenid/views.py:456
+msgid "Password changed."
+msgstr ""
+
+#: django_authopenid/views.py:488
+msgid "Email changed."
+msgstr ""
+
+#: django_authopenid/views.py:519 django_authopenid/views.py:671
+#, python-format
+msgid "No OpenID %s found associated in our database"
+msgstr ""
+
+#: django_authopenid/views.py:523 django_authopenid/views.py:678
+#, python-format
+msgid "The OpenID %s isn't associated to current user logged in"
+msgstr ""
+
+#: django_authopenid/views.py:531
+msgid "Email Changed."
+msgstr ""
+
+#: django_authopenid/views.py:606
+msgid "This OpenID is already associated with another account."
+msgstr ""
+
+#: django_authopenid/views.py:611
+#, python-format
+msgid "OpenID %s is now associated with your account."
+msgstr ""
+
+#: django_authopenid/views.py:681
+msgid "Account deleted."
+msgstr ""
+
+#: django_authopenid/views.py:721
+msgid "Request for new password"
+msgstr ""
+
+#: django_authopenid/views.py:734
+msgid "A new password has been sent to your email address."
+msgstr ""
+
+#: django_authopenid/views.py:764
+#, python-format
+msgid ""
+"Could not change password. Confirmation key '%s' is not "
+"registered."
+msgstr ""
+
+#: django_authopenid/views.py:773
+msgid ""
+"Can not change password. User don't exist anymore in our "
+"database."
+msgstr ""
+
+#: django_authopenid/views.py:782
+#, python-format
+msgid "Password changed for %s. You may now sign in."
+msgstr ""
+
+#: forum/const.py:8
+msgid "duplicate question"
+msgstr ""
+
+#: forum/const.py:9
+msgid "question if off-topic or not relevant"
+msgstr ""
+
+#: forum/const.py:10
+msgid "too subjective and argumentative"
+msgstr ""
+
+#: forum/const.py:11
+msgid "is not an answer to the question"
+msgstr ""
+
+#: forum/const.py:12
+msgid "the question is answered, right answer was accepted"
+msgstr ""
+
+#: forum/const.py:13
+msgid "problem is not reproducible or outdated"
+msgstr ""
+
+#: forum/const.py:15
+msgid "question contains offensive inappropriate, or malicious remarks"
+msgstr ""
+
+#: forum/const.py:16
+msgid "spam or advertising"
+msgstr ""
+
+#: forum/const.py:56
+msgid "question"
+msgstr ""
+
+#: forum/const.py:57 templates/book.html:110
+msgid "answer"
+msgstr ""
+
+#: forum/const.py:58
+msgid "commented question"
+msgstr ""
+
+#: forum/const.py:59
+msgid "commented answer"
+msgstr ""
+
+#: forum/const.py:60
+msgid "edited question"
+msgstr ""
+
+#: forum/const.py:61
+msgid "edited answer"
+msgstr ""
+
+#: forum/const.py:62
+msgid "received award"
+msgstr ""
+
+#: forum/const.py:63
+msgid "marked best answer"
+msgstr ""
+
+#: forum/const.py:64
+msgid "upvoted"
+msgstr ""
+
+#: forum/const.py:65
+msgid "downvoted"
+msgstr ""
+
+#: forum/const.py:66
+msgid "canceled vote"
+msgstr ""
+
+#: forum/const.py:67
+msgid "deleted question"
+msgstr ""
+
+#: forum/const.py:68
+msgid "deleted answer"
+msgstr ""
+
+#: forum/const.py:69
+msgid "marked offensive"
+msgstr ""
+
+#: forum/const.py:70
+msgid "updated tags"
+msgstr ""
+
+#: forum/const.py:71
+msgid "selected favorite"
+msgstr ""
+
+#: forum/const.py:72
+msgid "completed user profile"
+msgstr ""
+
+#: forum/const.py:83
+msgid "[closed]"
+msgstr ""
+
+#: forum/const.py:84
+msgid "[deleted]"
+msgstr ""
+
+#: forum/const.py:85
+msgid "initial version"
+msgstr ""
+
+#: forum/const.py:86
+msgid "retagged"
+msgstr ""
+
+#: forum/feed.py:17
+msgid "site title"
+msgstr ""
+
+#: forum/feed.py:17
+msgid " - "
+msgstr ""
+
+#: forum/feed.py:17
+msgid "site slogan"
+msgstr ""
+
+#: forum/feed.py:17
+msgid "latest questions"
+msgstr ""
+
+#: forum/feed.py:20
+msgid "meta site content"
+msgstr ""
+
+#: forum/feed.py:22
+msgid "copyright message"
+msgstr ""
+
+#: forum/forms.py:14 templates/question_edit_tips.html:31
+#: templates/question_edit_tips.html:36
+msgid "title"
+msgstr ""
+
+#: forum/forms.py:15
+msgid "please enter a descriptive title for your question"
+msgstr ""
+
+#: forum/forms.py:20
+msgid "title must be > 10 characters"
+msgstr ""
+
+#: forum/forms.py:29
+msgid "content"
+msgstr ""
+
+#: forum/forms.py:35
+msgid "question content must be > 10 characters"
+msgstr ""
+
+#: forum/forms.py:45 templates/header.html:30 templates/header.html.py:61
+msgid "tags"
+msgstr ""
+
+#: forum/forms.py:46
+msgid "please use space to separate tags (this enables autocomplete feature)"
+msgstr ""
+
+#: forum/forms.py:53
+msgid "tags are required"
+msgstr ""
+
+#: forum/forms.py:57
+msgid "please use 5 tags or less"
+msgstr ""
+
+#: forum/forms.py:60
+msgid "tags must be shorter than 20 characters"
+msgstr ""
+
+#: forum/forms.py:64
+msgid ""
+"please use following characters in tags: letters 'a-z', numbers, and "
+"characters '.-_#'"
+msgstr ""
+
+#: forum/forms.py:74 templates/index.html:56 templates/question.html:196
+#: templates/question.html.py:377 templates/unanswered.html:48
+#: templates/unanswered.html.py:60
+msgid "community wiki"
+msgstr ""
+
+#: forum/forms.py:75
+msgid ""
+"if you choose community wiki option, the question and answer do not generate "
+"points and name of author will not be shown"
+msgstr ""
+
+#: forum/forms.py:84
+msgid "update summary:"
+msgstr ""
+
+#: forum/forms.py:85
+msgid ""
+"enter a brief summary of your revision (e.g. fixed spelling, grammar, "
+"improved style, this field is optional)"
+msgstr ""
+
+#: forum/forms.py:160
+msgid "this email does not have to be linked to gravatar"
+msgstr ""
+
+#: forum/forms.py:161
+msgid "Real name"
+msgstr ""
+
+#: forum/forms.py:162
+msgid "Website"
+msgstr ""
+
+#: forum/forms.py:163
+msgid "Location"
+msgstr ""
+
+#: forum/forms.py:164
+msgid "Date of birth"
+msgstr ""
+
+#: forum/forms.py:164
+msgid "will not be shown, used to calculate age, format: YYYY-MM-DD"
+msgstr ""
+
+#: forum/forms.py:165 templates/authopenid/settings.html:20
+msgid "Profile"
+msgstr ""
+
+#: forum/forms.py:190 forum/forms.py:191
+msgid "this email has already been registered, please use another one"
+msgstr ""
+
+#: forum/models.py:316 templates/badges.html:50
+msgid "gold"
+msgstr ""
+
+#: forum/models.py:317 templates/badges.html:58
+msgid "silver"
+msgstr ""
+
+#: forum/models.py:318 templates/badges.html:65
+msgid "bronze"
+msgstr ""
+
+#: forum/user.py:17 templates/user_tabs.html:7
+msgid "overview"
+msgstr ""
+
+#: forum/user.py:18
+msgid "user profile"
+msgstr ""
+
+#: forum/user.py:19
+msgid "user profile overview"
+msgstr ""
+
+#: forum/user.py:25 templates/user_tabs.html:9
+msgid "recent activity"
+msgstr ""
+
+#: forum/user.py:26
+msgid "recent user activity"
+msgstr ""
+
+#: forum/user.py:27
+msgid "profile - recent activity"
+msgstr ""
+
+#: forum/user.py:34 templates/user_tabs.html:13
+msgid "responses"
+msgstr ""
+
+#: forum/user.py:35 templates/user_tabs.html:12
+msgid "comments and answers to others questions"
+msgstr ""
+
+#: forum/user.py:36
+msgid "profile - responses"
+msgstr ""
+
+#: forum/user.py:43 templates/user_info.html:23 templates/users.html:25
+msgid "reputation"
+msgstr ""
+
+#: forum/user.py:44
+msgid "user reputation in the community"
+msgstr ""
+
+#: forum/user.py:45
+msgid "profile - user reputation"
+msgstr ""
+
+#: forum/user.py:51
+msgid "favorite questions"
+msgstr ""
+
+#: forum/user.py:52
+msgid "users favorite questions"
+msgstr ""
+
+#: forum/user.py:53
+msgid "profile - favorite questions"
+msgstr ""
+
+#: forum/user.py:60 templates/user_tabs.html:20
+msgid "casted votes"
+msgstr ""
+
+#: forum/user.py:61 templates/user_tabs.html:20
+msgid "user vote record"
+msgstr ""
+
+#: forum/user.py:62
+msgid "profile - votes"
+msgstr ""
+
+#: forum/user.py:69
+msgid "preferences"
+msgstr ""
+
+#: forum/user.py:70 templates/user_tabs.html:28
+msgid "user preference settings"
+msgstr ""
+
+#: forum/user.py:71
+msgid "profile - user preferences"
+msgstr ""
+
+#: forum/views.py:1726
+msgid "uploading images is limited to users with >60 reputation points"
+msgstr ""
+
+#: forum/views.py:1728
+msgid "allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"
+msgstr ""
+
+#: forum/views.py:1730
+#, python-format
+msgid "maximum upload file size is %sK"
+msgstr ""
+
+#: forum/views.py:1732
+#, python-format
+msgid ""
+"Error uploading file. Please contact the site administrator. Thank you. %s"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:139 forum/templatetags/extra_tags.py:168
+#: templates/header.html:33
+msgid "badges"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:140 forum/templatetags/extra_tags.py:167
+msgid "reputation points"
+msgstr ""
+
+#: forum/templatetags/extra_tags.py:221
+msgid " ago"
+msgstr ""
+
+#: templates/404.html:24
+msgid "Sorry, could not find the page you requested."
+msgstr ""
+
+#: templates/404.html:26
+msgid "This might have happened for the following reasons:"
+msgstr ""
+
+#: templates/404.html:28
+msgid "this question or answer has been deleted;"
+msgstr ""
+
+#: templates/404.html:29
+msgid "url has error - please check it;"
+msgstr ""
+
+#: 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
+msgid "if you believe this error 404 should not have occured, please"
+msgstr ""
+
+#: templates/404.html:32
+msgid "report this problem"
+msgstr ""
+
+#: templates/404.html:41 templates/500.html:27
+msgid "back to previous page"
+msgstr ""
+
+#: templates/404.html:42
+msgid "see all questions"
+msgstr ""
+
+#: templates/404.html:43
+msgid "see all tags"
+msgstr ""
+
+#: templates/500.html:24
+msgid "system error log is recorded, error will be fixed as soon as possible"
+msgstr ""
+
+#: templates/500.html:25
+msgid "please report the error to the site administrators if you wish"
+msgstr ""
+
+#: templates/500.html:28
+msgid "see latest questions"
+msgstr ""
+
+#: templates/500.html:29
+msgid "see tags"
+msgstr ""
+
+#: templates/answer_edit.html:4 templates/answer_edit.html.py:47
+msgid "Edit answer"
+msgstr ""
+
+#: templates/answer_edit.html:24 templates/answer_edit.html.py:27
+#: templates/ask.html:25 templates/ask.html.py:28 templates/question.html:37
+#: templates/question.html.py:40 templates/question_edit.html:27
+msgid "hide preview"
+msgstr ""
+
+#: templates/answer_edit.html:27 templates/ask.html:28
+#: templates/question.html:40 templates/question_edit.html:27
+msgid "show preview"
+msgstr ""
+
+#: templates/answer_edit.html:47 templates/question_edit.html:65
+#: templates/revisions_answer.html:36 templates/revisions_question.html:36
+msgid "back"
+msgstr ""
+
+#: templates/answer_edit.html:52 templates/question_edit.html:70
+#: templates/revisions_answer.html:47 templates/revisions_question.html:47
+msgid "revision"
+msgstr ""
+
+#: templates/answer_edit.html:55 templates/question_edit.html:74
+msgid "select revision"
+msgstr ""
+
+#: templates/answer_edit.html:62 templates/ask.html:81
+#: templates/question.html:447 templates/question_edit.html:91
+msgid "Toggle the real time Markdown editor preview"
+msgstr ""
+
+#: templates/answer_edit.html:62 templates/ask.html:81
+#: templates/question.html:447 templates/question_edit.html:91
+msgid "toggle preview"
+msgstr ""
+
+#: templates/answer_edit.html:73 templates/question_edit.html:119
+msgid "Save edit"
+msgstr ""
+
+#: templates/answer_edit.html:74 templates/close.html:29
+#: templates/question_edit.html:120 templates/reopen.html:30
+#: templates/user_edit.html:83
+msgid "Cancel"
+msgstr ""
+
+#: templates/ask.html:4 templates/ask.html.py:60
+msgid "Ask a question"
+msgstr ""
+
+#: templates/ask.html:106
+msgid "Use"
+msgstr ""
+
+#: templates/ask.html:106
+msgid "learn more about OpenID"
+msgstr ""
+
+#: templates/ask.html:106 templates/authopenid/signin.html:35
+#: templates/authopenid/signin.html:61
+msgid "Login"
+msgstr ""
+
+#: templates/ask.html:109
+msgid "Get your own "
+msgstr ""
+
+#: templates/ask.html:117 templates/authopenid/sendpw.html:27
+msgid "User name"
+msgstr ""
+
+#: templates/ask.html:120
+msgid "Email: (won't be shown to anyone)"
+msgstr ""
+
+#: templates/ask.html:127
+msgid "Ask your question"
+msgstr ""
+
+#: templates/badge.html:6 templates/badge.html.py:17
+msgid "Badge"
+msgstr ""
+
+#: templates/badge.html:26
+msgid "The users have been awarded with badges:"
+msgstr ""
+
+#: templates/badges.html:5
+msgid "Badges summary"
+msgstr ""
+
+#: templates/badges.html:16 templates/user_stats.html:113
+msgid "Badges"
+msgstr ""
+
+#: templates/badges.html:20
+msgid ""
+"Community gives you awards for your questions, answers and votes. Below is "
+"the list of available badges and number of times each type of badge has been "
+"awarded."
+msgstr ""
+
+#: templates/badges.html:47
+msgid "Community badges"
+msgstr ""
+
+#: templates/badges.html:53
+msgid ""
+"Gold badge is very rare. To obtain it you have to show profound knowledge "
+"and ability in addition to actively participating in the community. Gold "
+"badge is the highest award in this community."
+msgstr ""
+
+#: templates/badges.html:61
+msgid ""
+"Obtaining silver badge requires significant patience. If you got one, you've "
+"very significantly contributed to this community"
+msgstr ""
+
+#: templates/badges.html:64
+msgid "bronze badge: often given as a special honor"
+msgstr ""
+
+#: templates/badges.html:68
+msgid ""
+"If you are active in this community, you will get this medal - still it is a "
+"special honor."
+msgstr ""
+
+#: templates/base.html:61 templates/base_content.html:60
+msgid "congratulations, community gave you a badge"
+msgstr ""
+
+#: templates/base.html:63 templates/base_content.html:62
+msgid "profile"
+msgstr ""
+
+#: templates/base_content.html:61
+msgid "see"
+msgstr ""
+
+#: templates/book.html:7
+msgid "reading channel"
+msgstr ""
+
+#: templates/book.html:26
+msgid "[author]"
+msgstr ""
+
+#: templates/book.html:30
+msgid "[publisher]"
+msgstr ""
+
+#: templates/book.html:34
+msgid "[publication date]"
+msgstr ""
+
+#: templates/book.html:38
+msgid "[price]"
+msgstr ""
+
+#: templates/book.html:39
+msgid "currency unit"
+msgstr ""
+
+#: templates/book.html:42
+msgid "[pages]"
+msgstr ""
+
+#: templates/book.html:43
+msgid "pages abbreviation"
+msgstr ""
+
+#: templates/book.html:46
+msgid "[tags]"
+msgstr ""
+
+#: templates/book.html:56
+msgid "author blog"
+msgstr ""
+
+#: templates/book.html:62
+msgid "book directory"
+msgstr ""
+
+#: templates/book.html:66
+msgid "buy online"
+msgstr ""
+
+#: templates/book.html:79
+msgid "reader questions"
+msgstr ""
+
+#: templates/book.html:82
+msgid "ask the author"
+msgstr ""
+
+#: templates/book.html:88 templates/book.html.py:93
+#: templates/users_questions.html:17
+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:17
+msgid "number of times"
+msgstr ""
+
+#: templates/book.html:105 templates/index.html:47
+#: templates/unanswered.html:37 templates/users_questions.html:30
+msgid "votes"
+msgstr ""
+
+#: templates/book.html:108
+msgid "the answer has been accepted to be correct"
+msgstr ""
+
+#: templates/book.html:115 templates/index.html:48
+#: templates/unanswered.html:38 templates/users_questions.html:40
+msgid "views"
+msgstr ""
+
+#: templates/book.html:125 templates/index.html:68 templates/question.html:112
+#: templates/question.html.py:479 templates/tags.html:46
+#: templates/unanswered.html:75 templates/unanswered.html.py:109
+#: templates/users_questions.html:52
+msgid "using tags"
+msgstr ""
+
+#: templates/book.html:147
+msgid "subscribe to book RSS feed"
+msgstr ""
+
+#: templates/book.html:147 templates/index.html:115
+msgid "subscribe to the questions feed"
+msgstr ""
+
+#: templates/close.html:6 templates/close.html.py:16
+msgid "Close question"
+msgstr ""
+
+#: templates/close.html:19
+msgid "Close the question"
+msgstr ""
+
+#: templates/close.html:25
+msgid "Reasons"
+msgstr ""
+
+#: templates/close.html:28
+msgid "OK to close"
+msgstr ""
+
+#: templates/footer.html:5
+msgid "About us"
+msgstr ""
+
+#: templates/footer.html:6 templates/header.html:13 templates/index.html:83
+msgid "faq"
+msgstr ""
+
+#: templates/footer.html:8
+msgid "Contact"
+msgstr ""
+
+#: templates/footer.html:9
+msgid "Privacy"
+msgstr ""
+
+#: templates/footer.html:10
+msgid "Feedback"
+msgstr ""
+
+#: templates/header.html:8
+msgid "logout"
+msgstr ""
+
+#: templates/header.html:10 templates/authopenid/signup.html:39
+msgid "login"
+msgstr ""
+
+#: templates/header.html:12 templates/index.html:82
+msgid "about"
+msgstr ""
+
+#: templates/header.html:23
+msgid "back to home page"
+msgstr ""
+
+#: templates/header.html:29 templates/header.html.py:60
+msgid "questions"
+msgstr ""
+
+#: templates/header.html:31 templates/header.html.py:62
+msgid "users"
+msgstr ""
+
+#: templates/header.html:32
+msgid "books"
+msgstr ""
+
+#: templates/header.html:34 templates/index.html:120
+msgid "unanswered questions"
+msgstr ""
+
+#: templates/header.html:38
+msgid "my profile"
+msgstr ""
+
+#: templates/header.html:42
+msgid "ask a question"
+msgstr ""
+
+#: templates/header.html:57
+msgid "search"
+msgstr ""
+
+#: templates/index.html:6
+msgid "Home"
+msgstr ""
+
+#: templates/index.html:21
+msgid "Questions"
+msgstr ""
+
+#: templates/index.html:23
+msgid "last updated questions"
+msgstr ""
+
+#: templates/index.html:23 templates/unanswered.html:20
+msgid "newest"
+msgstr ""
+
+#: templates/index.html:24
+msgid "hottest questions"
+msgstr ""
+
+#: templates/index.html:24
+msgid "hottest"
+msgstr ""
+
+#: templates/index.html:25
+msgid "most voted questions"
+msgstr ""
+
+#: templates/index.html:25
+msgid "most voted"
+msgstr ""
+
+#: templates/index.html:26
+msgid "all questions"
+msgstr ""
+
+#: templates/index.html:46 templates/unanswered.html:36
+#: templates/users_questions.html:35
+msgid "answers"
+msgstr ""
+
+#: templates/index.html:68 templates/question.html:112
+#: templates/question.html.py:479 templates/tags.html:46
+#: templates/unanswered.html:75 templates/unanswered.html.py:109
+#: templates/users_questions.html:52
+msgid "see questions tagged"
+msgstr ""
+
+#: templates/index.html:79
+msgid "welcome to website"
+msgstr ""
+
+#: templates/index.html:88
+msgid "Recent tags"
+msgstr ""
+
+#: templates/index.html:93
+#, python-format
+msgid "see questions tagged '%(tagname)s'"
+msgstr ""
+
+#: templates/index.html:96 templates/index.html.py:120
+msgid "popular tags"
+msgstr ""
+
+#: templates/index.html:100
+msgid "Recent awards"
+msgstr ""
+
+#: templates/index.html:106
+msgid "given to"
+msgstr ""
+
+#: templates/index.html:111
+msgid "all awards"
+msgstr ""
+
+#: templates/index.html:115
+msgid "subscribe to last 30 questions by RSS"
+msgstr ""
+
+#: templates/index.html:120
+msgid "Still looking for more? See"
+msgstr ""
+
+#: templates/index.html:120
+msgid "complete list of quesionts"
+msgstr ""
+
+#: templates/index.html:120
+msgid "or"
+msgstr ""
+
+#: templates/index.html:120
+msgid "."
+msgstr ""
+
+#: templates/index.html:120
+msgid "Please help us answer"
+msgstr ""
+
+#: templates/logout.html:6 templates/logout.html.py:17
+msgid "Logout"
+msgstr ""
+
+#: templates/logout.html:20
+msgid ""
+"As a registered user you can login with your OpenID, log out of the site or "
+"permanently remove your account."
+msgstr ""
+
+#: templates/logout.html:21
+msgid "Logout now"
+msgstr ""
+
+#: templates/pagesize.html:5
+msgid "Size per page:"
+msgstr ""
+
+#: templates/paginator.html:5
+msgid "Previous"
+msgstr ""
+
+#: templates/privacy.html:6 templates/privacy.html.py:11
+msgid "Privacy policy"
+msgstr ""
+
+#: templates/privacy.html:15
+msgid "general message about privacy"
+msgstr ""
+
+#: templates/privacy.html:18
+msgid "Site Visitors"
+msgstr ""
+
+#: templates/privacy.html:20
+msgid "what technical information is collected about visitors"
+msgstr ""
+
+#: templates/privacy.html:23
+msgid "Personal Information"
+msgstr ""
+
+#: templates/privacy.html:25
+msgid "details on personal information policies"
+msgstr ""
+
+#: templates/privacy.html:28
+msgid "Other Services"
+msgstr ""
+
+#: templates/privacy.html:30
+msgid "details on sharing data with third parties"
+msgstr ""
+
+#: templates/privacy.html:35
+msgid "cookie policy details"
+msgstr ""
+
+#: templates/privacy.html:37
+msgid "Policy Changes"
+msgstr ""
+
+#: templates/privacy.html:38
+msgid "how privacy policies can be changed"
+msgstr ""
+
+#: templates/question.html:66 templates/question.html.py:78
+msgid "i like this post (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:68 templates/question.html.py:80
+#: templates/question.html:273
+msgid "current number of votes"
+msgstr ""
+
+#: templates/question.html:73 templates/question.html.py:84
+msgid "i dont like this post (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:90
+msgid "mark this question as favorite (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:96
+msgid "remove favorite mark from this question (click again to restore mark)"
+msgstr ""
+
+#: templates/question.html:121 templates/question.html.py:304
+#: templates/revisions_answer.html:53 templates/revisions_question.html:53
+msgid "edit"
+msgstr ""
+
+#: templates/question.html:125 templates/question.html.py:314
+msgid "delete"
+msgstr ""
+
+#: templates/question.html:130
+msgid "reopen"
+msgstr ""
+
+#: templates/question.html:135
+msgid "close"
+msgstr ""
+
+#: templates/question.html:141 templates/question.html.py:327
+msgid ""
+"report as offensive (i.e containing spam, advertising, malicious text, etc.)"
+msgstr ""
+
+#: templates/question.html:142 templates/question.html.py:328
+msgid "flag offensive"
+msgstr ""
+
+#: templates/question.html:154 templates/question.html.py:337
+#: templates/revisions_answer.html:65 templates/revisions_question.html:65
+msgid "updated"
+msgstr ""
+
+#: templates/question.html:203 templates/question.html.py:384
+#: templates/revisions_answer.html:63 templates/revisions_question.html:63
+msgid "asked"
+msgstr ""
+
+#: templates/question.html:233 templates/question.html.py:411
+msgid "comments"
+msgstr ""
+
+#: templates/question.html:234 templates/question.html.py:412
+msgid "add comment"
+msgstr ""
+
+#: templates/question.html:247
+#, python-format
+msgid ""
+"The question has been closed for the following reason \"%(question."
+"get_close_reason_display)s\" by"
+msgstr ""
+
+#: templates/question.html:249
+#, python-format
+msgid "close date %(question.closed_at)s"
+msgstr ""
+
+#: templates/question.html:256 templates/questions.html:44
+#: templates/user_stats.html:28
+msgid "Answers"
+msgstr ""
+
+#: templates/question.html:258
+msgid "oldest answers will be shown first"
+msgstr ""
+
+#: templates/question.html:258
+msgid "oldest answers"
+msgstr ""
+
+#: templates/question.html:259
+msgid "newest answers will be shown first"
+msgstr ""
+
+#: templates/question.html:259
+msgid "newest answers"
+msgstr ""
+
+#: templates/question.html:260
+msgid "most voted answers will be shown first"
+msgstr ""
+
+#: templates/question.html:260
+msgid "popular answers"
+msgstr ""
+
+#: templates/question.html:272
+msgid "i like this answer (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:278
+msgid "i dont like this answer (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:284
+msgid "mark this answer as favorite (click again to undo)"
+msgstr ""
+
+#: templates/question.html:289
+msgid "the author of the question has selected this answer as correct"
+msgstr ""
+
+#: templates/question.html:311
+msgid "undelete"
+msgstr ""
+
+#: templates/question.html:321
+msgid "answer permanent link"
+msgstr ""
+
+#: templates/question.html:322
+msgid "permanent link"
+msgstr ""
+
+#: templates/question.html:436
+msgid "Your answer"
+msgstr ""
+
+#: templates/question.html:460
+msgid "Answer the question"
+msgstr ""
+
+#: templates/question.html:462
+msgid "Login to answer"
+msgstr ""
+
+#: templates/question.html:474
+msgid "Question tags"
+msgstr ""
+
+#: templates/question.html:484
+msgid "question asked"
+msgstr ""
+
+#: templates/question.html:484 templates/question.html.py:490
+#: templates/user_info.html:51
+msgid "ago"
+msgstr ""
+
+#: templates/question.html:487
+msgid "question was seen"
+msgstr ""
+
+#: templates/question.html:487
+msgid "times"
+msgstr ""
+
+#: templates/question.html:490
+msgid "last updated"
+msgstr ""
+
+#: templates/question.html:495
+msgid "Related questions"
+msgstr ""
+
+#: templates/question_edit.html:4 templates/question_edit.html.py:65
+msgid "Edit question"
+msgstr ""
+
+#: templates/question_edit_tips.html:4
+msgid "question tips"
+msgstr ""
+
+#: templates/question_edit_tips.html:7
+msgid "please ask a relevant question"
+msgstr ""
+
+#: templates/question_edit_tips.html:10
+msgid "please try provide enough details"
+msgstr ""
+
+#: templates/question_edit_tips.html:13
+msgid "be clear and concise"
+msgstr ""
+
+#: templates/question_edit_tips.html:16
+msgid "see frequently asked questions"
+msgstr ""
+
+#: templates/question_edit_tips.html:22
+msgid "Markdown tips"
+msgstr ""
+
+#: templates/question_edit_tips.html:25
+msgid "*italic* or __italic__"
+msgstr ""
+
+#: templates/question_edit_tips.html:28
+msgid "**bold** or __bold__"
+msgstr ""
+
+#: templates/question_edit_tips.html:31
+msgid "link"
+msgstr ""
+
+#: templates/question_edit_tips.html:31 templates/question_edit_tips.html:36
+msgid "text"
+msgstr ""
+
+#: templates/question_edit_tips.html:36
+msgid "image"
+msgstr ""
+
+#: templates/question_edit_tips.html:40
+msgid "numbered list:"
+msgstr ""
+
+#: templates/question_edit_tips.html:45
+msgid "basic HTML tags are also supported"
+msgstr ""
+
+#: templates/question_edit_tips.html:48
+msgid "learn more about Markdown"
+msgstr ""
+
+#: templates/questions.html:6
+msgid "Question list"
+msgstr ""
+
+#: templates/questions.html:22
+msgid "Tagged questions"
+msgstr ""
+
+#: templates/questions.html:22
+msgid "Query result"
+msgstr ""
+
+#: templates/questions.html:22
+msgid "All questions"
+msgstr ""
+
+#: templates/questions.html:24
+msgid "New questions"
+msgstr ""
+
+#: templates/questions.html:24
+msgid "Newest"
+msgstr ""
+
+#: templates/questions.html:25
+msgid "Newest updated questions"
+msgstr ""
+
+#: templates/questions.html:25
+msgid "Active"
+msgstr ""
+
+#: templates/questions.html:26
+msgid "Questions with most answers"
+msgstr ""
+
+#: templates/questions.html:26
+msgid "Hottest"
+msgstr ""
+
+#: templates/questions.html:27
+msgid "Questions with most votes"
+msgstr ""
+
+#: templates/questions.html:27
+msgid "Best"
+msgstr ""
+
+#: templates/questions.html:45
+msgid "Votes"
+msgstr ""
+
+#: templates/questions.html:46
+msgid "Visits"
+msgstr ""
+
+#: templates/questions.html:57 templates/questions.html.py:69
+msgid "Community wiki"
+msgstr ""
+
+#: templates/questions.html:83
+msgid "Browse questions with tag of "
+msgstr ""
+
+#: templates/questions.html:125 templates/unanswered.html:105
+msgid "Related tags"
+msgstr ""
+
+#: templates/reopen.html:6 templates/reopen.html.py:16
+msgid "Reopen question"
+msgstr ""
+
+#: templates/reopen.html:19
+msgid "Open the previously closed question"
+msgstr ""
+
+#: templates/reopen.html:22
+msgid "The question was closed for the following reason "
+msgstr ""
+
+#: templates/reopen.html:22
+msgid "reason - leave blank in english"
+msgstr ""
+
+#: templates/reopen.html:22
+msgid "on "
+msgstr ""
+
+#: templates/reopen.html:22
+msgid "date closed"
+msgstr ""
+
+#: templates/reopen.html:29
+msgid "Reopen this question"
+msgstr ""
+
+#: templates/revisions_answer.html:7 templates/revisions_answer.html.py:36
+#: templates/revisions_question.html:8 templates/revisions_question.html:36
+msgid "Revision history"
+msgstr ""
+
+#: templates/tags.html:5 templates/tags.html.py:28
+msgid "Tag list"
+msgstr ""
+
+#: templates/tags.html:30
+msgid "sorted alphabetically"
+msgstr ""
+
+#: templates/tags.html:30
+msgid "by name"
+msgstr ""
+
+#: templates/tags.html:31
+msgid "sorted by frequency of tag use"
+msgstr ""
+
+#: templates/tags.html:31
+msgid "by popularity"
+msgstr ""
+
+#: templates/tags.html:37
+msgid "All tags matching query"
+msgstr ""
+
+#: templates/tags.html:37
+msgid "all tags - make this empty in english"
+msgstr ""
+
+#: templates/tags.html:40
+msgid "Nothing found"
+msgstr ""
+
+#: templates/unanswered.html:7 templates/unanswered.html.py:18
+msgid "Unanswered questions"
+msgstr ""
+
+#: templates/unanswered.html:20
+msgid "most recently asked questions"
+msgstr ""
+
+#: templates/unanswered.html:97
+#, python-format
+msgid "have %(num_q)s unanswered questions"
+msgstr ""
+
+#: templates/unanswered.html:99
+msgid "Have a total of"
+msgstr ""
+
+#: templates/user_edit.html:6
+msgid "Edit user profile"
+msgstr ""
+
+#: templates/user_edit.html:19
+msgid "edit profile"
+msgstr ""
+
+#: templates/user_edit.html:31
+msgid "image associated with your email address"
+msgstr ""
+
+#: templates/user_edit.html:31
+msgid "avatar"
+msgstr ""
+
+#: templates/user_edit.html:36 templates/user_info.html:31
+msgid "Registered user"
+msgstr ""
+
+#: templates/user_edit.html:82
+msgid "Update"
+msgstr ""
+
+#: templates/user_info.html:34
+msgid "update profile"
+msgstr ""
+
+#: templates/user_info.html:40
+msgid "real name"
+msgstr ""
+
+#: templates/user_info.html:45
+msgid "member for"
+msgstr ""
+
+#: templates/user_info.html:50
+msgid "last seen"
+msgstr ""
+
+#: templates/user_info.html:56
+msgid "user website"
+msgstr ""
+
+#: templates/user_info.html:62
+msgid "location"
+msgstr ""
+
+#: templates/user_info.html:69
+msgid "age"
+msgstr ""
+
+#: templates/user_info.html:70
+msgid "age unit"
+msgstr ""
+
+#: templates/user_info.html:75
+msgid "todays unused votes"
+msgstr ""
+
+#: templates/user_info.html:76
+msgid "votes left"
+msgstr ""
+
+#: templates/user_stats.html:15
+msgid "User questions"
+msgstr ""
+
+#: templates/user_stats.html:37
+#, python-format
+msgid "the answer has been voted for %(vote_count)s times"
+msgstr ""
+
+#: templates/user_stats.html:37
+msgid "this answer has been selected as correct"
+msgstr ""
+
+#: templates/user_stats.html:43
+#, python-format
+msgid "the answer has been commented %(answered_question.comment_count)s times"
+msgstr ""
+
+#: templates/user_stats.html:56
+msgid "votes total"
+msgstr ""
+