From 1ec02bd63bc9367637832f23cd011b660b68dc86 Mon Sep 17 00:00:00 2001
From: Evgeny Fadeev
Date: Fri, 10 Jul 2009 19:11:10 -0400
Subject: english translation
---
LICENSE | 20 +-
cnprog.wsgi | 8 +
django_authopenid/forms.py | 18 +-
django_authopenid/models.py | 4 +-
django_authopenid/util.py | 4 +-
forum/const.py | 74 +-
forum/feed.py | 12 +-
forum/forms.py | 87 +-
forum/management/commands/once_award_badges.py | 37 +-
forum/managers.py | 55 +-
forum/models.py | 12 +-
forum/templatetags/extra_tags.py | 72 +-
forum/user.py | 43 +-
forum/views.py | 143 +-
junk | 7 +
lanai.psproj | 557 ++++++
locale/en/LC_MESSAGES/django.po | 2540 ++++++++++++++++++++++++
locale/zh-cn/LC_MESSAGES/django.mo | Bin 0 -> 39094 bytes
locale/zh-cn/LC_MESSAGES/django.po | 1430 +++++++++++++
log/cnprog.log | 0
settings.py | 97 +-
templates/404.html | 27 +-
templates/500.html | 28 +-
templates/about.html | 68 +-
templates/allfiles | 30 +
templates/answer_edit.html | 83 +-
templates/answer_edit_tips.html | 54 +
templates/ask.html | 87 +-
templates/authopenid/changeemail.html | 4 -
templates/authopenid/complete.html | 37 +-
templates/authopenid/htmlfiles | 8 +
templates/authopenid/sendpw.html | 17 +-
templates/authopenid/settings.html | 10 +-
templates/authopenid/signin.html | 47 +-
templates/authopenid/signup.html | 25 +-
templates/badge.html | 13 +-
templates/badges.html | 33 +-
templates/base.html | 34 +-
templates/base_content.html | 34 +-
templates/book.html | 52 +-
templates/close.html | 18 +-
templates/content/js/com.cnprog.i18n.js | 90 +
templates/content/js/com.cnprog.post.js | 111 +-
templates/content/js/com.cnprog.utils.js | 24 +-
templates/content/js/jquery.i18n.js | 133 ++
templates/content/js/wmd/wmd.js | 34 +-
templates/content/style/default.css | 12 +-
templates/content/style/openid.css | 2 +-
templates/content/style/style.css | 99 +-
templates/faq.html | 89 +-
templates/footer.html | 21 +-
templates/header.html | 37 +-
templates/index.html | 49 +-
templates/logout.html | 10 +-
templates/okfiles | 30 +
templates/pagesize.html | 7 +-
templates/paginator.html | 16 +-
templates/privacy.html | 37 +-
templates/question.html | 165 +-
templates/question_edit.html | 85 +-
templates/question_edit_tips.html | 51 +
templates/questions.html | 73 +-
templates/reopen.html | 15 +-
templates/revisions_answer.html | 18 +-
templates/revisions_question.html | 21 +-
templates/tags.html | 19 +-
templates/template.list | 18 +
templates/tough/faq.html | 110 +
templates/tough/question_retag.html | 107 +
templates/tough/unanswered.html | 115 ++
templates/unanswered.html | 55 +-
templates/upfiles/1245715031297631.png | Bin 0 -> 3863 bytes
templates/upfiles/12457157052552259.png | Bin 0 -> 3863 bytes
templates/user.html | 3 +-
templates/user_edit.html | 19 +-
templates/user_favorites.html | 4 +-
templates/user_footer.html | 3 +-
templates/user_info.html | 34 +-
templates/user_preferences.html | 15 +-
templates/user_recent.html | 4 +-
templates/user_reputation.html | 3 +-
templates/user_responses.html | 6 +-
templates/user_stats.html | 27 +-
templates/user_tabs.html | 30 +-
templates/user_votes.html | 9 +-
templates/users.html | 23 +-
templates/users_questions.html | 22 +-
urls.py | 1 -
88 files changed, 6544 insertions(+), 1241 deletions(-)
create mode 100644 cnprog.wsgi
create mode 100644 junk
create mode 100644 lanai.psproj
create mode 100644 locale/en/LC_MESSAGES/django.po
create mode 100644 locale/zh-cn/LC_MESSAGES/django.mo
create mode 100644 locale/zh-cn/LC_MESSAGES/django.po
create mode 100644 log/cnprog.log
create mode 100644 templates/allfiles
create mode 100644 templates/answer_edit_tips.html
create mode 100644 templates/authopenid/htmlfiles
create mode 100644 templates/content/js/com.cnprog.i18n.js
create mode 100644 templates/content/js/jquery.i18n.js
create mode 100644 templates/okfiles
create mode 100644 templates/question_edit_tips.html
create mode 100644 templates/template.list
create mode 100644 templates/tough/faq.html
create mode 100644 templates/tough/question_retag.html
create mode 100644 templates/tough/unanswered.html
create mode 100755 templates/upfiles/1245715031297631.png
create mode 100755 templates/upfiles/12457157052552259.png
diff --git a/LICENSE b/LICENSE
index cb24f678..e23e4b67 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,14 +1,12 @@
-Copyright (C) 2009. Chen Gang
+版权所有(c) 2008 CNProg.com
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+根据2.0版本Apache许可证("许可证")授权;
+根据本许可证,用户可以不使用此文件。
+用户可从下列网址获得许可证副本:
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+http://www.apache.org/licenses/LICENSE-2.0
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
+除非因适用法律需要或书面同意,
+根据许可证分发的软件是基于"按原样"基础提供,
+无任何明示的或暗示的保证或条件。
+详见根据许可证许可下,特定语言的管辖权限和限制。
\ No newline at end of file
diff --git a/cnprog.wsgi b/cnprog.wsgi
new file mode 100644
index 00000000..a1bd8039
--- /dev/null
+++ b/cnprog.wsgi
@@ -0,0 +1,8 @@
+import os
+import sys
+
+sys.path.append('/var/www/vhosts')
+os.environ['DJANGO_SETTINGS_MODULE'] = 'cnprog.settings'
+
+import django.core.handlers.wsgi
+application = django.core.handlers.wsgi.WSGIHandler()
diff --git a/django_authopenid/forms.py b/django_authopenid/forms.py
index 9c519d74..09fa76b1 100644
--- a/django_authopenid/forms.py
+++ b/django_authopenid/forms.py
@@ -155,11 +155,11 @@ class OpenidRegisterForm(forms.Form):
""" 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 @@ class OpenidRegisterForm(forms.Form):
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):
"""
diff --git a/django_authopenid/models.py b/django_authopenid/models.py
index e6fb8111..9826c452 100644
--- a/django_authopenid/models.py
+++ b/django_authopenid/models.py
@@ -3,7 +3,7 @@ from django.conf import settings
from django.contrib.auth.models import User
from django.db import models
-import hashlib, random, sys, os, time
+import md5, random, sys, os, time
__all__ = ['Nonce', 'Association', 'UserAssociation',
'UserPasswordQueueManager', 'UserPasswordQueue']
@@ -47,7 +47,7 @@ class UserPasswordQueueManager(models.Manager):
# The random module is seeded when this Apache child is created.
# Use SECRET_KEY as added salt.
while 1:
- confirm_key = hashlib.md5("%s%s%s%s" % (
+ confirm_key = md5.new("%s%s%s%s" % (
random.randint(0, sys.maxint - 1), os.getpid(),
time.time(), settings.SECRET_KEY)).hexdigest()
try:
diff --git a/django_authopenid/util.py b/django_authopenid/util.py
index 54c1246b..841a81c7 100644
--- a/django_authopenid/util.py
+++ b/django_authopenid/util.py
@@ -15,7 +15,7 @@ try:
except:
from yadis import xri
-import time, base64, hashlib, operator
+import time, base64, md5, operator
import urllib
from models import Association, Nonce
@@ -128,7 +128,7 @@ class DjangoOpenIDStore(OpenIDStore):
def getAuthKey(self):
# Use first AUTH_KEY_LEN characters of md5 hash of SECRET_KEY
- return hashlib.md5(settings.SECRET_KEY).hexdigest()[:self.AUTH_KEY_LEN]
+ return md5.new(settings.SECRET_KEY).hexdigest()[:self.AUTH_KEY_LEN]
def isDumb(self):
return False
diff --git a/forum/const.py b/forum/const.py
index d285de7d..f6649cc4 100644
--- a/forum/const.py
+++ b/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'闂宸茬粡瑙e喅锛屽凡寰楀埌姝g‘绛旀'),
- (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_USER_FULL_UPDATED = 17
#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'),
}
diff --git a/forum/feed.py b/forum/feed.py
index d75f3be6..a4218630 100644
--- a/forum/feed.py
+++ b/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()
\ No newline at end of file
+ main()
diff --git a/forum/forms.py b/forum/forms.py
index 70a44f28..1b811ad9 100644
--- a/forum/forms.py
+++ b/forum/forms.py
@@ -1,8 +1,9 @@
-锘縤mport 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 @@ class TitleField(forms.CharField):
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 @@ class EditorField(forms.CharField):
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 @@ class TagNamesField(forms.CharField):
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 @@ class SummaryField(forms.CharField):
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 @@ class EditAnswerForm(forms.Form):
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 @@ class EditUserForm(forms.Form):
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 @@ class EditUserForm(forms.Form):
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']
\ No newline at end of file
+ return self.cleaned_data['email']
diff --git a/forum/management/commands/once_award_badges.py b/forum/management/commands/once_award_badges.py
index c26251d7..011c28fd 100644
--- a/forum/management/commands/once_award_badges.py
+++ b/forum/management/commands/once_award_badges.py
@@ -157,8 +157,7 @@ class Command(BaseCommand):
"""
activity_types = ','.join('%s' % item for item in BADGE_AWARD_TYPE_FIRST.keys())
# ORDER BY user_id, activity_type
- query = "SELECT id, user_id, activity_type, content_type_id, object_id "+
- "FROM activity WHERE is_auditted = 0 AND activity_type IN (%s) ORDER BY user_id, activity_type" % activity_types
+ query = "SELECT id, user_id, activity_type, content_type_id, object_id FROM activity WHERE is_auditted = 0 AND activity_type IN (%s) ORDER BY user_id, activity_type" % activity_types
cursor = connection.cursor()
try:
@@ -206,10 +205,7 @@ class Command(BaseCommand):
(13, '瀛︾敓', 3, '瀛︾敓', '绗竴娆℃彁闂苟涓旀湁涓娆′互涓婅禐鎴愮エ', 0, 0),
"""
- query = "SELECT act.user_id, q.vote_up_count, act.object_id FROM "+
- "activity act, question q WHERE act.activity_type = %s AND "+
- "act.object_id = q.id AND "+
- "act.user_id NOT IN (SELECT distinct user_id FROM award WHERE badge_id = %s)" % (TYPE_ACTIVITY_ASK_QUESTION, 13)
+ query = "SELECT act.user_id, q.vote_up_count, act.object_id FROM activity act, question q WHERE act.activity_type = %s AND act.object_id = q.id AND act.user_id NOT IN (SELECT distinct user_id FROM award WHERE badge_id = %s)" % (TYPE_ACTIVITY_ASK_QUESTION, 13)
cursor = connection.cursor()
try:
cursor.execute(query)
@@ -236,10 +232,7 @@ class Command(BaseCommand):
(15, '鏁欏笀', 3, '鏁欏笀', '绗竴娆″洖绛旈棶棰樺苟涓斿緱鍒颁竴涓互涓婅禐鎴愮エ', 0, 0),
"""
- query = "SELECT act.user_id, a.vote_up_count, act.object_id FROM "+
- "activity act, answer a WHERE act.activity_type = %s AND "+
- "act.object_id = a.id AND "+
- "act.user_id NOT IN (SELECT distinct user_id FROM award WHERE badge_id = %s)" % (TYPE_ACTIVITY_ANSWER, 15)
+ query = "SELECT act.user_id, a.vote_up_count, act.object_id FROM activity act, answer a WHERE act.activity_type = %s AND act.object_id = a.id AND act.user_id NOT IN (SELECT distinct user_id FROM award WHERE badge_id = %s)" % (TYPE_ACTIVITY_ANSWER, 15)
cursor = connection.cursor()
try:
cursor.execute(query)
@@ -264,11 +257,7 @@ class Command(BaseCommand):
"""
(32, '瀛﹂棶瀹', 2, '瀛﹂棶瀹', '绗竴娆″洖绛旇鎶曡禐鎴愮エ10娆′互涓', 0, 0)
"""
- query = "SELECT act.user_id, act.object_id FROM "+
- "activity act, answer a WHERE act.object_id = a.id AND "+
- "act.activity_type = %s AND "+
- "a.vote_up_count >= 10 AND "+
- "act.user_id NOT IN (SELECT user_id FROM award WHERE badge_id = %s)" % (TYPE_ACTIVITY_ANSWER, 32)
+ query = "SELECT act.user_id, act.object_id FROM activity act, answer a WHERE act.object_id = a.id AND act.activity_type = %s AND a.vote_up_count >= 10 AND act.user_id NOT IN (SELECT user_id FROM award WHERE badge_id = %s)" % (TYPE_ACTIVITY_ANSWER, 32)
cursor = connection.cursor()
try:
cursor.execute(query)
@@ -292,11 +281,7 @@ class Command(BaseCommand):
"""
(26, '浼樼甯傛皯', 2, '浼樼甯傛皯', '鎶曠エ300娆′互涓', 0, 0)
"""
- query = "SELECT count(*) vote_count, user_id FROM activity WHERE "+
- "activity_type = %s OR "+
- "activity_type = %s AND "+
- "user_id NOT IN (SELECT user_id FROM award WHERE badge_id = %s) "+
- "GROUP BY user_id HAVING vote_count >= 300" % (TYPE_ACTIVITY_VOTE_UP, TYPE_ACTIVITY_VOTE_DOWN, 26)
+ query = "SELECT count(*) vote_count, user_id FROM activity WHERE activity_type = %s OR activity_type = %s AND user_id NOT IN (SELECT user_id FROM award WHERE badge_id = %s) GROUP BY user_id HAVING vote_count >= 300" % (TYPE_ACTIVITY_VOTE_UP, TYPE_ACTIVITY_VOTE_DOWN, 26)
self.__award_for_count_num(query, 26)
@@ -304,11 +289,7 @@ class Command(BaseCommand):
"""
(27, '缂栬緫涓讳换', 2, '缂栬緫涓讳换', '缂栬緫浜100涓笘瀛', 0, 0)
"""
- query = "SELECT count(*) vote_count, user_id FROM activity WHERE "+
- "activity_type = %s OR "+
- "activity_type = %s AND "+
- "user_id NOT IN (SELECT user_id FROM award WHERE badge_id = %s) "+
- "GROUP BY user_id HAVING vote_count >= 100" % (TYPE_ACTIVITY_UPDATE_QUESTION, TYPE_ACTIVITY_UPDATE_ANSWER, 27)
+ query = "SELECT count(*) vote_count, user_id FROM activity WHERE activity_type = %s OR activity_type = %s AND user_id NOT IN (SELECT user_id FROM award WHERE badge_id = %s) GROUP BY user_id HAVING vote_count >= 100" % (TYPE_ACTIVITY_UPDATE_QUESTION, TYPE_ACTIVITY_UPDATE_ANSWER, 27)
self.__award_for_count_num(query, 27)
@@ -316,11 +297,7 @@ class Command(BaseCommand):
"""
(5, '璇勮瀹', 3, '璇勮瀹', '璇勮10娆′互涓', 0, 0),
"""
- query = "SELECT count(*) vote_count, user_id FROM activity WHERE "+
- "activity_type = %s OR "+
- "activity_type = %s AND "+
- "user_id NOT IN (SELECT user_id FROM award WHERE badge_id = %s) "+
- "GROUP BY user_id HAVING vote_count >= 10" % (TYPE_ACTIVITY_COMMENT_QUESTION, TYPE_ACTIVITY_COMMENT_ANSWER, 5)
+ query = "SELECT count(*) vote_count, user_id FROM activity WHERE activity_type = %s OR activity_type = %s AND user_id NOT IN (SELECT user_id FROM award WHERE badge_id = %s) GROUP BY user_id HAVING vote_count >= 10" % (TYPE_ACTIVITY_COMMENT_QUESTION, TYPE_ACTIVITY_COMMENT_ANSWER, 5)
self.__award_for_count_num(query, 5)
def __award_for_count_num(self, query, badge):
diff --git a/forum/managers.py b/forum/managers.py
index 0f22c59c..94f58ea7 100644
--- a/forum/managers.py
+++ b/forum/managers.py
@@ -4,29 +4,8 @@ from django.contrib.auth.models import User, UserManager
from django.db import connection, models, transaction
from django.db.models import Q
from forum.models import *
-from urllib import quote, unquote
class QuestionManager(models.Manager):
- def get_translation_questions(self, orderby, page_size):
- questions = self.filter(deleted=False, author__id__in=[28,29]).order_by(orderby)[:page_size]
- return questions
-
- def get_questions_by_pagesize(self, orderby, page_size):
- questions = self.filter(deleted=False).order_by(orderby)[:page_size]
- return questions
-
- def get_questions_by_tag(self, tagname, orderby):
- questions = self.filter(deleted=False, tags__name = unquote(tagname)).order_by(orderby)
- return questions
-
- def get_unanswered_questions(self, orderby):
- questions = self.filter(deleted=False, answer_count=0).order_by(orderby)
- return questions
-
- def get_questions(self, orderby):
- questions = self.filter(deleted=False).order_by(orderby)
- return questions
-
def update_tags(self, question, tagnames, user):
"""
Updates Tag associations for a question to match the given
@@ -113,12 +92,7 @@ class TagManager(models.Manager):
'WHERE tag_id = tag.id'
') '
'WHERE id IN (%s)')
-
- def get_valid_tags(self, page_size):
- from forum.models import Tag
- tags = Tag.objects.all().filter(deleted=False).exclude(used_count=0).order_by("-id")[:page_size]
- return tags
-
+
def get_or_create_multiple(self, names, user):
"""
Fetches a list of Tags with the given names, creating any Tags
@@ -149,19 +123,6 @@ class TagManager(models.Manager):
query = self.UPDATE_USED_COUNTS_QUERY % ','.join(['%s'] * len(tags))
cursor.execute(query, [tag.id for tag in tags])
transaction.commit_unless_managed()
-
- def get_tags_by_questions(self, questions):
- question_ids = []
- for question in questions:
- question_ids.append(question.id)
-
- question_ids_str = ','.join([str(id) for id in question_ids])
- related_tags = self.extra(
- tables=['tag', 'question_tags'],
- where=["tag.id = question_tags.tag_id AND question_tags.question_id IN (" + question_ids_str + ")"]
- ).distinct()
-
- return related_tags
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'
@@ -244,16 +205,4 @@ class ReputeManager(models.Manager):
return row[0]
else:
- return 0
-class AwardManager(models.Manager):
- def get_recent_awards(self):
- awards = super(AwardManager, self).extra(
- select={'badge_id': 'badge.id', 'badge_name':'badge.name',
- 'badge_description': 'badge.description', 'badge_type': 'badge.type',
- 'user_id': 'auth_user.id', 'user_name': 'auth_user.username'
- },
- tables=['award', 'badge', 'auth_user'],
- order_by=['-awarded_at'],
- where=['auth_user.id=award.user_id AND badge_id=badge.id'],
- ).values('badge_id', 'badge_name', 'badge_description', 'badge_type', 'user_id', 'user_name')
- return awards
+ return 0
\ No newline at end of file
diff --git a/forum/models.py b/forum/models.py
index 290c9d56..aba2bf0b 100644
--- a/forum/models.py
+++ b/forum/models.py
@@ -10,6 +10,7 @@ from django.contrib.contenttypes import generic
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)
@@ -350,8 +351,7 @@ class Award(models.Model):
content_object = generic.GenericForeignKey('content_type', 'object_id')
awarded_at = models.DateTimeField(default=datetime.datetime.now)
notified = models.BooleanField(default=False)
- objects = AwardManager()
-
+
def __unicode__(self):
return u'[%s] is awarded a badge [%s] at %s' % (self.user.username, self.badge.name, self.awarded_at)
@@ -650,4 +650,4 @@ mark_offensive.connect(record_mark_offensive, sender=Question)
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)
\ No newline at end of file
+user_updated.connect(record_user_full_updated, sender=User)
diff --git a/forum/templatetags/extra_tags.py b/forum/templatetags/extra_tags.py
index 7c53c2cb..de853135 100644
--- a/forum/templatetags/extra_tags.py
+++ b/forum/templatetags/extra_tags.py
@@ -1,4 +1,4 @@
-锘縤mport time
+import time
import datetime
import math
import re
@@ -8,6 +8,7 @@ from django.utils.encoding import smart_unicode
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()
@@ -49,10 +50,10 @@ def tag_font_size(max_size, min_size, current_size):
weight = 0
return MIN_FONTSIZE + round((MAX_FONTSIZE - MIN_FONTSIZE) * weight)
-
+
LEADING_PAGE_RANGE_DISPLAYED = TRAILING_PAGE_RANGE_DISPLAYED = 5
LEADING_PAGE_RANGE = TRAILING_PAGE_RANGE = 4
-NUM_PAGES_OUTSIDE_RANGE = 1
+NUM_PAGES_OUTSIDE_RANGE = 1
ADJACENT_PAGES = 2
@register.inclusion_tag("paginator.html")
def cnprog_paginator(context):
@@ -64,10 +65,10 @@ def cnprog_paginator(context):
" Initialize variables "
in_leading_range = in_trailing_range = False
pages_outside_leading_range = pages_outside_trailing_range = range(0)
-
+
if (context["pages"] <= LEADING_PAGE_RANGE_DISPLAYED):
in_leading_range = in_trailing_range = True
- page_numbers = [n for n in range(1, context["pages"] + 1) if n > 0 and n <= context["pages"]]
+ page_numbers = [n for n in range(1, context["pages"] + 1) if n > 0 and n <= context["pages"]]
elif (context["page"] <= LEADING_PAGE_RANGE):
in_leading_range = True
page_numbers = [n for n in range(1, LEADING_PAGE_RANGE_DISPLAYED + 1) if n > 0 and n <= context["pages"]]
@@ -76,11 +77,11 @@ def cnprog_paginator(context):
in_trailing_range = True
page_numbers = [n for n in range(context["pages"] - TRAILING_PAGE_RANGE_DISPLAYED + 1, context["pages"] + 1) if n > 0 and n <= context["pages"]]
pages_outside_trailing_range = [n + 1 for n in range(0, NUM_PAGES_OUTSIDE_RANGE)]
- else:
+ else:
page_numbers = [n for n in range(context["page"] - ADJACENT_PAGES, context["page"] + ADJACENT_PAGES + 1) if n > 0 and n <= context["pages"]]
pages_outside_leading_range = [n + context["pages"] for n in range(0, -NUM_PAGES_OUTSIDE_RANGE, -1)]
pages_outside_trailing_range = [n + 1 for n in range(0, NUM_PAGES_OUTSIDE_RANGE)]
-
+
extend_url = context.get('extend_url', '')
return {
"base_url": context["base_url"],
@@ -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 = '%(reputation)s'
+ BADGE_TEMPLATE = '%(reputation)s'
if user.gold > 0 :
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ' '
- '鈼'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ''
+ '●'
'%(gold)s'
'')
if user.silver > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ' '
- '鈼'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ''
+ '●'
'%(silver)s'
'')
if user.bronze > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ' '
- '鈼'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ''
+ '●'
'%(bronze)s'
'')
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 = '%(reputation)s'
+ BADGE_TEMPLATE = '%(reputation)s'
if gold > 0 :
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ''
- '鈼'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ''
+ '●'
'%(gold)s'
'')
if silver > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ''
- '鈼'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ''
+ '●'
'%(silver)s'
'')
if bronze > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ''
- '鈼'
+ BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, ''
+ '●'
'%(bronze)s'
'')
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
@@ -197,12 +205,12 @@ def format_number(value):
m = re.match(pattern, strValue)
return first + result
-@register.simple_tag
+@register.simple_tag
def convert2tagname_list(question):
question['tagnames'] = [name for name in question['tagnames'].split(u' ')]
return ''
-@register.simple_tag
+@register.simple_tag
def diff_date(date, limen=2):
current_time = datetime.datetime(*time.localtime()[0:6])
diff = current_time - date
@@ -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:
@@ -229,4 +237,4 @@ def get_latest_changed_timestamp():
timestr = strftime("%H:%M %b-%d-%Y %Z", localtime(latest))
except:
timestr = ''
- return timestr
\ No newline at end of file
+ return timestr
diff --git a/forum/user.py b/forum/user.py
index 2461e073..13e9be30 100644
--- a/forum/user.py
+++ b/forum/user.py
@@ -1,4 +1,3 @@
-锘# coding=utf-8
from django.utils.translation import ugettext as _
class UserView:
def __init__(self, id, tab_title, tab_description, page_title, view_name, template_file, data_size=0):
@@ -14,61 +13,61 @@ class UserView:
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'
)
diff --git a/forum/views.py b/forum/views.py
index 8252304e..25574e0b 100644
--- a/forum/views.py
+++ b/forum/views.py
@@ -15,6 +15,7 @@ from django.utils import simplejson
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
@@ -76,17 +77,29 @@ def index(request):
orderby = "-last_activity_at"
# group questions by author_id of 28,29
if view_id == 'trans':
- questions = Question.objects.get_translation_questions(orderby, INDEX_PAGE_SIZE)
+ questions = Question.objects.filter(deleted=False, author__id__in=[28,29]).order_by(orderby)[:INDEX_PAGE_SIZE]
else:
- questions = Question.objects.get_questions_by_pagesize(orderby, INDEX_PAGE_SIZE)
+ questions = Question.objects.filter(deleted=False).order_by(orderby)[:INDEX_PAGE_SIZE]
# RISK - inner join queries
- questions = questions.select_related()
- tags = Tag.objects.get_valid_tags(INDEX_TAGS_SIZE)
+ questions = questions.select_related();
+ tags = Tag.objects.all().filter(deleted=False).exclude(used_count=0).order_by("-id")[:INDEX_TAGS_SIZE]
- awards = Award.objects.get_recent_awards()
+ awards = Award.objects.extra(
+ select={'badge_id': 'badge.id', 'badge_name':'badge.name',
+ 'badge_description': 'badge.description', 'badge_type': 'badge.type',
+ 'user_id': 'auth_user.id', 'user_name': 'auth_user.username'
+ },
+ tables=['award', 'badge', 'auth_user'],
+ order_by=['-awarded_at'],
+ where=['auth_user.id=award.user_id AND badge_id=badge.id'],
+ ).values('badge_id', 'badge_name', 'badge_description', 'badge_type', 'user_id', 'user_name')
+
+ class testvar:
+ content = 'haha'
return render_to_response('index.html', {
"questions" : questions,
+ 'testvar':testvar,
"tab_id" : view_id,
"tags" : tags,
"awards" : awards[:INDEX_AWARD_SIZE],
@@ -114,11 +127,29 @@ def questions(request, tagname=None, unanswered=False):
# 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
- pagesize = request.session.get("pagesize")
+ 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" }
@@ -130,24 +161,29 @@ def questions(request, tagname=None, unanswered=False):
# check if request is from tagged questions
if tagname is not None:
- objects = Question.objects.get_questions_by_tag(tagname, orderby)
+ #print datetime.datetime.now()
+ objects = Question.objects.filter(deleted=False, tags__name = unquote(tagname)).order_by(orderby)
+ #print datetime.datetime.now()
elif unanswered:
#check if request is from unanswered questions
template_file = "unanswered.html"
- objects = Question.objects.get_unanswered_questions(orderby)
+ objects = Question.objects.filter(deleted=False, answer_count=0).order_by(orderby)
else:
- objects = Question.objects.get_questions(orderby)
+ objects = Question.objects.filter(deleted=False).order_by(orderby)
# RISK - inner join queries
- objects = objects.select_related(depth=1);
+ objects = objects.select_related();
objects_list = Paginator(objects, 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
+ 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)
+
return render_to_response(template_file, {
"questions" : questions,
"tab_id" : view_id,
@@ -986,7 +1022,6 @@ def user_stats(request, user_id, user_view):
'title',
'author_id',
'accepted',
- 'vote_count',
'answer_count',
'vote_up_count',
'vote_down_count')[:100]
@@ -1055,8 +1090,7 @@ def user_recent(request, user_id, user_view):
'activity_type' : 'activity.activity_type'
},
tables=['activity', 'question'],
- where=['activity.content_type_id = %s AND activity.object_id = ' +
- 'question.id AND activity.user_id = %s AND activity.activity_type = %s'],
+ where=['activity.content_type_id = %s AND activity.object_id = question.id 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(
@@ -1080,8 +1114,8 @@ def user_recent(request, user_id, user_view):
'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 activity.user_id=%s AND activity.activity_type=%s'],
+ where=['activity.content_type_id = %s AND activity.object_id = answer.id '
+ 'AND answer.question_id=question.id AND activity.user_id=%s AND activity.activity_type=%s'],
params=[answer_type_id, user_id, TYPE_ACTIVITY_ANSWER],
order_by=['-activity.active_at']
).values(
@@ -1106,9 +1140,7 @@ def user_recent(request, user_id, user_view):
},
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'],
+ 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'],
params=[comment_type_id, question_type_id, user_id, TYPE_ACTIVITY_COMMENT_QUESTION],
order_by=['-comment.added_at']
).values(
@@ -1134,10 +1166,7 @@ def user_recent(request, user_id, user_view):
},
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'],
+ 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'],
params=[comment_type_id, answer_type_id, user_id, TYPE_ACTIVITY_COMMENT_ANSWER],
order_by=['-comment.added_at']
).values(
@@ -1163,9 +1192,7 @@ def user_recent(request, user_id, user_view):
'summary' : 'question_revision.summary'
},
tables=['activity', 'question_revision'],
- where=['activity.content_type_id = %s AND activity.object_id = question_revision.id AND '+
- 'activity.user_id = question_revision.author_id AND activity.user_id = %s AND '+
- 'activity.activity_type=%s'],
+ where=['activity.content_type_id = %s AND activity.object_id = question_revision.id 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(
@@ -1193,10 +1220,7 @@ def user_recent(request, user_id, user_view):
},
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 '+
- 'activity.activity_type=%s'],
+ 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 activity.activity_type=%s'],
params=[answer_revision_type_id, user_id, TYPE_ACTIVITY_UPDATE_ANSWER],
order_by=['-activity.active_at']
).values(
@@ -1222,9 +1246,7 @@ def user_recent(request, user_id, user_view):
'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.question_id=question.id AND activity.activity_type=%s'],
+ 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.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(
@@ -1245,8 +1267,7 @@ def user_recent(request, user_id, user_view):
'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'],
+ 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(
@@ -1299,8 +1320,7 @@ def user_responses(request, user_id, user_view):
},
select_params=[user_id],
tables=['answer', 'question', 'auth_user'],
- where=['answer.question_id = question.id AND answer.deleted=0 AND question.deleted = 0 AND '+
- 'question.author_id = %s AND answer.author_id <> %s AND answer.author_id=auth_user.id'],
+ where=['answer.question_id = question.id AND answer.deleted=0 AND question.deleted = 0 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(
@@ -1329,8 +1349,7 @@ def user_responses(request, user_id, user_view):
'user_id' : 'auth_user.id'
},
tables=['question', 'auth_user', 'comment'],
- where=['question.deleted = 0 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'],
+ where=['question.deleted = 0 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(
@@ -1359,9 +1378,7 @@ def user_responses(request, user_id, user_view):
'user_id' : 'auth_user.id'
},
tables=['answer', 'auth_user', 'comment', 'question'],
- where=['answer.deleted = 0 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'],
+ where=['answer.deleted = 0 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(
@@ -1392,8 +1409,7 @@ def user_responses(request, user_id, user_view):
},
select_params=[user_id],
tables=['answer', 'question', 'auth_user'],
- where=['answer.question_id = question.id AND answer.deleted=0 AND question.deleted = 0 AND '+
- 'answer.author_id = %s AND answer.accepted=1 AND question.author_id=auth_user.id'],
+ where=['answer.question_id = question.id AND answer.deleted=0 AND question.deleted = 0 AND answer.author_id = %s AND answer.accepted=1 AND question.author_id=auth_user.id'],
params=[user_id],
order_by=['-answer.id']
).values(
@@ -1437,8 +1453,7 @@ def user_votes(request, user_id, user_view):
},
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'],
+ 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(
@@ -1461,8 +1476,7 @@ def user_votes(request, user_id, user_view):
},
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'],
+ 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(
@@ -1487,8 +1501,7 @@ def user_votes(request, user_id, user_view):
def user_reputation(request, user_id, user_view):
user = get_object_or_404(User, id=user_id)
reputation = Repute.objects.extra(
- select={'positive': 'sum(positive)', 'negative': 'sum(negative)', 'question_id':'question_id',
- 'title': 'question.title'},
+ 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'],
@@ -1497,7 +1510,6 @@ def user_reputation(request, user_id, user_view):
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)
@@ -1519,8 +1531,7 @@ def user_favorites(request, user_id, user_view):
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',
+ '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',
@@ -1530,8 +1541,7 @@ def user_favorites(request, user_id, user_view):
},
select_params=[user_id],
tables=['question', 'auth_user', 'favorite_question'],
- where=['question.deleted = 0 AND question.last_activity_by_id = auth_user.id '+
- 'AND favorite_question.question_id = question.id AND favorite_question.user_id = %s'],
+ where=['question.deleted = 0 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',
@@ -1662,12 +1672,7 @@ def badges(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'},
+ 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]
@@ -1722,13 +1727,13 @@ def upload(request):
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")
diff --git a/junk b/junk
new file mode 100644
index 00000000..3f3226d6
--- /dev/null
+++ b/junk
@@ -0,0 +1,7 @@
+/branches/beta2/forum/feed.py r110 line 17:
+/branches/beta2/forum/feed.py r110 line 20:
+/branches/beta2/forum/forms.py r110 line 63:
+/branches/beta2/templates/question.html r120 line 237:
+/branches/beta2/templates/question.html r120 line 57:
+/branches/beta2/templates/question.html r120 line 456:
+/branches/beta2/forum/views.py r127 line 1088:
diff --git a/lanai.psproj b/lanai.psproj
new file mode 100644
index 00000000..7f44d7ff
--- /dev/null
+++ b/lanai.psproj
@@ -0,0 +1,557 @@
+[PyScripter]
+Version=1.9.9.3
+
+[Project]
+ClassName=TProjectRootNode
+StoreRelativePaths=FALSE
+ShowFileExtensions=FALSE
+
+[Project\ChildNodes]
+Count=2
+
+[Project\ChildNodes\Node0]
+ClassName=TProjectFilesNode
+
+[Project\ChildNodes\Node0\ChildNodes]
+Count=1
+
+[Project\ChildNodes\Node0\ChildNodes\Node0]
+ClassName=TProjectFolderNode
+Name=src
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes]
+Count=10
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0]
+ClassName=TProjectFolderNode
+Name=django_authopenid
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes]
+Count=9
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\django_authopenid\__init__.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\django_authopenid\admin.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\django_authopenid\forms.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\django_authopenid\middleware.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node4]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\django_authopenid\mimeparse.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node5]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\django_authopenid\models.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node6]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\django_authopenid\urls.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node7]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\django_authopenid\util.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node8]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\django_authopenid\views.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1]
+ClassName=TProjectFolderNode
+Name=forum
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes]
+Count=12
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node0]
+ClassName=TProjectFolderNode
+Name=management
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node0\ChildNodes]
+Count=2
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0]
+ClassName=TProjectFolderNode
+Name=commands
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0\ChildNodes]
+Count=3
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\management\commands\__init__.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\management\commands\mark_offensive_cron.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\management\commands\sample_command.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\management\__init__.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node1]
+ClassName=TProjectFolderNode
+Name=templatetags
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node1\ChildNodes]
+Count=3
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node1\ChildNodes\Node0]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\templatetags\__init__.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node1\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\templatetags\extra_filters.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node1\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\templatetags\extra_tags.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\__init__.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node3]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\admin.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node4]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\auth.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node5]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\const.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node6]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\diff.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node7]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\forms.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node8]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\managers.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node9]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\models.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node10]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\user.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1\ChildNodes\Node11]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\forum\views.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2]
+ClassName=TProjectFolderNode
+Name=sql_scripts
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2\ChildNodes]
+Count=6
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2\ChildNodes\Node0]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\sql_scripts\cnprog_new_install.sql
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\sql_scripts\update_2009_01_13_001.sql
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\sql_scripts\update_2009_01_13_002.sql
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2\ChildNodes\Node3]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\sql_scripts\update_2009_12_24_001.sql
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2\ChildNodes\Node4]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\sql_scripts\update_2009_12_27_001.sql
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2\ChildNodes\Node5]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\sql_scripts\update_2009_12_27_002.sql
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3]
+ClassName=TProjectFolderNode
+Name=templates
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes]
+Count=44
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0]
+ClassName=TProjectFolderNode
+Name=authopenid
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes]
+Count=10
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node0]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\changeemail.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\changeopenid.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\changepw.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node3]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\complete.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node4]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\delete.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node5]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\failure.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node6]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\sendpw.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node7]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\settings.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node8]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\signin.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node0\ChildNodes\Node9]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\authopenid\signup.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1]
+ClassName=TProjectFolderNode
+Name=content
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes]
+Count=2
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0]
+ClassName=TProjectFolderNode
+Name=js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes]
+Count=10
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0]
+ClassName=TProjectFolderNode
+Name=wmd
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0\ChildNodes]
+Count=3
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node0]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\wmd\showdown.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\wmd\wmd-base.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\wmd\wmd-plus.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\com.cnprog.editor.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\com.cnprog.post.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node3]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\com.cnprog.utils.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node4]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\excanvas.pack.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node5]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\jquery.flot.pack.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node6]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\jquery.openid.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node7]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\jquery.validate.pack.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node8]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\jquery-1.2.6.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node0\ChildNodes\Node9]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\js\jquery-1.2.6.min.js
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node1]
+ClassName=TProjectFolderNode
+Name=style
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node1\ChildNodes]
+Count=4
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node1\ChildNodes\Node0]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\style\default.css
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node1\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\style\jquery.autocomplete.css
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node1\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\style\openid.css
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node1\ChildNodes\Node1\ChildNodes\Node3]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\content\style\prettify.css
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\404.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node3]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\500.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node4]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\about.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node5]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\answer_edit.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node6]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\ask.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node7]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\badge.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node8]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\badges.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node9]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\base.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node10]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\base_content.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node11]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\close.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node12]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\faq.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node13]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\footer.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node14]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\header.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node15]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\index.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node16]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\logout.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node17]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\pagesize.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node18]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\paginator.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node19]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\privacy.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node20]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\question.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node21]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\question_edit.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node22]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\question_retag.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node23]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\questions.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node24]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\reopen.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node25]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\revisions_answer.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node26]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\revisions_question.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node27]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\sidebar.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node28]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\tags.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node29]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\unanswered.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node30]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node31]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_edit.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node32]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_favorites.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node33]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_footer.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node34]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_info.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node35]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_preferences.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node36]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_recent.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node37]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_reputation.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node38]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_responses.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node39]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_stats.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node40]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_tabs.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node41]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\user_votes.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node42]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\users.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node3\ChildNodes\Node43]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\templates\users_questions.html
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node4]
+ClassName=TProjectFolderNode
+Name=utils
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node4\ChildNodes]
+Count=4
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node4\ChildNodes\Node0]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\utils\__init__.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node4\ChildNodes\Node1]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\utils\cache.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node4\ChildNodes\Node2]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\utils\html.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node4\ChildNodes\Node3]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\utils\lists.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node5]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\__init__.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node6]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\manage.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node7]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\settings.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node8]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\test.py
+
+[Project\ChildNodes\Node0\ChildNodes\Node0\ChildNodes\Node9]
+ClassName=TProjectFileNode
+FileName=C:\Projects\Lanai\src\urls.py
+
+[Project\ChildNodes\Node1]
+ClassName=TProjectRunConfiguationsNode
+
+[Project\ExtraPythonPath]
+Count=0
+
diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po
new file mode 100644
index 00000000..c4c1e674
--- /dev/null
+++ b/locale/en/LC_MESSAGES/django.po
@@ -0,0 +1,2540 @@
+# 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 , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-22 20:40-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: settings.py:32
+msgid "account/"
+msgstr ""
+
+#: settings.py:32 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 templates/backup/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 templates/base.html:7 templates/base_content.html:6
+#: templates/faq.html:25 templates/faq.html.py:108
+#: templates/backup/base.html:7 templates/backup/base_content.html:6
+#: templates/backup/faq.html:25 templates/backup/faq.html.py:108
+#: templates/tough/faq.html:23 templates/tough/faq.html.py:106
+#: templates/tough/question_retag.html:89
+msgid "site title"
+msgstr ""
+
+#: forum/feed.py:17
+msgid " - "
+msgstr ""
+
+#: forum/feed.py:17 templates/base.html:7 templates/base_content.html:6
+#: templates/backup/base.html:7 templates/backup/base_content.html:6
+msgid "site slogan"
+msgstr ""
+
+#: forum/feed.py:17
+msgid "latest questions"
+msgstr ""
+
+#: forum/feed.py:19 templates/index.html:8 templates/backup/index.html:8
+msgid "meta site content"
+msgstr ""
+
+#: forum/feed.py:21
+msgid "copyright message"
+msgstr ""
+
+#: forum/forms.py:14 templates/answer_edit_tips.html:34
+#: templates/answer_edit_tips.html.py:39 templates/question_edit_tips.html:31
+#: templates/question_edit_tips.html:36
+#: templates/backup/answer_edit_tips.html:33
+#: templates/backup/answer_edit_tips.html:38
+#: templates/backup/question_edit_tips.html:29
+#: templates/backup/question_edit_tips.html:34
+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
+#: templates/backup/header.html:30 templates/backup/header.html.py:59
+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/questions.html:58
+#: templates/questions.html.py:70 templates/unanswered.html:48
+#: templates/unanswered.html.py:60 templates/backup/index.html:56
+#: templates/backup/question.html:195 templates/backup/question.html.py:367
+#: templates/backup/questions.html:57 templates/backup/questions.html.py:69
+#: templates/backup/unanswered.html:47 templates/backup/unanswered.html:59
+#: templates/tough/unanswered.html:46 templates/tough/unanswered.html.py:58
+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:52
+#: templates/backup/badges.html:52
+msgid "gold"
+msgstr ""
+
+#: forum/models.py:317 templates/badges.html:62
+#: templates/backup/badges.html:62
+msgid "silver"
+msgstr ""
+
+#: forum/models.py:318 templates/badges.html:70
+#: templates/backup/badges.html:70
+msgid "bronze"
+msgstr ""
+
+#: forum/user.py:16 templates/user_tabs.html:7
+#: templates/backup/user_tabs.html:6
+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
+#: templates/backup/user_tabs.html:8
+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
+#: templates/backup/user_tabs.html:12
+msgid "responses"
+msgstr ""
+
+#: forum/user.py:34 templates/user_tabs.html:12
+#: templates/backup/user_tabs.html:11
+msgid "comments and answers to others questions"
+msgstr ""
+
+#: forum/user.py:35
+msgid "profile - responses"
+msgstr ""
+
+#: forum/user.py:42 templates/user_info.html:23 templates/users.html:26
+#: templates/backup/user_info.html:22 templates/backup/users.html:25
+msgid "reputation"
+msgstr ""
+
+#: forum/user.py:43
+msgid "user reputation in the community"
+msgstr ""
+
+#: forum/user.py:44
+msgid "profile - user reputation"
+msgstr ""
+
+#: 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
+#: templates/backup/user_tabs.html:19
+msgid "casted votes"
+msgstr "votes"
+
+#: forum/user.py:60 templates/user_tabs.html:20
+#: templates/backup/user_tabs.html:19
+msgid "user vote record"
+msgstr ""
+
+#: forum/user.py:61
+msgid "profile - votes"
+msgstr ""
+
+#: forum/user.py:68
+msgid "preferences"
+msgstr ""
+
+#: forum/user.py:69 templates/user_tabs.html:28
+#: templates/backup/user_tabs.html:27
+msgid "user preference settings"
+msgstr ""
+
+#: forum/user.py:70
+msgid "profile - user preferences"
+msgstr ""
+
+#: forum/views.py:1730
+msgid "uploading images is limited to users with >60 reputation points"
+msgstr ""
+
+#: forum/views.py:1732
+msgid "allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"
+msgstr ""
+
+#: forum/views.py:1734
+#, python-format
+msgid "maximum upload file size is %sK"
+msgstr ""
+
+#: forum/views.py:1736
+#, 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 templates/backup/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 templates/backup/404.html:24
+msgid "Sorry, could not find the page you requested."
+msgstr ""
+
+#: templates/404.html:26 templates/backup/404.html:26
+msgid "This might have happened for the following reasons:"
+msgstr ""
+
+#: templates/404.html:28 templates/backup/404.html:28
+msgid "this question or answer has been deleted;"
+msgstr ""
+
+#: templates/404.html:29 templates/backup/404.html:29
+msgid "url has error - please check it;"
+msgstr ""
+
+#: templates/404.html:30 templates/backup/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 templates/backup/404.html:31
+msgid "if you believe this error 404 should not have occured, please"
+msgstr ""
+
+#: templates/404.html:32 templates/backup/404.html:32
+msgid "report this problem"
+msgstr ""
+
+#: templates/404.html:41 templates/500.html:27 templates/backup/404.html:41
+#: templates/backup/500.html:27
+msgid "back to previous page"
+msgstr ""
+
+#: templates/404.html:42 templates/backup/404.html:42
+msgid "see all questions"
+msgstr ""
+
+#: templates/404.html:43 templates/backup/404.html:43
+msgid "see all tags"
+msgstr ""
+
+#: templates/500.html:24 templates/backup/500.html:24
+msgid "system error log is recorded, error will be fixed as soon as possible"
+msgstr ""
+
+#: templates/500.html:25 templates/backup/500.html:25
+msgid "please report the error to the site administrators if you wish"
+msgstr ""
+
+#: templates/500.html:28 templates/backup/500.html:28
+msgid "see latest questions"
+msgstr ""
+
+#: templates/500.html:29 templates/backup/500.html:29
+msgid "see tags"
+msgstr ""
+
+#: templates/about.html:6 templates/about.html.py:11
+#: templates/backup/about.html:6 templates/backup/about.html.py:11
+msgid "About"
+msgstr ""
+
+#: templates/answer_edit.html:4 templates/answer_edit.html.py:47
+#: templates/backup/answer_edit.html:3 templates/backup/answer_edit.html:46
+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
+#: templates/backup/answer_edit.html:23 templates/backup/answer_edit.html:26
+#: templates/backup/ask.html:24 templates/backup/ask.html.py:27
+#: templates/backup/question.html:36 templates/backup/question.html.py:39
+#: templates/backup/question_edit.html:25
+msgid "hide preview"
+msgstr ""
+
+#: templates/answer_edit.html:27 templates/ask.html:28
+#: templates/question.html:40 templates/question_edit.html:27
+#: templates/backup/answer_edit.html:26 templates/backup/ask.html:27
+#: templates/backup/question.html:39 templates/backup/question_edit.html:25
+msgid "show preview"
+msgstr ""
+
+#: templates/answer_edit.html:47 templates/question_edit.html:65
+#: templates/revisions_answer.html:36 templates/revisions_question.html:36
+#: templates/backup/answer_edit.html:46 templates/backup/question_edit.html:63
+#: templates/backup/revisions_answer.html:35
+#: templates/backup/revisions_question.html:34
+#: templates/tough/question_retag.html:51
+msgid "back"
+msgstr ""
+
+#: templates/answer_edit.html:52 templates/question_edit.html:70
+#: templates/revisions_answer.html:47 templates/revisions_question.html:47
+#: templates/backup/answer_edit.html:51 templates/backup/question_edit.html:68
+#: templates/backup/revisions_answer.html:46
+#: templates/backup/revisions_question.html:45
+msgid "revision"
+msgstr ""
+
+#: templates/answer_edit.html:55 templates/question_edit.html:74
+#: templates/backup/answer_edit.html:54 templates/backup/question_edit.html:72
+msgid "select revision"
+msgstr ""
+
+#: templates/answer_edit.html:62 templates/ask.html:81
+#: templates/question.html:447 templates/question_edit.html:91
+#: templates/backup/answer_edit.html:61 templates/backup/ask.html:80
+#: templates/backup/question.html:437 templates/backup/question_edit.html:89
+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
+#: templates/backup/answer_edit.html:61 templates/backup/ask.html:80
+#: templates/backup/question.html:437 templates/backup/question_edit.html:89
+msgid "toggle preview"
+msgstr ""
+
+#: templates/answer_edit.html:73 templates/question_edit.html:119
+#: templates/backup/answer_edit.html:72
+#: templates/backup/question_edit.html:117
+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 templates/backup/answer_edit.html:73
+#: templates/backup/close.html:29 templates/backup/question_edit.html:118
+#: templates/backup/reopen.html:28 templates/backup/user_edit.html:81
+#: templates/tough/question_retag.html:75
+msgid "Cancel"
+msgstr ""
+
+#: templates/answer_edit_tips.html:4
+msgid "answer tips"
+msgstr "Tips"
+
+#: templates/answer_edit_tips.html:7 templates/backup/answer_edit_tips.html:6
+msgid "please make your answer relevant to this community"
+msgstr ""
+
+#: templates/answer_edit_tips.html:10 templates/backup/answer_edit_tips.html:9
+msgid "try to give an answer, rather than engage into a discussion"
+msgstr ""
+
+#: templates/answer_edit_tips.html:13
+#: templates/backup/answer_edit_tips.html:12
+msgid "please try to provide details"
+msgstr ""
+
+#: templates/answer_edit_tips.html:16 templates/question_edit_tips.html:13
+#: templates/backup/answer_edit_tips.html:15
+#: templates/backup/question_edit_tips.html:11
+msgid "be clear and concise"
+msgstr ""
+
+#: templates/answer_edit_tips.html:19 templates/question_edit_tips.html:16
+#: templates/backup/answer_edit_tips.html:18
+#: templates/backup/question_edit_tips.html:14
+msgid "see frequently asked questions"
+msgstr ""
+
+#: templates/answer_edit_tips.html:25 templates/question_edit_tips.html:22
+#: templates/backup/answer_edit_tips.html:24
+#: templates/backup/question_edit_tips.html:20
+msgid "Markdown tips"
+msgstr "Markdown basics"
+
+#: templates/answer_edit_tips.html:28 templates/question_edit_tips.html:25
+#: templates/backup/answer_edit_tips.html:27
+#: templates/backup/question_edit_tips.html:23
+msgid "*italic* or __italic__"
+msgstr ""
+
+#: templates/answer_edit_tips.html:31 templates/question_edit_tips.html:28
+#: templates/backup/answer_edit_tips.html:30
+#: templates/backup/question_edit_tips.html:26
+msgid "**bold** or __bold__"
+msgstr ""
+
+#: templates/answer_edit_tips.html:34 templates/question_edit_tips.html:31
+#: templates/backup/answer_edit_tips.html:33
+#: templates/backup/question_edit_tips.html:29
+msgid "link"
+msgstr ""
+
+#: templates/answer_edit_tips.html:34 templates/answer_edit_tips.html.py:39
+#: templates/question_edit_tips.html:31 templates/question_edit_tips.html:36
+#: templates/backup/answer_edit_tips.html:33
+#: templates/backup/answer_edit_tips.html:38
+#: templates/backup/question_edit_tips.html:29
+#: templates/backup/question_edit_tips.html:34
+msgid "text"
+msgstr ""
+
+#: templates/answer_edit_tips.html:39 templates/question_edit_tips.html:36
+#: templates/backup/answer_edit_tips.html:38
+#: templates/backup/question_edit_tips.html:34
+msgid "image"
+msgstr ""
+
+#: templates/answer_edit_tips.html:43 templates/question_edit_tips.html:40
+#: templates/backup/answer_edit_tips.html:42
+#: templates/backup/question_edit_tips.html:38
+msgid "numbered list:"
+msgstr ""
+
+#: templates/answer_edit_tips.html:48 templates/question_edit_tips.html:45
+#: templates/backup/answer_edit_tips.html:47
+#: templates/backup/question_edit_tips.html:43
+msgid "basic HTML tags are also supported"
+msgstr ""
+
+#: templates/answer_edit_tips.html:51 templates/question_edit_tips.html:48
+#: templates/backup/answer_edit_tips.html:50
+#: templates/backup/question_edit_tips.html:46
+msgid "learn more about Markdown"
+msgstr ""
+
+#: templates/ask.html:4 templates/ask.html.py:60 templates/backup/ask.html:3
+#: templates/backup/ask.html.py:59
+msgid "Ask a question"
+msgstr ""
+
+#: templates/ask.html:106 templates/backup/ask.html:105
+msgid "Use"
+msgstr ""
+
+#: templates/ask.html:106 templates/backup/ask.html:105
+msgid "learn more about OpenID"
+msgstr ""
+
+#: templates/ask.html:106 templates/authopenid/signin.html:34
+#: templates/authopenid/signin.html:60 templates/backup/ask.html:105
+msgid "Login"
+msgstr ""
+
+#: templates/ask.html:109 templates/backup/ask.html:108
+msgid "Get your own "
+msgstr ""
+
+#: templates/ask.html:117 templates/authopenid/sendpw.html:27
+#: templates/backup/ask.html:116
+msgid "User name"
+msgstr ""
+
+#: templates/ask.html:120 templates/backup/ask.html:119
+msgid "Email: (won't be shown to anyone)"
+msgstr ""
+
+#: templates/ask.html:127 templates/backup/ask.html:126
+msgid "Ask your question"
+msgstr ""
+
+#: templates/badge.html:6 templates/badge.html.py:17
+#: templates/backup/badge.html:5 templates/backup/badge.html.py:16
+msgid "Badge"
+msgstr ""
+
+#: templates/badge.html:26 templates/backup/badge.html:25
+msgid "The users have been awarded with badges:"
+msgstr ""
+
+#: templates/badges.html:6 templates/backup/badges.html:6
+msgid "Badges summary"
+msgstr ""
+
+#: templates/badges.html:17 templates/user_stats.html:113
+#: templates/backup/badges.html:17 templates/backup/user_stats.html:112
+msgid "Badges"
+msgstr ""
+
+#: templates/badges.html:21 templates/backup/badges.html:21
+msgid "Community gives you awards for your questions, answers and votes."
+msgstr ""
+
+#: templates/badges.html:22 templates/backup/badges.html:22
+msgid ""
+"Below is the list of available badges and number of times each type of badge "
+"has been awarded."
+msgstr ""
+
+#: templates/badges.html:49 templates/backup/badges.html:49
+msgid "Community badges"
+msgstr ""
+
+#: templates/badges.html:55 templates/backup/badges.html:55
+msgid "Gold badge is very rare."
+msgstr ""
+
+#: templates/badges.html:56 templates/backup/badges.html:56
+msgid ""
+"To obtain it you have to show profound knowledge and ability in addition to "
+"actively participating in the community."
+msgstr ""
+
+#: templates/badges.html:57 templates/backup/badges.html:57
+msgid "Gold badge is the highest award in this community."
+msgstr ""
+
+#: templates/badges.html:65 templates/backup/badges.html:65
+msgid "Obtaining silver badge requires significant patience."
+msgstr ""
+
+#: templates/badges.html:66 templates/backup/badges.html:66
+msgid "If you got one, you've very significantly contributed to this community"
+msgstr ""
+
+#: templates/badges.html:69 templates/backup/badges.html:69
+msgid "bronze badge: often given as a special honor"
+msgstr ""
+
+#: templates/badges.html:73 templates/backup/badges.html:73
+msgid ""
+"If you are active in this community, you will will get this medal - still it "
+"is a special honor."
+msgstr ""
+
+#: templates/base.html:59 templates/base_content.html:60
+#: templates/backup/base.html:59 templates/backup/base_content.html:57
+msgid "congratulations, community gave you a badge"
+msgstr ""
+
+#: templates/base.html:61 templates/base_content.html:62
+#: templates/backup/base.html:61 templates/backup/base_content.html:59
+msgid "profile"
+msgstr ""
+
+#: templates/base_content.html:61 templates/backup/base_content.html:58
+msgid "see"
+msgstr ""
+
+#: templates/book.html:7 templates/backup/book.html:7
+msgid "reading channel"
+msgstr ""
+
+#: templates/book.html:26 templates/backup/book.html:26
+msgid "[author]"
+msgstr ""
+
+#: templates/book.html:30 templates/backup/book.html:30
+msgid "[publisher]"
+msgstr ""
+
+#: templates/book.html:34 templates/backup/book.html:34
+msgid "[publication date]"
+msgstr ""
+
+#: templates/book.html:38 templates/backup/book.html:38
+msgid "[price]"
+msgstr ""
+
+#: templates/book.html:39 templates/backup/book.html:39
+msgid "currency unit"
+msgstr ""
+
+#: templates/book.html:42 templates/backup/book.html:42
+msgid "[pages]"
+msgstr ""
+
+#: templates/book.html:43 templates/backup/book.html:43
+msgid "pages abbreviation"
+msgstr ""
+
+#: templates/book.html:46 templates/backup/book.html:46
+msgid "[tags]"
+msgstr ""
+
+#: templates/book.html:56 templates/backup/book.html:56
+msgid "author blog"
+msgstr ""
+
+#: templates/book.html:62 templates/backup/book.html:62
+msgid "book directory"
+msgstr ""
+
+#: templates/book.html:66 templates/backup/book.html:66
+msgid "buy online"
+msgstr ""
+
+#: templates/book.html:79 templates/backup/book.html:79
+msgid "reader questions"
+msgstr ""
+
+#: templates/book.html:82 templates/backup/book.html:82
+msgid "ask the author"
+msgstr ""
+
+#: templates/book.html:88 templates/book.html.py:93
+#: templates/users_questions.html:17 templates/backup/book.html:88
+#: templates/backup/book.html.py:93 templates/backup/users_questions.html:16
+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
+#: templates/backup/book.html:88 templates/backup/book.html.py:93
+#: templates/backup/users_questions.html:10
+#: templates/backup/users_questions.html:16
+msgid "number of times"
+msgstr ""
+
+#: templates/book.html:105 templates/index.html:47 templates/questions.html:46
+#: templates/unanswered.html:37 templates/users_questions.html:30
+#: templates/backup/book.html:105 templates/backup/index.html:47
+#: templates/backup/questions.html:45 templates/backup/unanswered.html:36
+#: templates/backup/users_questions.html:29 templates/tough/unanswered.html:35
+msgid "votes"
+msgstr ""
+
+#: templates/book.html:108 templates/backup/book.html:108
+msgid "the answer has been accepted to be correct"
+msgstr ""
+
+#: templates/book.html:115 templates/index.html:48 templates/questions.html:47
+#: templates/unanswered.html:38 templates/users_questions.html:40
+#: templates/backup/book.html:115 templates/backup/index.html:48
+#: templates/backup/questions.html:46 templates/backup/unanswered.html:37
+#: templates/backup/users_questions.html:39 templates/tough/unanswered.html:36
+msgid "views"
+msgstr ""
+
+#: templates/book.html:125 templates/index.html:68 templates/question.html:112
+#: templates/question.html.py:479 templates/questions.html:84
+#: templates/questions.html.py:149 templates/tags.html:47
+#: templates/unanswered.html:75 templates/unanswered.html.py:109
+#: templates/users_questions.html:52 templates/backup/book.html:125
+#: templates/backup/index.html:68 templates/backup/index.html.py:93
+#: templates/backup/question.html:111 templates/backup/question.html.py:469
+#: templates/backup/questions.html:83 templates/backup/questions.html:148
+#: templates/backup/tags.html:46 templates/backup/unanswered.html:74
+#: templates/backup/unanswered.html:108
+#: templates/backup/users_questions.html:51 templates/tough/unanswered.html:72
+#: templates/tough/unanswered.html:105
+msgid "using tags"
+msgstr ""
+
+#: templates/book.html:147 templates/backup/book.html:147
+msgid "subscribe to book RSS feed"
+msgstr ""
+
+#: templates/book.html:147 templates/index.html:116
+#: templates/backup/book.html:147 templates/backup/index.html:115
+msgid "subscribe to the questions feed"
+msgstr ""
+
+#: templates/close.html:6 templates/close.html.py:16
+#: templates/backup/close.html:6 templates/backup/close.html.py:16
+msgid "Close question"
+msgstr ""
+
+#: templates/close.html:19 templates/backup/close.html:19
+msgid "Close the question"
+msgstr ""
+
+#: templates/close.html:25 templates/backup/close.html:25
+msgid "Reasons"
+msgstr ""
+
+#: templates/close.html:28 templates/backup/close.html:28
+msgid "OK to close"
+msgstr ""
+
+#: templates/faq.html:11 templates/backup/faq.html:11
+#: templates/tough/faq.html:9
+msgid "Frequently Asked Questions "
+msgstr ""
+
+#: templates/faq.html:15 templates/backup/faq.html:15
+#: templates/tough/faq.html:13
+msgid "What kinds of questions can I ask here?"
+msgstr ""
+
+#: templates/faq.html:16 templates/backup/faq.html:16
+#: templates/tough/faq.html:14
+msgid ""
+"Most importanly - questions should be relevant to this "
+"community."
+msgstr ""
+
+#: templates/faq.html:17 templates/backup/faq.html:17
+#: templates/tough/faq.html:15
+msgid ""
+"Before asking the question - please make sure to use search to see whether "
+"your question has alredy been answered."
+msgstr ""
+
+#: templates/faq.html:20 templates/backup/faq.html:20
+#: templates/tough/faq.html:18
+msgid "What questions should I avoid asking?"
+msgstr ""
+
+#: templates/faq.html:21 templates/backup/faq.html:21
+#: templates/tough/faq.html:19
+msgid ""
+"Please avoid asking questions that are not relevant to this community, too "
+"subjective and argumentative."
+msgstr ""
+
+#: templates/faq.html:24 templates/backup/faq.html:24
+#: templates/tough/faq.html:22
+msgid "What should I avoid in my answers?"
+msgstr ""
+
+#: templates/faq.html:25 templates/backup/faq.html:25
+#: templates/tough/faq.html:23
+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 ""
+
+#: templates/faq.html:28 templates/backup/faq.html:28
+#: templates/tough/faq.html:26
+msgid "Who moderates this community?"
+msgstr ""
+
+#: templates/faq.html:29 templates/backup/faq.html:29
+#: templates/tough/faq.html:27
+msgid "The short answer is: you."
+msgstr ""
+
+#: templates/faq.html:30 templates/backup/faq.html:30
+#: templates/tough/faq.html:28
+msgid "This website is moderated by the users."
+msgstr ""
+
+#: templates/faq.html:31 templates/backup/faq.html:31
+#: templates/tough/faq.html:29
+msgid ""
+"The reputation system allows users earn the authorization to perform a "
+"variety of moderation tasks."
+msgstr ""
+
+#: templates/faq.html:34 templates/backup/faq.html:34
+#: templates/tough/faq.html:32
+msgid "How does reputation system work?"
+msgstr ""
+
+#: templates/faq.html:35 templates/backup/faq.html:35
+#: templates/tough/faq.html:33
+msgid ""
+"Anyone can ask questions and give answers, points are not necessary for that."
+msgstr ""
+
+#: templates/faq.html:36 templates/backup/faq.html:36
+#: templates/tough/faq.html:34
+msgid ""
+"As we've said before, users help running this site. Point system helps "
+"select users who can administer this community."
+msgstr ""
+
+#: templates/faq.html:37 templates/backup/faq.html:37
+#: templates/tough/faq.html:35
+msgid ""
+"Reputation points roughly measure how community trusts you. These points are "
+"given to you directly by other members of the community."
+msgstr ""
+
+#: templates/faq.html:40 templates/backup/faq.html:40
+#: templates/tough/faq.html:38
+msgid ""
+"For example, if you ask an interesting question or give a helpful answer, "
+"your input will be upvoted and you will gain more trust in the community."
+msgstr ""
+
+#: templates/faq.html:41 templates/backup/faq.html:41
+#: templates/tough/faq.html:39
+msgid ""
+"If on the other hand someone gives a misleading answer, the answer will be "
+"voted down and he/she loses some points."
+msgstr ""
+
+#: templates/faq.html:42 templates/backup/faq.html:42
+#: templates/tough/faq.html:40
+msgid ""
+"Each vote in favor will generate 10 points, each vote "
+"against will subtract 2 points."
+msgstr ""
+
+#: templates/faq.html:43 templates/backup/faq.html:43
+#: templates/tough/faq.html:41
+msgid ""
+"Through the votes of other people you can accumulate a maximum of "
+"200 points."
+msgstr ""
+
+#: templates/faq.html:44 templates/backup/faq.html:44
+msgid "After accumulating certain number of points, you can do more:"
+msgstr ""
+
+#: templates/faq.html:52 templates/user_votes.html:14
+#: templates/backup/faq.html:52 templates/backup/user_votes.html:13
+#: templates/tough/faq.html:50
+msgid "upvote"
+msgstr ""
+
+#: templates/faq.html:56 templates/backup/faq.html:56
+#: templates/tough/faq.html:54
+msgid "use tags"
+msgstr ""
+
+#: templates/faq.html:60 templates/backup/faq.html:60
+#: templates/tough/faq.html:58
+msgid "add comments"
+msgstr ""
+
+#: templates/faq.html:64 templates/user_votes.html:16
+#: templates/backup/faq.html:64 templates/backup/user_votes.html:15
+#: templates/tough/faq.html:62
+msgid "downvote"
+msgstr ""
+
+#: templates/faq.html:71 templates/backup/faq.html:71
+#: templates/tough/faq.html:69
+msgid "retag questions"
+msgstr ""
+
+#: templates/faq.html:75 templates/backup/faq.html:75
+#: templates/tough/faq.html:73
+msgid "edit community wiki questions"
+msgstr ""
+
+#: templates/faq.html:79 templates/backup/faq.html:79
+#: templates/tough/faq.html:77
+msgid "edit any answer"
+msgstr ""
+
+#: templates/faq.html:83 templates/backup/faq.html:83
+#: templates/tough/faq.html:81
+msgid "open any closed question"
+msgstr ""
+
+#: templates/faq.html:87 templates/backup/faq.html:87
+#: templates/tough/faq.html:85
+msgid "delete any comment"
+msgstr ""
+
+#: templates/faq.html:91 templates/backup/faq.html:91
+#: templates/tough/faq.html:89
+msgid "delete any questions and answers and perform other moderation tasks"
+msgstr ""
+
+#: templates/faq.html:98 templates/backup/faq.html:98
+msgid "To register, do I need to create new password?"
+msgstr ""
+
+#: templates/faq.html:99 templates/backup/faq.html:99
+#: templates/tough/faq.html:97
+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:100 templates/backup/faq.html:100
+#: templates/tough/faq.html:98
+msgid "Login now!"
+msgstr ""
+
+#: templates/faq.html:103 templates/backup/faq.html:103
+#: templates/tough/faq.html:101
+msgid "Why other people can edit my questions/answers?"
+msgstr ""
+
+#: templates/faq.html:104 templates/backup/faq.html:104
+#: templates/tough/faq.html:102
+msgid "Goal of this site is..."
+msgstr ""
+
+#: templates/faq.html:104 templates/backup/faq.html:104
+#: templates/tough/faq.html:102
+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:105 templates/backup/faq.html:105
+#: templates/tough/faq.html:103
+msgid "If this approach is not for you, we respect your choice."
+msgstr ""
+
+#: templates/faq.html:107 templates/backup/faq.html:107
+#: templates/tough/faq.html:105
+msgid "Still have questions?"
+msgstr ""
+
+#: templates/faq.html:108 templates/backup/faq.html:108
+msgid "Please ask your question, help make our community better!"
+msgstr ""
+
+#: templates/faq.html:108 templates/header.html:29 templates/header.html.py:60
+#: templates/backup/faq.html:108 templates/backup/header.html:29
+#: templates/backup/header.html.py:58 templates/tough/faq.html:106
+msgid "questions"
+msgstr ""
+
+#: templates/faq.html:108 templates/index.html:121
+#: templates/backup/faq.html:108 templates/backup/index.html:120
+#: templates/tough/faq.html:106
+msgid "."
+msgstr ""
+
+#: templates/footer.html:7 templates/header.html:12 templates/index.html:83
+#: templates/backup/footer.html:7 templates/backup/header.html:12
+#: templates/backup/index.html:83
+msgid "about"
+msgstr ""
+
+#: templates/footer.html:8 templates/header.html:13 templates/index.html:84
+#: templates/backup/footer.html:8 templates/backup/header.html:13
+#: templates/backup/index.html:84
+msgid "faq"
+msgstr ""
+
+#: templates/footer.html:9 templates/backup/footer.html:9
+msgid "blog"
+msgstr ""
+
+#: templates/footer.html:10 templates/backup/footer.html:10
+msgid "contact us"
+msgstr ""
+
+#: templates/footer.html:11 templates/backup/footer.html:11
+msgid "privacy policy"
+msgstr ""
+
+#: templates/footer.html:12 templates/backup/footer.html:12
+msgid "give feedback"
+msgstr ""
+
+#: templates/footer.html:18 templates/backup/footer.html:18
+msgid "current revision"
+msgstr ""
+
+#: templates/header.html:8 templates/backup/header.html:8
+msgid "logout"
+msgstr ""
+
+#: templates/header.html:10 templates/authopenid/signup.html:39
+#: templates/backup/header.html:10
+msgid "login"
+msgstr ""
+
+#: templates/header.html:23 templates/backup/header.html:23
+msgid "back to home page"
+msgstr ""
+
+#: templates/header.html:31 templates/header.html.py:62
+#: templates/backup/header.html:31 templates/backup/header.html.py:60
+msgid "users"
+msgstr ""
+
+#: templates/header.html:32 templates/backup/header.html:32
+msgid "books"
+msgstr ""
+
+#: templates/header.html:34 templates/index.html:121
+#: templates/backup/header.html:34 templates/backup/index.html:120
+msgid "unanswered questions"
+msgstr "unanswered"
+
+#: templates/header.html:38 templates/backup/header.html:37
+msgid "my profile"
+msgstr ""
+
+#: templates/header.html:42 templates/backup/header.html:40
+msgid "ask a question"
+msgstr ""
+
+#: templates/header.html:57 templates/backup/header.html:55
+msgid "search"
+msgstr ""
+
+#: templates/index.html:6 templates/backup/index.html:6
+msgid "Home"
+msgstr ""
+
+#: templates/index.html:7 templates/backup/index.html:7
+msgid "meta site keywords, comma separated"
+msgstr ""
+
+#: templates/index.html:21 templates/questions.html:7
+#: templates/backup/index.html:21 templates/backup/questions.html:6
+msgid "Questions"
+msgstr ""
+
+#: templates/index.html:23 templates/backup/index.html:23
+msgid "last updated questions"
+msgstr ""
+
+#: templates/index.html:23 templates/questions.html:25
+#: templates/unanswered.html:20 templates/backup/index.html:23
+#: templates/backup/questions.html:24 templates/backup/unanswered.html:19
+#: templates/tough/unanswered.html:18
+msgid "newest"
+msgstr ""
+
+#: templates/index.html:24 templates/questions.html:27
+#: templates/backup/index.html:24 templates/backup/questions.html:26
+msgid "hottest questions"
+msgstr ""
+
+#: templates/index.html:24 templates/questions.html:27
+#: templates/backup/index.html:24 templates/backup/questions.html:26
+msgid "hottest"
+msgstr ""
+
+#: templates/index.html:25 templates/questions.html:28
+#: templates/backup/index.html:25 templates/backup/questions.html:27
+msgid "most voted questions"
+msgstr ""
+
+#: templates/index.html:25 templates/questions.html:28
+#: templates/backup/index.html:25 templates/backup/questions.html:27
+msgid "most voted"
+msgstr ""
+
+#: templates/index.html:26 templates/backup/index.html:26
+msgid "all questions"
+msgstr ""
+
+#: templates/index.html:46 templates/questions.html:45
+#: templates/unanswered.html:36 templates/users_questions.html:35
+#: templates/backup/index.html:46 templates/backup/questions.html:44
+#: templates/backup/unanswered.html:35
+#: templates/backup/users_questions.html:34 templates/tough/unanswered.html:34
+msgid "answers"
+msgstr ""
+
+#: templates/index.html:68 templates/question.html:112
+#: templates/question.html.py:479 templates/questions.html:84
+#: templates/questions.html.py:149 templates/tags.html:47
+#: templates/unanswered.html:75 templates/unanswered.html.py:109
+#: templates/users_questions.html:52 templates/backup/index.html:68
+#: templates/backup/index.html.py:93 templates/backup/question.html:111
+#: templates/backup/question.html.py:469 templates/backup/questions.html:83
+#: templates/backup/questions.html:148 templates/backup/tags.html:46
+#: templates/backup/unanswered.html:74 templates/backup/unanswered.html:108
+#: templates/backup/users_questions.html:51 templates/tough/unanswered.html:72
+#: templates/tough/unanswered.html:105
+msgid "see questions tagged"
+msgstr ""
+
+#: templates/index.html:79 templates/backup/index.html:79
+msgid "welcome to website"
+msgstr ""
+
+#: templates/index.html:81 templates/backup/index.html:81
+msgid "what is this website"
+msgstr ""
+
+#: templates/index.html:82 templates/backup/index.html:82
+msgid "what can one do on this website"
+msgstr ""
+
+#: templates/index.html:89 templates/backup/index.html:89
+msgid "Recent tags"
+msgstr ""
+
+#: templates/index.html:94
+#, python-format
+msgid "see questions tagged '%(tagname)s'"
+msgstr ""
+
+#: templates/index.html:97 templates/index.html.py:121
+#: templates/backup/index.html:96 templates/backup/index.html.py:120
+msgid "popular tags"
+msgstr ""
+
+#: templates/index.html:101 templates/backup/index.html:100
+msgid "Recent awards"
+msgstr ""
+
+#: templates/index.html:107 templates/backup/index.html:106
+msgid "given to"
+msgstr ""
+
+#: templates/index.html:112 templates/backup/index.html:111
+msgid "all awards"
+msgstr ""
+
+#: templates/index.html:116 templates/backup/index.html:115
+msgid "subscribe to last 30 questions by RSS"
+msgstr ""
+
+#: templates/index.html:121 templates/backup/index.html:120
+msgid "Still looking for more? See"
+msgstr ""
+
+#: templates/index.html:121 templates/backup/index.html:120
+msgid "complete list of quesionts"
+msgstr ""
+
+#: templates/index.html:121 templates/backup/index.html:120
+msgid "or"
+msgstr ""
+
+#: templates/index.html:121 templates/backup/index.html:120
+msgid "Please help us answer"
+msgstr ""
+
+#: templates/logout.html:6 templates/logout.html.py:17
+#: templates/backup/logout.html:6 templates/backup/logout.html.py:17
+msgid "Logout"
+msgstr ""
+
+#: templates/logout.html:20 templates/backup/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 templates/backup/logout.html:21
+msgid "Logout now"
+msgstr ""
+
+#: templates/pagesize.html:6 templates/backup/pagesize.html:6
+msgid "posts per page"
+msgstr ""
+
+#: templates/paginator.html:6 templates/paginator.html.py:7
+#: templates/backup/paginator.html:5 templates/backup/paginator.html.py:6
+msgid "previous"
+msgstr ""
+
+#: templates/paginator.html:20 templates/backup/paginator.html:19
+msgid "current page"
+msgstr ""
+
+#: templates/paginator.html:23 templates/paginator.html.py:30
+#: templates/backup/paginator.html:22 templates/backup/paginator.html.py:29
+msgid "page number "
+msgstr ""
+
+#: templates/paginator.html:23 templates/paginator.html.py:30
+#: templates/backup/paginator.html:22 templates/backup/paginator.html.py:29
+msgid "number - make blank in english"
+msgstr ""
+
+#: templates/paginator.html:34 templates/backup/paginator.html:33
+msgid "next page"
+msgstr ""
+
+#: templates/privacy.html:6 templates/privacy.html.py:11
+#: templates/backup/privacy.html:5 templates/backup/privacy.html.py:10
+msgid "Privacy policy"
+msgstr ""
+
+#: templates/privacy.html:15 templates/backup/privacy.html:14
+msgid "general message about privacy"
+msgstr ""
+
+#: templates/privacy.html:18 templates/backup/privacy.html:17
+msgid "Site Visitors"
+msgstr ""
+
+#: templates/privacy.html:20 templates/backup/privacy.html:19
+msgid "what technical information is collected about visitors"
+msgstr ""
+
+#: templates/privacy.html:23 templates/backup/privacy.html:22
+msgid "Personal Information"
+msgstr ""
+
+#: templates/privacy.html:25 templates/backup/privacy.html:24
+msgid "details on personal information policies"
+msgstr ""
+
+#: templates/privacy.html:28 templates/backup/privacy.html:27
+msgid "Other Services"
+msgstr ""
+
+#: templates/privacy.html:30 templates/backup/privacy.html:29
+msgid "details on sharing data with third parties"
+msgstr ""
+
+#: templates/privacy.html:35 templates/backup/privacy.html:34
+msgid "cookie policy details"
+msgstr ""
+
+#: templates/privacy.html:37 templates/backup/privacy.html:36
+msgid "Policy Changes"
+msgstr ""
+
+#: templates/privacy.html:38 templates/backup/privacy.html:37
+msgid "how privacy policies can be changed"
+msgstr ""
+
+#: templates/question.html:66 templates/question.html.py:78
+#: templates/backup/question.html:65 templates/backup/question.html.py:77
+msgid "i like this post (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:68 templates/question.html.py:80
+#: templates/question.html:273 templates/backup/question.html:67
+#: templates/backup/question.html.py:79 templates/backup/question.html:272
+msgid "current number of votes"
+msgstr ""
+
+#: templates/question.html:73 templates/question.html.py:84
+#: templates/backup/question.html:72 templates/backup/question.html.py:83
+msgid "i dont like this post (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:90 templates/backup/question.html:89
+msgid "mark this question as favorite (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:96 templates/backup/question.html:95
+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
+#: templates/backup/question.html:120 templates/backup/question.html.py:303
+#: templates/backup/revisions_answer.html:52
+#: templates/backup/revisions_question.html:51
+msgid "edit"
+msgstr ""
+
+#: templates/question.html:125 templates/question.html.py:314
+#: templates/backup/question.html:124 templates/backup/question.html.py:307
+msgid "delete"
+msgstr ""
+
+#: templates/question.html:130 templates/backup/question.html:129
+msgid "reopen"
+msgstr ""
+
+#: templates/question.html:135 templates/backup/question.html:134
+msgid "close"
+msgstr ""
+
+#: templates/question.html:141 templates/question.html.py:327
+#: templates/backup/question.html:140 templates/backup/question.html.py:317
+msgid ""
+"report as offensive (i.e containing spam, advertising, malicious text, etc.)"
+msgstr ""
+
+#: templates/question.html:142 templates/question.html.py:328
+#: templates/backup/question.html:141 templates/backup/question.html.py:318
+msgid "flag offensive"
+msgstr ""
+
+#: templates/question.html:154 templates/question.html.py:337
+#: templates/revisions_answer.html:65 templates/revisions_question.html:65
+#: templates/backup/question.html:153 templates/backup/question.html.py:327
+#: templates/backup/revisions_answer.html:64
+#: templates/backup/revisions_question.html:63
+msgid "updated"
+msgstr ""
+
+#: templates/question.html:203 templates/question.html.py:384
+#: templates/revisions_answer.html:63 templates/revisions_question.html:63
+#: templates/backup/question.html:202 templates/backup/question.html.py:374
+#: templates/backup/revisions_answer.html:62
+#: templates/backup/revisions_question.html:61
+msgid "asked"
+msgstr ""
+
+#: templates/question.html:233 templates/question.html.py:411
+#: templates/backup/question.html:232 templates/backup/question.html.py:401
+msgid "comments"
+msgstr ""
+
+#: templates/question.html:234 templates/question.html.py:412
+#: templates/backup/question.html:233 templates/backup/question.html.py:402
+msgid "add comment"
+msgstr ""
+
+#: templates/question.html:247 templates/backup/question.html:246
+#, python-format
+msgid ""
+"The question has been closed for the following reason \"%(question."
+"get_close_reason_display)s\" by"
+msgstr ""
+
+#: templates/question.html:249 templates/backup/question.html:248
+#, python-format
+msgid "close date %(question.closed_at)s"
+msgstr ""
+
+#: templates/question.html:256 templates/user_stats.html:28
+#: templates/backup/question.html:255 templates/backup/user_stats.html:27
+msgid "Answers"
+msgstr " Answers"
+
+#: templates/question.html:258 templates/backup/question.html:257
+msgid "oldest answers will be shown first"
+msgstr ""
+
+#: templates/question.html:258 templates/backup/question.html:257
+msgid "oldest answers"
+msgstr "oldest"
+
+#: templates/question.html:259 templates/backup/question.html:258
+msgid "newest answers will be shown first"
+msgstr ""
+
+#: templates/question.html:259 templates/backup/question.html:258
+msgid "newest answers"
+msgstr "newest"
+
+#: templates/question.html:260 templates/backup/question.html:259
+msgid "most voted answers will be shown first"
+msgstr ""
+
+#: templates/question.html:260 templates/backup/question.html:259
+msgid "popular answers"
+msgstr "most voted"
+
+#: templates/question.html:272 templates/backup/question.html:271
+msgid "i like this answer (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:278 templates/backup/question.html:277
+msgid "i dont like this answer (click again to cancel)"
+msgstr ""
+
+#: templates/question.html:284 templates/backup/question.html:283
+msgid "mark this answer as favorite (click again to undo)"
+msgstr ""
+
+#: templates/question.html:289 templates/backup/question.html:288
+msgid "the author of the question has selected this answer as correct"
+msgstr ""
+
+#: templates/question.html:311
+msgid "undelete"
+msgstr ""
+
+#: templates/question.html:321 templates/backup/question.html:311
+msgid "answer permanent link"
+msgstr ""
+
+#: templates/question.html:322 templates/backup/question.html:312
+msgid "permanent link"
+msgstr ""
+
+#: templates/question.html:436 templates/backup/question.html:426
+msgid "Your answer"
+msgstr ""
+
+#: templates/question.html:460 templates/backup/question.html:450
+msgid "Answer the question"
+msgstr ""
+
+#: templates/question.html:462 templates/backup/question.html:452
+msgid "Login to answer"
+msgstr ""
+
+#: templates/question.html:474 templates/backup/question.html:464
+msgid "Question tags"
+msgstr "Tags"
+
+#: templates/question.html:484 templates/backup/question.html:474
+msgid "question asked"
+msgstr "Asked"
+
+#: templates/question.html:484 templates/question.html.py:490
+#: templates/user_info.html:51 templates/backup/question.html:474
+#: templates/backup/question.html.py:480 templates/backup/user_info.html:50
+msgid "ago"
+msgstr ""
+
+#: templates/question.html:487 templates/backup/question.html:477
+msgid "question was seen"
+msgstr "Seen"
+
+#: templates/question.html:487 templates/backup/question.html:477
+msgid "times"
+msgstr ""
+
+#: templates/question.html:490 templates/backup/question.html:480
+msgid "last updated"
+msgstr "Last updated"
+
+#: templates/question.html:495 templates/backup/question.html:485
+msgid "Related questions"
+msgstr ""
+
+#: templates/question_edit.html:4 templates/question_edit.html.py:65
+#: templates/backup/question_edit.html:2
+#: templates/backup/question_edit.html:63
+msgid "Edit question"
+msgstr ""
+
+#: templates/question_edit_tips.html:4
+msgid "question tips"
+msgstr "Tips"
+
+#: templates/question_edit_tips.html:7
+#: templates/backup/question_edit_tips.html:5
+msgid "please ask a relevant question"
+msgstr ""
+
+#: templates/question_edit_tips.html:10
+#: templates/backup/question_edit_tips.html:8
+msgid "please try provide enough details"
+msgstr "provide enough details"
+
+#: templates/questions.html:23 templates/backup/questions.html:22
+msgid "Found by tags"
+msgstr "Tagged questions"
+
+#: templates/questions.html:23 templates/backup/questions.html:22
+msgid "Found by title"
+msgstr ""
+
+#: templates/questions.html:23 templates/backup/questions.html:22
+msgid "All questions"
+msgstr ""
+
+#: templates/questions.html:25 templates/unanswered.html:20
+#: templates/backup/questions.html:24 templates/backup/unanswered.html:19
+#: templates/tough/unanswered.html:18
+msgid "most recently asked questions"
+msgstr ""
+
+#: templates/questions.html:26 templates/backup/questions.html:25
+msgid "most recently updated questions"
+msgstr ""
+
+#: templates/questions.html:26 templates/backup/questions.html:25
+msgid "active"
+msgstr ""
+
+#: templates/questions.html:109
+#, 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] ""
+"\n"
+"%(q_num)s
question tagged
%(tagname)s
"
+msgstr[1] ""
+"\n"
+"%(q_num)s
questions tagged"
+"p>
%(tagname)s
"
+
+#: templates/questions.html:116
+#, python-format
+msgid ""
+"\n"
+"\t\t\thave total %(q_num)s questions containing %(searchtitle)s\n"
+"\t\t\t"
+msgid_plural ""
+"\n"
+"\t\t\thave total %(q_num)s questions containing %(searchtitle)s\n"
+"\t\t\t"
+msgstr[0] ""
+"\n"
+"%(q_num)s
question with title "
+"containing %(searchtitle)s"
+"p>"
+msgstr[1] ""
+"\n"
+"
%(q_num)s
questions with title "
+"containing %(searchtitle)s"
+"p>"
+
+#: templates/questions.html:124
+msgid "latest questions info"
+msgstr "Newest questions are shown first."
+
+#: templates/questions.html:128 templates/backup/questions.html:127
+msgid "Questions are sorted by the time of last update."
+msgstr ""
+
+#: templates/questions.html:129 templates/backup/questions.html:128
+msgid "Most recently answered ones are shown first."
+msgstr ""
+
+#: templates/questions.html:133 templates/backup/questions.html:132
+msgid "Questions sorted by number of responses."
+msgstr ""
+
+#: templates/questions.html:134 templates/backup/questions.html:133
+msgid "Most answered questions are shown first."
+msgstr ""
+
+#: templates/questions.html:138 templates/backup/questions.html:137
+msgid "Questions are sorted by the number of votes."
+msgstr ""
+
+#: templates/questions.html:139 templates/backup/questions.html:138
+msgid "Most voted questions are shown first."
+msgstr ""
+
+#: templates/questions.html:146 templates/unanswered.html:105
+#: templates/backup/questions.html:145 templates/backup/unanswered.html:104
+#: templates/tough/unanswered.html:101
+msgid "Related tags"
+msgstr "Tags"
+
+#: templates/reopen.html:6 templates/reopen.html.py:16
+#: templates/backup/reopen.html:4 templates/backup/reopen.html.py:14
+msgid "Reopen question"
+msgstr ""
+
+#: templates/reopen.html:19 templates/backup/reopen.html:17
+msgid "Open the previously closed question"
+msgstr ""
+
+#: templates/reopen.html:22 templates/backup/reopen.html:20
+msgid "The question was closed for the following reason "
+msgstr ""
+
+#: templates/reopen.html:22 templates/backup/reopen.html:20
+msgid "reason - leave blank in english"
+msgstr ""
+
+#: templates/reopen.html:22 templates/backup/reopen.html:20
+msgid "on "
+msgstr ""
+
+#: templates/reopen.html:22 templates/backup/reopen.html:20
+msgid "date closed"
+msgstr ""
+
+#: templates/reopen.html:29 templates/backup/reopen.html:27
+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
+#: templates/backup/revisions_answer.html:6
+#: templates/backup/revisions_answer.html:35
+#: templates/backup/revisions_question.html:6
+#: templates/backup/revisions_question.html:34
+msgid "Revision history"
+msgstr ""
+
+#: templates/tags.html:6 templates/tags.html.py:29
+#: templates/backup/tags.html:5 templates/backup/tags.html.py:28
+msgid "Tag list"
+msgstr ""
+
+#: templates/tags.html:31 templates/backup/tags.html:30
+msgid "sorted alphabetically"
+msgstr ""
+
+#: templates/tags.html:31 templates/backup/tags.html:30
+msgid "by name"
+msgstr ""
+
+#: templates/tags.html:32 templates/backup/tags.html:31
+msgid "sorted by frequency of tag use"
+msgstr ""
+
+#: templates/tags.html:32 templates/backup/tags.html:31
+msgid "by popularity"
+msgstr ""
+
+#: templates/tags.html:38 templates/backup/tags.html:37
+msgid "All tags matching query"
+msgstr ""
+
+#: templates/tags.html:38 templates/backup/tags.html:37
+msgid "all tags - make this empty in english"
+msgstr ""
+
+#: templates/tags.html:41 templates/backup/tags.html:40
+msgid "Nothing found"
+msgstr ""
+
+#: templates/unanswered.html:7 templates/unanswered.html.py:18
+#: templates/backup/unanswered.html:6 templates/backup/unanswered.html:17
+#: templates/tough/unanswered.html:5 templates/tough/unanswered.html.py:16
+msgid "Unanswered questions"
+msgstr ""
+
+#: templates/unanswered.html:97
+#, python-format
+msgid "have %(num_q)s unanswered questions"
+msgstr ""
+"
%(num_q)s
unanswered "
+"questions"
+
+#: templates/unanswered.html:99 templates/backup/questions.html:107
+#: templates/backup/unanswered.html:97
+msgid "Have a total of"
+msgstr ""
+
+#: templates/user_edit.html:6 templates/backup/user_edit.html:4
+msgid "Edit user profile"
+msgstr ""
+
+#: templates/user_edit.html:19 templates/backup/user_edit.html:17
+msgid "edit profile"
+msgstr ""
+
+#: templates/user_edit.html:31 templates/backup/user_edit.html:29
+msgid "image associated with your email address"
+msgstr ""
+
+#: templates/user_edit.html:31 templates/backup/user_edit.html:29
+msgid "avatar"
+msgstr ""
+
+#: templates/user_edit.html:36 templates/user_info.html:31
+#: templates/backup/user_edit.html:34 templates/backup/user_info.html:30
+msgid "Registered user"
+msgstr ""
+
+#: templates/user_edit.html:82 templates/backup/user_edit.html:80
+msgid "Update"
+msgstr ""
+
+#: templates/user_info.html:34 templates/backup/user_info.html:33
+msgid "update profile"
+msgstr ""
+
+#: templates/user_info.html:40 templates/backup/user_info.html:39
+msgid "real name"
+msgstr ""
+
+#: templates/user_info.html:45
+msgid "member for"
+msgstr ""
+
+#: templates/user_info.html:50 templates/backup/user_info.html:49
+msgid "last seen"
+msgstr ""
+
+#: templates/user_info.html:56 templates/backup/user_info.html:55
+msgid "user website"
+msgstr ""
+
+#: templates/user_info.html:62 templates/backup/user_info.html:61
+msgid "location"
+msgstr ""
+
+#: templates/user_info.html:69 templates/backup/user_info.html:68
+msgid "age"
+msgstr ""
+
+#: templates/user_info.html:70 templates/backup/user_info.html:69
+msgid "age unit"
+msgstr ""
+
+#: templates/user_info.html:75 templates/backup/user_info.html:74
+msgid "todays unused votes"
+msgstr ""
+
+#: templates/user_info.html:76 templates/backup/user_info.html:75
+msgid "votes left"
+msgstr ""
+
+#: templates/user_stats.html:15 templates/backup/user_stats.html:14
+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 templates/backup/user_stats.html:36
+msgid "this answer has been selected as correct"
+msgstr ""
+
+#: templates/user_stats.html:43 templates/backup/user_stats.html:42
+#, python-format
+msgid "the answer has been commented %(answered_question.comment_count)s times"
+msgstr ""
+
+#: templates/user_stats.html:56 templates/backup/user_stats.html:55
+msgid "votes total"
+msgstr "Votes"
+
+#: templates/user_stats.html:65 templates/backup/user_stats.html:64
+msgid "user has voted up this many times"
+msgstr ""
+
+#: templates/user_stats.html:70 templates/backup/user_stats.html:69
+msgid "user voted down this many times"
+msgstr ""
+
+#: templates/user_stats.html:84 templates/backup/user_stats.html:83
+msgid "Tags"
+msgstr ""
+
+#: templates/user_stats.html:94 templates/backup/user_stats.html:93
+#, python-format
+msgid "see other questions tagged '%(tag)s' "
+msgstr ""
+
+#: templates/user_tabs.html:7 templates/backup/user_tabs.html:6
+msgid "User profile"
+msgstr ""
+
+#: templates/user_tabs.html:16 templates/backup/user_tabs.html:15
+msgid "graph of user reputation"
+msgstr ""
+
+#: templates/user_tabs.html:17 templates/backup/user_tabs.html:16
+msgid "reputation history"
+msgstr ""
+
+#: templates/user_tabs.html:24 templates/backup/user_tabs.html:23
+msgid "favorites"
+msgstr ""
+
+#: templates/user_tabs.html:29 templates/backup/user_tabs.html:28
+msgid "settings"
+msgstr ""
+
+#: templates/users.html:6 templates/users.html.py:24
+#: templates/backup/users.html:5 templates/backup/users.html.py:23
+msgid "Users"
+msgstr ""
+
+#: templates/users.html:27 templates/backup/users.html:26
+msgid "recent"
+msgstr ""
+
+#: templates/users.html:28 templates/backup/users.html:27
+msgid "oldest"
+msgstr ""
+
+#: templates/users.html:29 templates/backup/users.html:28
+msgid "by username"
+msgstr ""
+
+#: templates/users.html:35 templates/backup/users.html:34
+#, python-format
+msgid "users matching query %(suser)s:"
+msgstr ""
+
+#: templates/users.html:39 templates/backup/users.html:38
+msgid "Nothing found."
+msgstr ""
+
+#: templates/users_questions.html:11 templates/backup/users_questions.html:10
+msgid "this questions was selected as favorite"
+msgstr ""
+
+#: templates/users_questions.html:33 templates/backup/users_questions.html:32
+msgid "this answer has been accepted to be correct"
+msgstr ""
+
+#: templates/authopenid/changeemail.html:6
+msgid "Account: change email"
+msgstr ""
+
+#: templates/authopenid/changeemail.html:9
+msgid ""
+"This is where you can change the email address associated with your account. "
+"Please keep this email address up to date so we can send you a password-"
+"reset email if you request one."
+msgstr ""
+
+#: templates/authopenid/changeemail.html:11
+#: templates/authopenid/changeopenid.html:13
+#: templates/authopenid/changepw.html:18 templates/authopenid/delete.html:14
+#: templates/authopenid/delete.html:24
+msgid "Please correct errors below:"
+msgstr ""
+
+#: templates/authopenid/changeemail.html:28
+msgid "Email"
+msgstr ""
+
+#: templates/authopenid/changeemail.html:29
+#: templates/authopenid/signin.html:59
+msgid "Password"
+msgstr ""
+
+#: templates/authopenid/changeemail.html:31
+msgid "Change email"
+msgstr ""
+
+#: templates/authopenid/changeopenid.html:7
+msgid "Account: change OpenID URL"
+msgstr ""
+
+#: templates/authopenid/changeopenid.html:11
+msgid ""
+"This is where you can change your OpenID URL. Make sure you remember it!"
+msgstr ""
+
+#: templates/authopenid/changeopenid.html:28
+msgid "OpenID URL:"
+msgstr ""
+
+#: templates/authopenid/changeopenid.html:29
+msgid "Change OpenID"
+msgstr ""
+
+#: templates/authopenid/changepw.html:13
+msgid "Account: change password"
+msgstr ""
+
+#: templates/authopenid/changepw.html:16
+msgid "This is where you can change your password. Make sure you remember it!"
+msgstr ""
+
+#: templates/authopenid/changepw.html:26
+msgid "Current password"
+msgstr ""
+
+#: templates/authopenid/changepw.html:27
+msgid "New password"
+msgstr ""
+
+#: templates/authopenid/changepw.html:28
+msgid "New password again"
+msgstr ""
+
+#: templates/authopenid/changepw.html:29 templates/authopenid/settings.html:28
+msgid "Change password"
+msgstr ""
+
+#: templates/authopenid/complete.html:4
+msgid "Connect your OpenID with this site"
+msgstr ""
+
+#: templates/authopenid/complete.html:7
+msgid "Connect your OpenID with your account on this site"
+msgstr ""
+
+#: templates/authopenid/complete.html:10
+msgid "Your OpenID is accepted. Please complete this to finish registration."
+msgstr ""
+
+#: templates/authopenid/complete.html:11
+msgid "This account already exists, please use another."
+msgstr ""
+
+#: templates/authopenid/complete.html:16 templates/authopenid/complete.html:29
+#: templates/authopenid/signin.html:42
+msgid "Sorry, looks like we have some errors:"
+msgstr ""
+
+#: templates/authopenid/complete.html:45
+msgid "New account"
+msgstr ""
+
+#: templates/authopenid/complete.html:46
+msgid "User name (will be shown to others, cannot be modified)"
+msgstr ""
+
+#: templates/authopenid/complete.html:47
+msgid "Email (not shared with anyone)"
+msgstr ""
+
+#: templates/authopenid/complete.html:48
+msgid "create account"
+msgstr ""
+
+#: templates/authopenid/complete.html:56
+msgid "Existing account"
+msgstr ""
+
+#: templates/authopenid/complete.html:57
+msgid "user name"
+msgstr ""
+
+#: templates/authopenid/complete.html:58
+msgid "password"
+msgstr ""
+
+#: templates/authopenid/complete.html:61
+msgid "Register"
+msgstr ""
+
+#: templates/authopenid/complete.html:62 templates/authopenid/signin.html:61
+msgid "Forgot your password?"
+msgstr ""
+
+#: templates/authopenid/delete.html:8
+msgid "Account: delete account"
+msgstr ""
+
+#: 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
+msgid "Check confirm box, if you want delete your account."
+msgstr ""
+
+#: templates/authopenid/delete.html:19
+msgid "Password:"
+msgstr ""
+
+#: templates/authopenid/delete.html:31
+msgid "I am sure I want to delete my account."
+msgstr ""
+
+#: templates/authopenid/delete.html:32
+msgid "Password/OpenID URL"
+msgstr ""
+
+#: templates/authopenid/delete.html:32
+msgid "(required for your security)"
+msgstr ""
+
+#: templates/authopenid/delete.html:34
+msgid "Delete account permanently"
+msgstr ""
+
+#: templates/authopenid/sendpw.html:3 templates/authopenid/sendpw.html.py:7
+msgid "Send new password"
+msgstr ""
+
+#: templates/authopenid/sendpw.html:11
+msgid "Lost your password? No problem - here you can reset it."
+msgstr ""
+
+#: templates/authopenid/sendpw.html:12
+msgid ""
+"Please enter your username below and new password will be sent to your "
+"registered e-mail"
+msgstr ""
+
+#: templates/authopenid/sendpw.html:29
+msgid "Reset password"
+msgstr ""
+
+#: templates/authopenid/sendpw.html:29
+msgid "return to login"
+msgstr ""
+
+#: templates/authopenid/sendpw.html:32
+msgid ""
+"Note: your new password will be activated only after you click the "
+"activation link in the email message"
+msgstr ""
+
+#: templates/authopenid/settings.html:29
+msgid "Give your account a new password."
+msgstr ""
+
+#: templates/authopenid/settings.html:30
+msgid "Change email "
+msgstr ""
+
+#: templates/authopenid/settings.html:31
+msgid "Add or update the email address associated with your account."
+msgstr ""
+
+#: templates/authopenid/settings.html:34
+msgid "Change openid associated to your account"
+msgstr ""
+
+#: templates/authopenid/settings.html:37
+msgid "Delete account"
+msgstr ""
+
+#: templates/authopenid/settings.html:38
+msgid "Erase your username and all your data from website"
+msgstr ""
+
+#: templates/authopenid/signin.html:3 templates/authopenid/signin.html:16
+msgid "User login"
+msgstr ""
+
+#: templates/authopenid/signin.html:21
+msgid "we support two login modes"
+msgstr ""
+"You can log in either through one of these services or traditionally - using "
+"local username/password."
+
+#: templates/authopenid/signin.html:26 templates/authopenid/signup.html:49
+msgid "Login with your OpenID"
+msgstr ""
+
+#: templates/authopenid/signin.html:28
+msgid "select openid provider"
+msgstr "1) Please select your id service provider."
+
+#: templates/authopenid/signin.html:32
+msgid "verify openid link and login"
+msgstr ""
+"2) Please verify the OpenID URL (type your login name over {username}, if present)"
+" and then log in."
+
+#: templates/authopenid/signin.html:57
+msgid "Use login name and password"
+msgstr ""
+
+#: templates/authopenid/signin.html:58
+msgid "Login name"
+msgstr ""
+
+#: templates/authopenid/signin.html:62
+msgid "Create new acccount"
+msgstr ""
+
+#: templates/authopenid/signin.html:71
+msgid "Why use OpenID?"
+msgstr ""
+
+#: templates/authopenid/signin.html:75
+msgid "with openid it is easier"
+msgstr "With the OpenID you don't need to create new username and password."
+
+#: templates/authopenid/signin.html:78
+msgid "reuse openid"
+msgstr "You can safely re-use the same login for all OpenID-enabled websites."
+
+#: templates/authopenid/signin.html:81
+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:84
+msgid "openid is supported open standard"
+msgstr "OpenID is based on an open standard, supported by many organizations."
+
+#: templates/authopenid/signin.html:88
+msgid "Find out more"
+msgstr ""
+
+#: templates/authopenid/signin.html:89
+msgid "Get OpenID"
+msgstr ""
+
+#: templates/authopenid/signup.html:2 templates/authopenid/signup.html.py:6
+msgid "Signup"
+msgstr ""
+
+#: templates/authopenid/signup.html:10
+msgid ""
+"We support two types of user registration: conventional username/password, "
+"and"
+msgstr ""
+
+#: templates/authopenid/signup.html:10
+msgid "the OpenID method"
+msgstr ""
+
+#: templates/authopenid/signup.html:15
+msgid "Sorry, looks like we have some errors"
+msgstr ""
+
+#: templates/authopenid/signup.html:33
+msgid "Conventional registration"
+msgstr ""
+
+#: templates/authopenid/signup.html:34
+msgid "choose a user name"
+msgstr ""
+
+#: templates/authopenid/signup.html:40
+msgid "back to login"
+msgstr ""
+
+#: templates/authopenid/signup.html:46
+msgid "Register with your OpenID"
+msgstr ""
+
+#
+#: templates/backup/answer_edit_tips.html:3
+#: templates/backup/question_edit_tips.html:2
+msgid "editing tips"
+msgstr "Tips"
+
+#: templates/backup/questions.html:108
+msgid "number of questions"
+msgstr ""
+
+#: templates/backup/questions.html:110
+msgid "tagged with"
+msgstr ""
+
+#: templates/backup/questions.html:116
+msgid "whose title contains"
+msgstr ""
+
+#: templates/backup/questions.html:121
+msgid "number of questions end of sentence."
+msgstr ""
+
+#: templates/backup/questions.html:123
+msgid "Questions are sorted by entry date."
+msgstr ""
+
+#: templates/backup/questions.html:123
+msgid "Newest questions shown first."
+msgstr ""
+"Questions are sorted by entry date.Newest questions shown "
+"first."
+
+#: templates/backup/unanswered.html:98 templates/tough/unanswered.html:95
+msgid "number of unanswered questions"
+msgstr ""
+
+#: templates/backup/user_info.html:44
+msgid "member since"
+msgstr ""
+
+#: templates/backup/user_stats.html:36
+#, python-format
+msgid "the answer has been voted for %(answered_question.vote_count)s times"
+msgstr ""
+
+#: templates/tough/question_retag.html:2
+msgid "Revise tags"
+msgstr ""
+
+#: templates/tough/question_retag.html:37
+msgid "tags are requried"
+msgstr ""
+
+#: templates/tough/question_retag.html:38
+msgid "up to 5 tags, less than 20 characters each"
+msgstr ""
+
+#: templates/tough/question_retag.html:51
+msgid "Change tags"
+msgstr ""
+
+#: templates/tough/question_retag.html:74
+msgid "Change now"
+msgstr ""
+
+#: templates/tough/question_retag.html:85
+msgid "Why use and modify tags?"
+msgstr ""
+
+#: templates/tough/question_retag.html:96
+msgid "tag editors receive special awards from the community"
+msgstr ""
diff --git a/locale/zh-cn/LC_MESSAGES/django.mo b/locale/zh-cn/LC_MESSAGES/django.mo
new file mode 100644
index 00000000..8b8f5bb9
Binary files /dev/null and b/locale/zh-cn/LC_MESSAGES/django.mo differ
diff --git a/locale/zh-cn/LC_MESSAGES/django.po b/locale/zh-cn/LC_MESSAGES/django.po
new file mode 100644
index 00000000..5cad5b51
--- /dev/null
+++ b/locale/zh-cn/LC_MESSAGES/django.po
@@ -0,0 +1,1430 @@
+#author Evgeny Fadeev (evgeny.fadeev@gmail.com)
+#site-specific messages
+msgid "site title"
+msgstr "CNProg.com"
+
+msgid "site slogan"
+msgstr "绋嬪簭鍛橀棶绛旂ぞ鍖"
+
+msgid "meta site keywords, comma separated"
+msgstr "鎶鏈棶绛旂ぞ鍖猴紝涓浗绋嬪簭鍛橈紝缂栫▼鎶鏈ぞ鍖猴紝绋嬪簭鍛樼ぞ鍖猴紝绋嬪簭鍛樿鍧涳紝绋嬪簭鍛榳iki锛岀▼搴忓憳鍗氬"
+
+msgid "meta site content"
+msgstr "涓浗绋嬪簭鍛樼殑缂栫▼鎶鏈棶绛旂ぞ鍖恒傛垜浠仛涓撲笟鐨勩佸彲鍗忎綔缂栬緫鐨勬妧鏈棶绛旂ぞ鍖恒"
+
+msgid "copyright message"
+msgstr "Copyright(c)2009.CNPROG.COM"
+
+msgid "Connect your OpenID with this site"
+msgstr "缁戝畾OpenID"
+
+msgid "Connect your OpenID with your account on this site"
+msgstr "缁戝畾OpenID甯愬彿"
+
+msgid "Your OpenID is accepted. Please complete this to finish the registration. "
+msgstr "鎮ㄧ殑OpenID甯愬彿宸茬粡楠岃瘉閫氳繃! 璇峰畬鎴愭渶鍚庝竴姝 - 缁戝畾OpenID鍒版偍鐨勫笎鍙枫"
+
+#minimal length of user name may be language specific
+msgid "username too short"
+msgstr "鐢ㄦ埛鍚嶅お鐭紝璇蜂娇鐢ㄤ笁涓垨涓変釜浠ヤ笂瀛楃"
+
+#translation and user name validation are language-specific
+msgid "invalid user name"
+msgstr "鐢ㄦ埛鍚嶅彧鑳藉寘鍚嫳鏂囧瓧姣嶃佹暟瀛楀拰涓嬪垝绾"
+
+#chinese translation is domain specific
+msgid "question if off-topic or not relevant"
+msgstr "涓嶆槸缂栫▼鎶鏈棶棰"
+
+msgid "Login name"
+msgstr "鐢ㄦ埛鍚"
+
+msgid "welcome to website!"
+msgstr "CNProg娆㈣繋鎮!"
+
+msgid "what is this website"
+msgstr "CNProg鏄竴涓闈㈠悜绋嬪簭鍛鐨勫彲鍗忎綔缂栬緫鐨寮鏀炬簮浠g爜闂瓟绀惧尯銆"
+
+msgid "what can one do on this website"
+msgstr "鎮ㄥ彲浠ュ湪杩欓噷鎻愰棶鍚勭被绋嬪簭鎶鏈棶棰 - 闂涓嶅垎璇█鍜屽钩鍙般 鍚屾椂涔熷笇鏈涙偍瀵瑰姏鎵鑳藉強鐨勯棶棰橈紝缁欎簣鎮ㄧ殑瀹濊吹绛旀銆"
+
+msgid "Goal of this site is..."
+msgstr "CNProg 鏄负浜嗗府鍔╃▼搴忓憳瑙e喅鏇村闂锛屾洿鍔犳柟渚跨殑瑙e喅闂銆"
+
+msgid "how privacy policy can be changed"
+msgstr "鎴戜滑鍙兘鍦ㄤ簨鍏堥氱煡鎴栦笉閫氱煡鐨勬儏鍐典笅闅忔椂鏇存敼姝'闅愮鏀跨瓥'锛屾垜浠缓璁敤鎴锋椂甯告煡鐪婥NProg闅愮鏀跨瓥鐨勬敼鍔紝鍦ㄤ换浣曟敼鍔ㄧ敓鏁堝悗鎮ㄧ殑缁х画璁块棶鍜屼娇鐢ㄦ湰绔欙紝鎴戜滑鍋囪鎮ㄥ凡鍚屾剰浜咰NProg浠ヤ笂鐨勬墍鏈夋潯娆俱"
+
+msgid "general message about privacy"
+msgstr "CNProg鎵胯鐢ㄦ埛闅愮鐨勯噸瑕佹с傛湰鏂囦欢姒傝堪鍦ㄦ偍娴忚CNProg杩囩▼涓墍鎺ユ敹鍜屾敹闆嗙殑涓汉淇℃伅鐨勭绫伙紝浠ュ強CNProg鎵閲囧彇鐨勪繚鎶や俊鎭殑涓浜涙帾鏂姐侰NProg甯屾湜杩欏皢鏈夊姪浜庢偍鍦ㄧ煡鎯呯殑鎯呭喌涓嬶紝灏卞拰鎴戜滑 鍏变韩涓汉淇℃伅鐨勯棶棰樹綔鍑哄喅瀹氥"
+
+msgid "cookie policy details"
+
+msgstr "璁块棶CNProg鏃讹紝鎴戜滑浼氬悜鎮ㄧ殑璁$畻鏈哄彂閫佷竴涓垨澶氫釜涓撻棬鐢ㄤ簬璇嗗埆鎮ㄧ殑娴忚鍣ㄧ殑Cookie锛堝寘鍚竴涓瓧绗︿覆鐨勫皬鏂囦欢锛夈 "
+"浣跨敤 Cookie 鐨勭洰鐨勬槸閫氳繃鍌ㄥ瓨鐢ㄦ埛鍋忓ソ銆佽窡韪敤鎴峰惧悜锛堜緥濡傛悳绱"
+"鏂规硶锛夋潵鎻愰珮鎴戜滑鐨勬湇鍔¤川閲忋傚ぇ澶氭暟娴忚鍣ㄧ殑鍒濆璁剧疆鍧囦负鎺ュ彈 Cookie锛屼絾涔熷彲浠ュ皢鍏堕噸缃负鎷掔粷鎵鏈 Cookie 鎴栧湪鏀跺埌 Cookie 鏃舵彁绀恒備笉杩囷紝濡傛灉绂佺敤 Cookie锛屾煇浜涘姛鑳藉拰鏈嶅姟鍙兘鏃犳硶姝e父杩愯銆"
+
+msgid "details on sharing data with third parties"
+msgstr "CNProg鍙兘浼氭敹闆嗗拰缁熻鐢ㄦ埛璁块棶鏈珯鐨勬鍐垫暟鎹備緥濡傦紝CNProg鍙兘浼氭娴嬬綉绔欐渶娴佽鐨勯儴鍒嗗姛鑳姐侰NProg鍙兘浼氬叕寮鏄剧ず鎴栬呮彁渚涚粰绗笁鏂逛娇鐢ㄨ鏁版嵁銆備絾鏄紝CNProg涓嶄細鍏紑鎮ㄧ殑韬唤淇℃伅銆"
+
+msgid "details on personal information policies"
+msgstr "鍦ㄧ櫥褰曚娇鐢–NProg鐨勬彁闂拰鍥炵瓟鍔熻兘鏃讹紝鎴戜滑瑕佹眰浣跨敤鑰呮彁渚涚敤鎴峰悕銆佸瘑鐮併佺數瀛愰偖浠剁瓑淇℃伅銆侰NProg鏀堕泦杩欑被鍏充簬涓汉韬唤鐨勪俊鎭彧鏄负浜嗙櫥褰曠郴缁熻幏寰椾娇鐢ㄥ姛鑳界殑鐩殑銆傛垜浠笉浼氬悜浠讳綍鍏朵粬绀惧尯鐢 鎴枫佷釜浜烘垨绗笁鏂归忛湶鎮ㄧ殑瀵嗙爜鎴栬呯數瀛愰偖浠朵俊鎭傜敤鎴峰彲浠ラ夋嫨鎬у湴濉啓鐢ㄦ埛璧勬枡銆佷釜浜虹綉绔欍佸勾榫勩佸煄甯傜瓑淇℃伅锛屾垜浠敹闆嗚繖浜涘唴瀹逛负浜嗕娇鐢ㄦ埛鑳藉鏇村鏄撳拰鏇存弧鎰忓湴浣跨敤CNProg鎻愪緵鐨勭綉椤靛拰鏈嶅姟銆"
+
+msgid "Community gives you awards for your questions, answers and votes."
+msgstr "鎻愬嚭闂锛岀粰浜堝洖绛旓紝鎶曞嚭浣犵殑绁 - CNProg 浼氶拡瀵逛綘鍦ㄧぞ鍖虹殑琛ㄧ幇锛屾巿浜堜綘鍚勭被濂栫墝銆"
+
+msgid "what technical information is collected about visitors"
+msgstr "褰撴偍璁块棶鏈綉绔欐垨浣跨敤鎴戜滑鐨勬煇浜涘湪绾挎湇鍔℃椂锛屾湇鍔″櫒浼氳嚜鍔ㄨ褰曚俊鎭紝鍖呮嫭浣嗕笉闄愪簬URL銆両P鍦板潃銆佹祻瑙堝櫒鐨勭被鍨嬨佸睆骞曞垎杈ㄧ巼銆佺郴缁熺被鍨嬪拰浣跨敤鐨勮瑷浠ュ強璁块棶鏃ユ湡鍜屾椂闂淬傛垜浠殑鐩殑鏄负浜嗗悜鎮>鎻愪緵鏇村ソ鐨勭敤鎴锋湇鍔★紝鍖呮嫭鍙兘涓烘偍鎻愪緵瀹氬埗鐨勫湪绾挎湇鍔°"
+
+msgid "please make your answer relevant to this community"
+msgstr "鎮ㄧ殑闂涓庣紪绋嬬浉鍏冲悧锛"
+
+
+#templates/book.html 78
+msgid "reading channel"
+msgstr "璇讳功棰戦亾"
+
+msgid "[author]"
+msgstr "銆愪綔鑰呫"
+
+msgid "[publisher]"
+msgstr "銆愬嚭鐗堢ぞ銆"
+
+msgid "[publication date]"
+msgstr "銆愬嚭鐗堟棩鏈熴"
+
+msgid "[price]"
+msgstr "銆愪环鏍笺"
+
+msgid "[pages]"
+msgstr "銆愰〉鏁般"
+
+msgid "[tags]"
+msgstr "銆愭爣绛俱"
+
+msgid "author blog"
+msgstr "浣滆呭崥瀹"
+
+msgid "book directory"
+msgstr "涔︾睄鐩綍"
+
+msgid "buy online"
+msgstr "缃戜笂璐拱"
+
+msgid "book technical Q&A"
+msgstr "鍥句功鐩稿叧鐨勬妧鏈瓟鐤"
+
+msgid "reader questions"
+msgstr "绛旇鑰呴棶"
+
+msgid "ask the author"
+msgstr "鍚戜綔鑰呮彁闂"
+
+msgid "this question was selected as favorite"
+msgstr "杩欎釜闂琚"
+
+msgid "number of times"
+msgstr "浣嶇敤鎴锋敹钘"
+
+msgid "votes"
+msgstr "绁"
+
+msgid "the answer has been accepted to be correct"
+msgstr "鏈夌瓟妗堝凡琚帴鍙椾负姝g‘绛旀"
+
+msgid "views"
+msgstr "娴忚"
+
+#must have extra space after in english
+msgid "see questions tagged"
+msgstr "鏌ョ湅鏈夊叧"
+
+#book.html line 123 must be empty in english
+msgid "using tags"
+msgstr "鐨勯棶棰"
+
+#this is how above two are supposed to be
+msgid "see questions tagged '%s'"
+msgstr "鏌ョ湅鏈夊叧'%s'鐨勯棶棰"
+
+msgid "subscribe to book RSS feed"
+msgstr "RSS璁㈤槄璇ュ浘涔︽渶鏂伴棶棰"
+
+msgid "subscribe to the questions feed"
+msgstr "璁㈤槄鏈>鏂伴棶棰"
+
+#base_content.html
+msgid "congratulations, community gave you a badge"
+msgstr "鎭枩鎮紝绀惧尯缁欐偍棰佸彂浜嗗鐗"
+
+msgid "see"
+msgstr "鏌ョ湅"
+
+msgid "profile"
+msgstr "涓汉璧勬枡"
+
+#close.html
+msgid "Close question"
+msgstr "鍏抽棴闂"
+
+msgid "Close the question"
+msgstr "鐢变簬浠ヤ笅鍘熷洜锛屼綘瑕佸叧闂繖涓棶棰"
+
+msgid "Reasons"
+msgstr "鍘熷洜"
+
+msgid "OK to close"
+msgstr "纭畾鍏抽棴"
+
+msgid "Cancel"
+msgstr "鍙栨秷"
+
+#footer.html
+msgid "about"
+msgstr "鍏充簬鏈珯"
+
+msgid "faq"
+msgstr "甯歌闂"
+
+msgid "blog"
+msgstr "Blog"
+
+msgid "contact us"
+msgstr "鑱旂郴鎴戜滑"
+
+msgid "privacy policy"
+msgstr "闅愮鏀跨瓥"
+
+msgid "give feedback"
+msgstr "闂鍙嶉"
+
+msgid "current revision"
+msgstr "褰撳墠鐗堟湰"
+
+#index.html
+msgid "community wiki"
+msgstr "绀惧尯Wiki"
+
+msgid "Home"
+msgstr "棣栭〉"
+
+msgid "Questions"
+msgstr "闂鍒楄〃"
+
+msgid "User questions"
+msgstr "涓棶棰"
+
+msgid "newest"
+msgstr "鏈鏂伴棶棰"
+
+msgid "latest questions"
+msgstr "鏈鏂伴棶棰"
+
+msgid " - "
+msgstr "-"
+
+msgid "last updated questions"
+msgstr "鏈鏂版洿鏂扮殑闂"
+
+msgid "hottest"
+msgstr "鐑棬闂"
+
+msgid "hottest questions"
+msgstr "琚洖澶嶆渶澶氱殑闂"
+
+msgid "most voted"
+msgstr "鏈鏈変环鍊肩殑闂"
+
+msgid "most voted questions"
+msgstr "鎶曠エ娆℃暟鏈澶氱殑闂"
+
+msgid "all questions"
+msgstr "鍏ㄩ儴闂"
+
+msgid "answers"
+msgstr "鍥炵瓟"
+
+msgid "Answers"
+msgstr "涓洖绛"
+
+msgid "number of votes"
+msgstr "绁ㄦ暟"
+
+msgid "Recent tags"
+msgstr "鏈鏂版爣绛"
+
+msgid "popular tags"
+msgstr "鍙楁杩庣殑鏍囩"
+
+msgid "Recent awards"
+msgstr "鏈鏂板鐗"
+
+msgid "given to"
+msgstr "鎺堜簣"
+
+msgid "all awards"
+msgstr "鎵鏈夊鐗"
+
+msgid "subscribe to last 30 questions by RSS"
+msgstr "RSS璁㈤槄鏈鏂30涓棶棰"
+
+msgid "Still looking for more? See"
+msgstr "鍦ㄥ鎵炬洿澶氶棶棰樺悧锛熻鏌ラ槄"
+
+msgid "complete list of questions"
+msgstr "鍏ㄩ儴闂鍒楄〃"
+
+msgid "or"
+msgstr "鎴栬"
+
+msgid "."
+msgstr "銆"
+
+msgid "Please help us answer"
+msgstr "璇峰府鍔╂垜浠洖绛"
+
+msgid "unanswered questions"
+msgstr "娌℃湁鍥炵瓟鐨勯棶棰"
+
+msgid "Unanswered questions"
+msgstr "娌℃湁鍥炵瓟鐨勯棶棰"
+
+#revisions_answer.html
+msgid "Revision history"
+msgstr "鐗堟湰鍘嗗彶"
+
+msgid "back"
+msgstr "杩斿洖"
+
+msgid "revision"
+msgstr "鐗堟湰"
+
+msgid "edit"
+msgstr "缂栬緫"
+
+msgid "asked"
+msgstr "鎻愰棶浜"
+
+msgid "updated"
+msgstr "鏇存柊浜"
+
+msgid "Tag list"
+msgstr "鏍囩鍒楄〃"
+
+msgid "by name"
+msgstr "鎸夊悕绉版帓搴"
+
+msgid "sorted alphabetically"
+msgstr "鎸夊悕绉扮殑瀛楁瘝鍏堝悗椤哄簭鎺掑簭"
+
+msgid "by polularity"
+msgstr "鎸夋祦琛岀▼搴︽帓搴"
+
+msgid "sorted by frequency of tag use"
+msgstr "鎸夋爣绛捐浣跨敤鐨勬鏁版帓搴"
+
+msgid "All tags matching query"
+msgstr "鍖归厤鏌ヨ"
+
+msgid "all tags - make this empty in english"
+msgstr "鐨勬墍鏈夋爣绛"
+
+msgid "Nothing found."
+msgstr "娌℃湁鎵惧埌鐩稿叧鏁版嵁銆"
+
+#paginator.html
+msgid "previous"
+msgstr "涓婁竴椤"
+
+msgid "current page"
+msgstr "褰撳墠椤"
+
+msgid "next page"
+msgstr "涓嬩竴椤"
+
+msgid "page number "
+msgstr "绗"
+
+msgid "number - make blank in english"
+msgstr "椤"
+
+msgid "Change tags"
+msgstr "淇敼闂鏍囩"
+
+msgid "tags are required"
+msgstr "鏍囩涓嶈兘涓虹┖銆"
+
+msgid "please use 5 tags or less"
+msgstr "鏈澶氬彧鑳芥湁5涓爣绛"
+
+#todo: remove magic numbers from this file
+msgid "up to 5 tags, less than 20 characters each"
+msgstr "鏈澶5涓爣绛撅紝姣忎釜鏍囩闀垮害灏忎簬20涓瓧绗︺"
+
+msgid "Change now"
+msgstr "鐜板湪淇敼"
+
+#synonym of above in Edit question
+msgid "Save edit"
+msgstr "鐜板湪淇敼"
+
+msgid "uses tags for the classification of questions"
+msgstr "鐢ㄦ爣绛炬潵鍒嗙被绯荤粺鐨勪俊鎭"
+
+msgid "tag editors receive special awards from the community"
+msgstr "淇敼鏍囩鐨勭敤鎴峰皢鎺堜簣鐗规畩鐨勭ぞ鍖哄鐗"
+
+msgid "Why use and modify tags?"
+msgstr "涓轰粈涔堟垜鍙兘淇敼闂鏍囩锛"
+
+msgid "Found by tag"
+msgstr "鏍囩闂"
+
+msgid "Found by title"
+msgstr "鏌ヨ缁撴灉"
+
+msgid "All questions"
+msgstr "鎵鏈夐棶棰"
+
+msgid "active"
+msgstr "娲昏穬闂"
+
+msgid "most recently asked questions"
+msgstr "鏈鏂板姞鍏ョ郴缁熺殑闂"
+
+msgid "most recently updated questions"
+msgstr "鏈杩戣鏇存柊鐨勯棶棰"
+
+msgid "latest questions info"
+msgstr ""
+"闂鎸鎻愰棶鏃堕棿鏄剧ず鎺掑簭銆"
+"鏂板姞鍏ョ殑闂灏嗘樉绀哄湪鏈鍓嶉潰銆"
+
+#: templates/questions.html:109
+#, 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] ""
+"\n"
+"鎮ㄦ鍦ㄦ祻瑙堟墍鏈"
+"%(q_num)s
"
+"涓爣璁颁负%(tagname)s
"
+msgstr[1] ""
+"\n"
+"鎮ㄦ鍦ㄦ祻瑙堟墍鏈"
+"%(q_num)s
"
+"涓爣璁颁负%(tagname)s"
+
+#: templates/questions.html:109
+#, python-format
+msgid ""
+"\n"
+"\t\t\thave total %(q_num)s questions containing %(searchtitle)s\n"
+"\t\t\t"
+msgid_plural ""
+"\n"
+"\t\t\thave total %(q_num)s questions containing %(searchtitle)s\n"
+"\t\t\t"
+msgstr[0] ""
+"\n"
+"鎮ㄦ鍦ㄦ祻瑙堟墍鏈"
+"%(q_num)s
"
+"涓爣棰樺惈鏈%(searchtitle)s"
+msgstr[1] ""
+"\n"
+"鎮ㄦ鍦ㄦ祻瑙堟墍鏈"
+"%(q_num)s
"
+"涓爣棰樺惈鏈%(searchtitle)s"
+
+#in unanswered.html and somewhere else
+msgid "Have a total of"
+msgstr "鎮ㄦ鍦ㄦ祻瑙堟墍鏈"
+
+msgid "number of questions"
+msgstr "涓"
+
+msgid "number of unanswered questions"
+msgstr "涓 娌℃湁鍥炵瓟鐨 闂銆"
+
+msgid "tagged with"
+msgstr "鏍囪涓"
+
+msgid "whose title contains"
+msgstr "鏍囬鍚湁"
+
+msgid "number of questions end of sentence"
+msgstr "鐨勯棶棰樸"
+
+msgid "Questions are sorted by the time of last update."
+msgstr "闂鎸鏈鍚庢洿鏂版椂闂鏄剧ず鎺掑簭銆"
+
+msgid "Most recently answered ones are shown first."
+msgstr "鏈鍚庤鍥炵瓟鎴栬>鏇存柊鐨勯棶棰樺皢鏄剧ず鍦ㄦ渶鍓嶉潰銆"
+
+msgid "Questions sorted by number of responses."
+msgstr "闂鎸鍥炲鏁伴噺鏄剧ず鎺掑簭銆"
+
+msgid "Most answered questions are shown first"
+msgstr "鍥炲鏈澶氱殑闂灏嗘樉绀哄湪鏈鍓嶉潰銆"
+
+msgid "Questions are sorted by the number of votes."
+msgstr "闂鎸鎶曠エ鏁伴噺鏄剧ず鎺掑簭銆"
+
+msgid "Most voted questions are shown first"
+msgstr "鎶曠エ鏈澶氱殑闂灏嗘樉绀哄湪鏈鍓嶉潰銆"
+
+msgid "Related tags"
+msgstr "鐩稿叧鏍囩"
+
+msgid "Reopen question"
+msgstr "閲嶈闂"
+
+msgid "Open the previously closed question"
+msgstr "浣犲皢鎵撳紑杩欎釜宸茬粡琚叧闂殑闂"
+
+msgid "The question was closed for the following reason"
+msgstr "闂鏇句互"
+
+msgid "reason - leave blank in english"
+msgstr "鐨勫師鍥犺"
+
+msgid "on"
+msgstr "浜"
+
+msgid "date closed"
+msgstr "鍏抽棴"
+
+msgid "reopen this question"
+msgstr "纭畾鎵撳紑杩欎釜闂"
+
+msgid "Edit user profile"
+msgstr "淇敼涓汉璧勬枡"
+
+msgid "edit profile"
+msgstr "淇敼璧勬枡"
+
+msgid "image associated with your email address"
+msgstr "鍜屾偍鐨勯偖浠跺湴鍧鏄粦瀹氱殑"
+
+msgid "avatar"
+msgstr "淇敼澶村儚"
+
+msgid "Registered user"
+msgstr "娉ㄥ唽鐢ㄦ埛"
+
+msgid "Update"
+msgstr "鏇存柊"
+
+msgid "User profile"
+msgstr "鐢ㄦ埛姒傝"
+
+msgid "overview"
+msgstr "姒傝"
+
+msgid "recent activity"
+msgstr "鏈杩戞椿鍔"
+
+msgid "comments and answers to others questions"
+msgstr "鍏朵粬鐢ㄦ埛鐨勫洖澶嶅拰璇勮"
+
+msgid "responses"
+msgstr "鍥炲簲"
+
+msgid "reputation history"
+msgstr "绉垎"
+
+msgid "reputation"
+msgstr "绉垎"
+
+msgid "graph of user reputation"
+msgstr "鐢ㄦ埛鐨勭ぞ鍖虹Н鍒嗗巻鍙"
+
+msgid "user vote record"
+msgstr "鐢ㄦ埛鎵鏈夋姇绁"
+
+msgid "casted votes"
+msgstr "鎶曠エ"
+
+msgid "questions that user selected as his/her favorite"
+msgstr "鐢ㄦ埛鏀惰棌鐨勯棶棰"
+
+msgid "users favorite questions"
+msgstr "鐢ㄦ埛鏀惰棌鐨勯棶棰"
+
+msgid "favorites"
+msgstr "鏀惰棌"
+
+msgid "favorite-questions"
+msgstr "鏀惰棌"
+
+msgid "user preference settings"
+msgstr "鐢ㄦ埛鍙傛暟鐨勮缃"
+
+msgid "settings"
+msgstr "璁剧疆"
+
+msgid "preferences"
+msgstr "璁剧疆"
+
+msgid "About"
+msgstr "鍏充簬鏈珯"
+
+msgid "logout"
+msgstr "閫鍑虹櫥褰"
+
+msgid "Logout"
+msgstr "閫鍑虹櫥褰"
+
+msgid "As a registered user you can login with your OpenID, log out of the site or permanently remove your account."
+msgstr "鎮ㄦ槸绯荤粺鐨娉ㄥ唽鐢ㄦ埛锛屽彲浠ラ殢鏃朵娇鐢∣penID甯愬彿鐧诲綍绯荤粺鎴栬呮敞閿鐧诲綍銆"
+
+msgid "Logout now"
+msgstr "鐐瑰嚮閫鍑虹櫥褰"
+
+msgid "Frequently Asked Questions "
+msgstr "甯歌闂"
+
+msgid "What kinds of questions can I ask here?"
+msgstr "鎴戝彲浠ュ湪杩欓噷鎻愰棶浠涔堟牱鐨勯棶棰橈紵"
+
+msgid "What questions should I avoid asking?"
+msgstr "浠涔堟牱鐨勯棶棰樻垜涓嶈鍦ㄨ繖閲屾彁闂紵"
+
+msgid "Most importanly - questions should be relevant to this community."
+msgstr "姣棤鐤戦棶锛岄鍏堝繀椤绘槸鎶鏈紪绋嬮棶棰橈紒"
+
+msgid "Before asking the question - please make sure to use search to see whether your question has alredy been answered."
+msgstr "鎻愰棶涔嬪墠锛屽厖鍒嗗埄鐢ㄧ郴缁熺殑鑷姩鏌ユ壘銆佹爣绛惧拰鎼滅储锛岀湅鐪嬫槸鍚﹀凡缁忔湁涓鏍风殑闂骞舵湁浜嗙瓟妗堛"
+
+msgid "What should I avoid in my answers?"
+msgstr "浠涔堟牱鐨勫洖绛旀槸涓嶅彈娆㈣繋鐨勶紵"
+
+msgid "Who moderates this community?"
+msgstr "璋佹槸绀惧尯鐨勭鐞嗗憳锛"
+
+msgid "Please avoid asking questions that are not relevant to this community, too subjective and argumentative."
+msgstr "涓庣▼搴忓憳鎴栨妧鏈棤鍏崇殑锛屽紩璧蜂簤鍚垫垨澶繃浜庝富瑙傛х瓑杩濊儗绀惧尯瀹楁棬鐨勫唴瀹广鏈珯寤虹珛鏄负浜嗗府鍔╁ぇ浼楃▼搴忓憳瑙e喅瀹為檯鎶鏈棶棰橈紝鎴戜滑闇瑕佸疄闄呯殑闂锛"
+
+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 "甯屾湜鐢ㄦ埛鎻愪緵閽堝鎻愰棶鐨勬妧鏈洖绛旓紝鍙互鏄繘涓姝ヤ簡瑙i棶棰樺疄璐紝缁欎簣鍙傝冩柟妗堬紝鎴栧畬鍏ㄨВ鍐抽棶棰樼殑鍥炵瓟銆傛垜浠笇鏈涢氳繃闂瓟鐨勫舰寮忚В鍐崇敤鎴风殑瀹為檯闂銆傚洜姝わ紝鎴戜滑涓>娆㈣繋鍦ㄥ洖绛斾腑鍑虹幇涓嶆槸鍥炵瓟闂鐨勫唴瀹癸紝鍖呮嫭閽堝浠栦汉鍥炵瓟鐨勮璁猴紝鍜屽叾浠栨棤鎰忎箟鐨勬氮璐圭綉缁滆祫婧愯涓銆侰NProg寤鸿鎮ㄤ娇鐢璇勮鍔熻兘鏉ヨ璁轰綘鐨勬剰瑙佸拰鎯虫硶銆"
+
+msgid "The short answer is: you."
+msgstr "绛旀鏄細姣忎釜鐢ㄦ埛銆"
+
+msgid "The reputation system allows users earn the authorization to perform a variety of moderation tasks."
+msgstr "閫氳繃绉垎杩愪綔锛姣忎釜鐢ㄦ埛閮芥湁鏉冮檺鍒涘缓鏍囩锛岃繘琛屽鎵鏈夐棶棰樸佸洖绛旂殑鎶曠エ銆佺紪杈戙佸叧闂瓑鎿嶄綔銆"
+
+msgid "This website is moderated by the users."
+msgstr "绀惧尯娌℃湁涓ユ牸鎰忎箟涓婄殑绠$悊鍛樿韩浠"
+
+msgid "How does reputation system work?"
+msgstr "浠涔堟槸绀惧尯绉垎锛"
+
+msgid "Anyone can ask questions and give answers, points are not necessary for that."
+msgstr "瀵逛簬姝e父浣跨敤绀惧尯杩涜鎻愰棶銆佸洖绛旇岃█锛岀Н鍒嗕笉鏄繀椤荤殑銆"
+
+msgid "As we've said before, users help running this site. Point system helps select users who can administer this community."
+msgstr "鎴戜滑涓鍐嶅0鏄庯紝CNProg鐢变綘鏉ヨ繍琛屽拰缁存姢銆傚鏋滀綘鎯冲府鍔╂垜浠潵杩愪綔CNProg锛屼綘闇瑕佷竴瀹氱殑绉垎绛夌骇銆"
+
+msgid "Reputation points roughly measure how community trusts you. These points are given to you directly by other members of the community."
+msgstr "绉垎鏄竴绉嶇敤鏉ョ矖鐣ヨ 閲忕ぞ鍖哄浣犳湁澶氫俊浠荤殑鏁版嵁銆绉垎涓嶆槸鏈夎皝鏉ユ敮浠樻垨鐩存帴缁欎簣浣犵殑锛岃屾槸浣犻氳繃鑾峰緱鍏朵粬鐢ㄦ埛鐨勬敮鎸佸拰淇′换鈥滆禋寰椻濈殑銆"
+
+msgid "For example, if you ask an interesting question or give a helpful answer, your input will be upvoted and you will gain more trust in the community."
+msgstr "涓句緥鏉ヨ锛屽鏋滀綘鎻愪簡涓涓潪甯告湁甯姪鐨勯棶棰樻垨鑰呭仛浜嗗緢鏈夌敤鐨勫洖绛旓紝浣犲皢浼氳鍏朵粬鐢ㄦ埛鎶曡禐鎴愮エ銆"
+
+msgid "If on the other hand someone gives a misleading answer, the answer will be voted down and he/she loses some points."
+msgstr "鐩稿弽锛屼綘鎻愪簡涓嶅彈娆㈣繋鐨勯棶棰橈紝鎴栬呰瀵肩敤鎴风殑鍥炵瓟锛屼綘灏嗗彲鑳借鍏朵粬鐢ㄦ埛鎶曞弽瀵圭エ銆傛瘡涓禐鎴"
+
+msgid "Each vote in favor will generate 10 points, each vote against will subtract 2 points."
+msgstr "绁ㄤ細甯綘浜х敓10涓ぞ鍖虹Н鍒嗭紝姣忎釜鍙嶅绁ㄤ細鐩稿簲鎵i櫎浣2涓Н鍒嗐"
+
+msgid "Through the votes of other people you can accumulate a maximum of 200 points."
+msgstr "姣忓ぉ閫氳繃鍒汉鎶曡禐鎴愮エ锛屼綘鏈澶氬彧鑳戒骇鐢200涓Н鍒嗭紝杩欐槸涓婇檺銆"
+
+msgid "After accumulating certain number of points, you can do more:"
+msgstr "褰撲綘绱鍒颁竴瀹>绉垎锛屼綘鍙互鍦ㄧぞ鍖哄仛鏇村鐨勪簨鎯咃細"
+
+msgid "upvote"
+msgstr "鎶曡禐鎴愮エ"
+
+msgid "use tags"
+msgstr "鏍囪鍨冨溇甯"
+
+msgid "add comment"
+msgstr "娣诲姞璇勮"
+
+#todo - check if it's indeed plural
+msgid "add comments"
+msgstr "娣诲姞璇勮"
+
+msgid "comments"
+msgstr "璇勮"
+
+msgid "downvote"
+msgstr "鎶曞弽瀵圭エ"
+
+msgid "retag questions"
+msgstr "缁欎换浣曢棶棰樻暣鐞嗘爣绛"
+
+msgid "edit community wiki questions"
+msgstr "缂栬緫wiki绫婚棶棰"
+
+msgid "edit any answer"
+msgstr "缂栬緫浠讳綍闂鎴栫瓟妗"
+
+msgid "reopen any closed questions"
+msgstr "鎵撳紑鍏抽棴浠讳綍浜虹殑闂"
+
+msgid "delete any comment"
+msgstr "鍒犻櫎浠讳綍涓涓瘎璁"
+
+msgid "delete any questions and answers and perform other moderation tasks"
+msgstr "鍒犻櫎浠讳綍涓涓棶棰樻垨绛旀锛屽強鍏朵粬绠$悊鍔熻兘"
+
+msgid "To register, do I need to create new password?"
+msgstr "鎴戦渶瑕佹敞鍐屼竴涓柊鐢ㄦ埛鍚楋紵"
+
+msgid "Why other people can edit my questions/answers?"
+msgstr "涓轰粈涔堝叾浠栦汉鍙互淇敼鎴戠殑闂/鍥炵瓟锛"
+
+msgid "Still have questions?"
+msgstr "杩樻湁鍏朵粬闂锛"
+
+msgid "Please ask your question, help make our community better!"
+msgstr "濡傛灉鎮ㄥ绀惧尯杩樻湁鍏朵粬鐤戦棶锛岃涓璧锋潵瀹屽杽鎴戜滑鐨"
+
+msgid "No, you don't have to. You can login through any service that supports OpenID, e.g. Google, Yahoo, AOL, etc."
+msgstr "涓嶉渶瑕併傜ぞ鍖烘彁渚涗簡OpenID鐨勭櫥褰曟敮鎸侊紝浣犺鐢℅oogle銆乊ahoo绛変换浣曟敮鎸丱penID鐧诲綍鐨勫笎鍙峰氨鍙互浣跨敤绯荤粺銆"
+
+msgid "Login now!"
+msgstr "椹笂鐧诲綍"
+
+msgid "Login"
+msgstr "鐧诲綍"
+
+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 "鎵浠ラ棶棰樺拰绛旀閮芥槸濡俉iki涓鏍峰彲缂栬緫鐨勶紝鎴戜滑甯屾湜绀惧尯鑳藉府鍔╃敤鎴锋矇娣銆佺Н绱洿澶氭湁鐢ㄧ殑鐭ヨ瘑鍜岀粡楠屻"
+
+msgid "If this approach is not for you, we respect your choice."
+msgstr "濡傛灉鎮ㄤ笉鍠滄杩欑鏂瑰紡锛屾垜浠皧閲嶄綘鐨勯夋嫨銆"
+
+msgid "Privacy policy"
+msgstr "闅愮鏀跨瓥"
+
+msgid "Site Visitors"
+msgstr "缃戠珯璁块棶鑰"
+
+msgid "Personal Information"
+msgstr "涓汉韬唤淇℃伅"
+
+msgid "Other Services"
+msgstr "鍏朵粬鏈嶅姟"
+
+msgid "Policy Changes"
+msgstr "鏀跨瓥鏇存敼"
+
+msgid "Sorry, could not find the page you requested."
+msgstr "瀵逛笉璧凤紝娌℃湁鎵惧埌鎮ㄨ姹傜殑椤甸潰锛"
+
+msgid "This might have happened for the following reasons:"
+msgstr "鏈夊彲鑳芥槸浠ヤ笅鍘熷洜瀵艰嚧锛"
+
+msgid "this question or answer has been deleted;"
+msgstr "浣犳鍦ㄦ煡鐪嬬殑闂鎴栬呭洖绛斿凡缁忚鍒犻櫎锛"
+
+msgid "url has error - please check it;"
+msgstr "璇锋眰鐨勫湴鍧鏈夎 - 璇锋牳瀹炲師濮婾RL鍦板潃锛"
+
+msgid "the page you tried to visit is protected or you don't have sufficient points, see"
+msgstr "璁块棶鐨勯〉闈㈣淇濇姢鎴栦綘鐨勭Н鍒嗕笉澶燂紝鍙傝"
+
+msgid "if you believe this error 404 should not have occured, please"
+msgstr "濡傛灉浣犵‘淇′笉璇ュ嚭鐜404閿欒锛岃"
+
+msgid "report this problem"
+msgstr "鎶ュ憡杩欎釜闂"
+
+msgid "back to previous page"
+msgstr "杩斿洖鍓嶉〉"
+
+msgid "see all questions"
+msgstr "鏌ョ湅鏈鏂伴棶棰"
+
+msgid "see all tags"
+msgstr "鏌ョ湅鏍囩鍒楄〃"
+
+msgid "Edit answer"
+msgstr "淇敼鍥炵瓟"
+
+msgid "hide preview"
+msgstr "绂佺敤棰勮"
+
+msgid "show preview"
+msgstr "鍚敤棰勮"
+
+msgid "select revision"
+msgstr "閫夋嫨鐗堟湰"
+
+msgid "Toggle the real time Markdown editor preview"
+msgstr "鎵撳紑鎴栬呭叧闂璏arkdown缂栬緫鍣ㄧ殑瀹炴椂棰勮"
+
+msgid "toggle preview"
+msgstr "棰勮寮鍏"
+
+msgid "question tips"
+msgstr "鍙楁杩庣殑鎻愰棶"
+
+msgid "answer tips"
+msgstr "鍙楁杩庣殑鎻愰棶"
+
+msgid "try to give an answer, rather than engage into a discussion"
+msgstr "寤鸿鎮ㄦ彁鐨勯棶棰樻槸鍙互琚瓟澶嶇殑锛岃屼笉浠呬粎鏄彲浠ヨ璁恒"
+
+msgid "please try to provide details"
+msgstr "璇疯缁嗘弿杩版偍鐨勯棶棰樸"
+
+msgid "be clear and concise"
+msgstr "鎴戜滑鎺ㄨ崘鎮ㄤ娇鐢ㄤ腑鏂囨弿杩伴棶棰橈紝杩欐牱鍙互寰楀埌鏇村鐨勭瓟澶嶆満浼氥"
+
+msgid "see frequently asked questions"
+msgstr "鏌ョ湅甯歌闂"
+
+msgid "learn more about Markdown"
+msgstr "鏈夊叧Markdown璇︾粏璇存槑"
+
+msgid "basic HTML tags are also supported"
+msgstr "鍩烘湰鐨凥TML鏍囩涔熸槸鏀寔鐨"
+
+msgid "numbered list:"
+msgstr "鍒楄〃锛"
+
+msgid "image"
+msgstr "鍥剧墖"
+
+msgid "text"
+msgstr "鏂囨湰"
+
+msgid "title"
+msgstr "鏍囬"
+
+msgid "Markdown tips"
+msgstr "Markdown蹇熷弬鑰"
+
+msgid "*italic* or _italic_"
+msgstr "*鏂滀綋* 鎴栬 _鏂滀綋_"
+
+msgid "**bold** or __bold__"
+msgstr "**鍔犵矖** 鎴栬 __鍔犵矖__ "
+
+msgid "link"
+msgstr "閾炬帴"
+
+msgid "Badge"
+msgstr "濂栫墝"
+
+msgid "The users have been awarded with badges:"
+msgstr "鐢ㄦ埛宸茶鎺堜簣璇ュ鐗岋細"
+
+msgid "posts per page"
+msgstr "姣忛〉鏄剧ず"
+
+msgid "i like this post (click again to cancel)"
+msgstr "杩欑瘒甯栧瓙鏈変环鍊硷紙鍐嶆鐐瑰嚮鍙栨秷鎿嶄綔锛"
+
+msgid "i like this answer (click again to cancel)"
+msgstr "杩欑瘒甯栧瓙鏈変环鍊硷紙鍐嶆鐐瑰嚮鍙栨秷鎿嶄綔锛"
+
+msgid "current number of votes"
+msgstr "褰撳墠鎬荤エ鏁"
+
+msgid "i dont like this post (click again to cancel)"
+msgstr "杩欑瘒甯栧瓙娌℃湁浠峰硷紙鍐嶆鐐瑰嚮鍙栨秷鎿嶄綔锛"
+
+msgid "i dont like this answer (click again to cancel)"
+msgstr "杩欑瘒甯栧瓙娌℃湁浠峰硷紙鍐嶆鐐瑰嚮鍙栨秷鎿嶄綔锛"
+
+msgid "mark this question as favorite (click again to cancel)"
+msgstr "鎴戣鏀惰棌杩欎釜闂锛堝啀娆$偣鍑诲彇娑堟搷浣滐級"
+
+msgid "remove favorite mark from this question (click again to restore mark)"
+msgstr "鎴戣鏀惰棌杩欎釜闂锛堝啀娆$偣鍑诲彇娑堟搷浣滐級"
+
+msgid "delete"
+msgstr "鍒犻櫎"
+
+#todo please check this in chinese
+msgid "undelete"
+msgstr "鍙栨秷"
+
+#: templates/unanswered.html:98
+#, python-format
+msgid "have %(num_q)s unanswered questions"
+msgstr ""
+"鎮ㄦ鍦ㄦ祻瑙堟墍鏈
"
+"%(num_q)s
"
+"涓闂鎸 闂鍒涘缓鏃堕棿 鎺掑簭銆傛渶鏂板姞鍏ョ殑闂灏嗘樉绀哄湪鏈鍓嶉潰銆
"
+
+msgid "Change password"
+msgstr "淇敼瀵嗙爜"
+
+msgid "Change email"
+msgstr "鏇存崲鐢靛瓙閭欢"
+
+msgid "Change OpenID"
+msgstr "鏇存崲OpenID鍦板潃"
+
+msgid "Delete account"
+msgstr "鍒犻櫎甯愬彿"
+
+msgid "User login"
+msgstr "鐢ㄦ埛鐧诲綍"
+
+msgid "we support two login modes"
+msgstr "CNProg鏀寔涓ょ鐧诲綍妯″紡銆傛偍鍙互浣跨敤甯愬彿銆佸瘑鐮佺櫥褰曪紝鎴栬呬娇鐢∣penID鐧诲綍銆"
+
+msgid "Login with your OpenID"
+msgstr "浣跨敤OpenID鐧诲綍"
+
+msgid "select openid provider"
+msgstr "1)璇烽夋嫨鎮ㄧ殑甯愬彿绫伙細"
+
+msgid "verify openid link and login"
+msgstr "2)鍨嬪苟瀹屾垚姝g‘鐨凮penID鍦板潃锛堝锛氭浛鎹⑩渰username}鈥濅负鎮ㄧ殑瀵瑰簲甯愬彿锛夛細"
+
+msgid "reopen"
+msgstr "鎵撳紑"
+
+msgid "close"
+msgstr "鍏抽棴"
+
+msgid "report as offensive (i.e containing spam, advertising, malicious text, etc.)"
+msgstr "妫涓捐甯栦负鍨冣滄按甯栤濓紙鍚箍鍛娿佷汉韬敾鍑汇佹伓鎰忚█璁虹瓑锛"
+
+msgid "flag offensive"
+msgstr "鍨冨溇甯栵紵"
+
+msgid "login"
+msgstr "鐧诲綍"
+
+msgid "back to home page"
+msgstr "鍥炲埌棣栭〉"
+
+msgid "questions"
+msgstr "闂"
+
+msgid "tags"
+msgstr "鏍囩"
+
+msgid "users"
+msgstr "鐢ㄦ埛"
+
+msgid "books"
+msgstr "璇讳功"
+
+msgid "badges"
+msgstr "濂栫墝姒"
+
+msgid "my profile"
+msgstr "鎴戠殑璧勬枡"
+
+msgid "ask a question"
+msgstr "鎴戣鎻愰棶"
+
+msgid "Ask a question"
+msgstr "鎴戣鎻愰棶"
+
+msgid "search"
+msgstr "鎼滅储"
+
+msgid "update profile"
+msgstr "鏇存柊鎴戠殑璧勬枡"
+
+msgid "real name"
+msgstr "濮撳悕"
+
+msgid "member for"
+msgstr "宸插姞鍏"
+
+msgid "ago"
+msgstr "鍓"
+
+msgid "last seen"
+msgstr "涓婃娲诲姩鏃堕棿"
+
+msgid "user website"
+msgstr "涓汉缃戠珯"
+
+msgid "location"
+msgstr "鍩庡競"
+
+#user_info.html
+msgid "age"
+msgstr "骞撮緞"
+
+msgid "age unit"
+msgstr "宀"
+
+msgid "todays unused votes"
+msgstr "浠婃棩鍓╀綑鎶曠エ鏁"
+
+msgid "votes left"
+msgstr "绁"
+
+msgid "this answer has been selected as correct"
+msgstr "璇ュ洖绛斿凡琚涓烘渶浣崇瓟妗"
+
+msgid "the answer has been voted for %d times"
+msgstr "璇ュ洖绛旀诲叡鏈%d涓姇绁"
+
+msgid "the answer has been commented %d times"
+msgstr "璇ュ洖绛旀湁%d鏉¤瘎璁"
+
+msgid "votes total"
+msgstr "涓姇绁"
+
+msgid "user has voted up this many times"
+msgstr "璇ョ敤鎴锋姇鐨勮禐鎴愮エ鎬绘暟"
+
+msgid "user has voted down this many times"
+msgstr "鐢ㄦ埛鎶曠殑鍙嶅绁ㄦ绘暟"
+
+msgid "Tags"
+msgstr "涓爣绛"
+
+msgid "see other questions tagged '%s'"
+msgstr "鏌ョ湅鏈夊叧'%s'鐨勯棶棰"
+
+msgid "Badges"
+msgstr "鏋氬鐗"
+
+msgid "Badge summary"
+msgstr "濂栫墝鍒楄〃"
+
+msgid "Users"
+msgstr "鐢ㄦ埛鍒楄〃"
+
+msgid "recent"
+msgstr "鏈鏂板姞鍏"
+
+msgid "oldest"
+msgstr "鏈鍏堝姞鍏"
+
+msgid "by username"
+msgstr "鐢ㄦ埛鍚"
+
+msgid "user name"
+msgstr "鐢ㄦ埛鍚"
+
+msgid "users matching query %s:"
+msgstr "鍖归厤鏌ヨ '%s' 鐨勬墍鏈夌敤鎴峰悕锛"
+
+msgid "Below is the list of available badges and number of times each type of badge has been awarded."
+msgstr "杩欓噷鍒楀嚭绀惧尯鎵鏈夌殑濂栫墝锛屼互鍙婂埌鐩墠涓烘锛屾瘡涓鐗岃鎺堜簣鐨勭敤鎴蜂汉鏁般"
+
+msgid "Community badges"
+msgstr "绀惧尯濂栫墝"
+
+msgid "gold badge: the highest honor and is very rare"
+msgstr "閲戠墝:鍗佸垎缃曡涔嬫渶楂樿崳鑰"
+
+msgid "silver badge: occasionally awarded for the very high quality contributions"
+msgstr "閾剁墝:鍋跺皵棰佸彂涔嬩紭璐ㄥ绔"
+
+msgid "gold"
+msgstr "閲戠墝"
+
+msgid "Gold badge is very rare."
+msgstr "閲戠墝鏄崄鍒嗙綍瑙佺殑銆"
+
+msgid "To obtain it you have to show profound knowledge and ability in addition to actively participating in the community."
+msgstr "浣犱笉浠呰鍙備笌绀惧尯鐨勬彁闂佸洖绛斻佹姇绁ㄧ瓑娲诲姩锛岃屼笖闇瑕佹湁楂樻繁鐨勭煡璇嗗拰鑳藉姏鎵嶈兘鑾峰緱銆"
+
+msgid "Gold badge is the highest award in this community."
+msgstr "鑾峰緱閲戠墝鎰忓懗鐫浣犲湪鏌愪釜灞傛涓婂凡缁忚揪鍒颁簡椤跺嘲銆"
+
+msgid "silver"
+msgstr "閾剁墝"
+
+msgid "Obtaining silver badge requires significant patience."
+msgstr "閾剁墝闇瑕佺粡杩囬暱鏃堕棿鐨勫鏂楁墠鑳借幏寰椼"
+
+msgid "If you got one, you have very significantly contributed to this community"
+msgstr "瀹冩槸涓嶅悓瀵诲父鐨勮崳瑾夛紝鍙浣犱粯鍑鸿冻澶熺殑鍔姏灏变細寰楀埌銆"
+
+msgid "bronze badge: often given as a special honor"
+msgstr "閾滅墝:鏃跺父鎺堜簣涔嬬壒娈婅崳瑾"
+
+msgid "If you are active in this community, you will will get this medal - still it is a special honor."
+msgstr "閾滅墝浼氬湪浣犳椿璺冧簬绀惧尯鏃朵骇鐢燂紝瀹冪浉瀵瑰鏄撹幏寰楋紝浣嗕篃鏄竴绉嶇壒娈婄殑鑽h獕銆"
+
+msgid "Use"
+msgstr "浣跨敤"
+
+msgid "learn more about OpenID"
+msgstr "浜嗚В鏇村鏈夊叧OpenID鐨勪俊鎭"
+
+msgid "Get your own"
+msgstr "鑾峰彇鎮ㄨ嚜宸辩殑"
+
+msgid "User name"
+msgstr "鎮ㄧ殑澶у悕"
+
+msgid "Email: (won't be shown to anyone)"
+msgstr "鐢靛瓙閭欢:锛堜笉浼氬叕寮鏄剧ず锛"
+
+msgid "Ask your question"
+msgstr "鐜板湪鎻愰棶"
+
+#page title
+msgid "Edit question"
+msgstr "淇敼闂"
+
+msgid "The question has been closed for the following reason \"%s\" by"
+msgstr "闂浠モ%s鈥濈殑鍘熷洜宸茶"
+
+msgid "%s ago"
+msgstr "浜%s鍏抽棴"
+
+msgid "oldest answers"
+msgstr "鏈鍏堝洖绛"
+
+msgid "newest answers"
+msgstr "鏈杩戝洖绛"
+
+msgid "popular answers"
+msgstr "鎶曠エ鏈澶"
+
+msgid "oldest answers will be shown first"
+msgstr "鏈鍏堝洖绛旀樉绀哄湪鏈鍓嶉潰"
+
+msgid "newest answers will be shown first"
+msgstr "鏈鏅氬洖绛旀樉绀哄湪鏈鍓嶉潰"
+
+msgid "most voted answers will be shown first"
+msgstr "鎶曠エ娆℃暟鏈澶氱殑鏄剧ず鍦ㄦ渶鍓嶉潰"
+
+msgid "mark this answer as favorite (click again to undo)"
+msgstr "鏈浣崇瓟妗堬紙鍐嶆鐐瑰嚮鍙栨秷鎿嶄綔锛"
+
+msgid "the author of the question has selected this answer as correct"
+msgstr "杩欎釜绛旀宸茬粡琚彁闂綔鑰呮爣璁颁负鏈浣崇瓟妗"
+
+msgid "answer permanent link"
+msgstr "璇ュ洖绛旂殑閾炬帴鍦板潃"
+
+msgid "permanent link"
+msgstr "姘镐箙閾炬帴"
+
+msgid "Your answer"
+msgstr "鎮ㄧ殑鍥炵瓟"
+
+msgid "Answer the question"
+msgstr "鍥炵瓟璇ラ棶棰"
+
+msgid "Login to answer"
+msgstr "鐧诲綍骞跺洖绛旇闂"
+
+msgid "Question tags"
+msgstr "鎮ㄦ鍦ㄦ祻瑙堢殑闂鍚湁浠ヤ笅鏍囩"
+
+msgid "Question asked"
+msgstr "鎻愰棶鏃堕棿"
+
+msgid "question was seen"
+msgstr "鐩墠娴忚鏁伴噺"
+
+msgid "times"
+msgstr "娆"
+
+msgid "last updated"
+msgstr "鏈鍚庢洿鏂版椂闂"
+
+msgid "related questions"
+msgstr "鐩镐技鐨勯棶棰"
+
+msgid "profile - responses"
+msgstr "鍥炲簲 - 鐢ㄦ埛璧勬枡"
+
+msgid "user reputation in the community"
+msgstr "鐢ㄦ埛绀惧尯绉垎"
+
+msgid "profile - user reputation"
+msgstr "绉垎 - 鐢ㄦ埛璧勬枡"
+
+msgid "profile - favorite questions"
+msgstr "鏀惰棌 - 鐢ㄦ埛璧勬枡"
+
+msgid "profile - votes"
+msgstr "鎶曠エ - 鐢ㄦ埛璧勬枡"
+
+msgid "profile - user preferences"
+msgstr "璁剧疆 - 鐢ㄦ埛璧勬枡"
+
+msgid "uploading images is limited to users with >60 reputation points"
+msgstr "涓婁紶鍥剧墖鍙檺浜庣Н鍒+60浠ヤ笂娉ㄥ唽鐢ㄦ埛!"
+
+#todo take these out of settings
+msgid "allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"
+msgstr "鍙厑璁镐笂浼'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'绫诲瀷鐨勬枃浠讹紒"
+
+msgid "maximum upload file size is %sK"
+msgstr "鍙厑璁镐笂浼%sK澶у皬鐨勬枃浠讹紒"
+
+msgid "Error uploading file. Please contact the site administrator. Thank you."
+msgstr "鍦ㄦ枃浠朵笂浼犺繃绋嬩腑浜х敓浜嗛敊璇紝璇疯仈绯荤鐞嗗憳锛岃阿璋_^"
+
+msgid "please enter a descriptive title for your question"
+msgstr "璇疯緭鍏ュ闂鍏锋湁鎻忚堪鎬ц川鐨勬爣棰 - 鈥滃府蹇欙紒绱фユ眰鍔╋紒鈥濅笉鏄缓璁殑鎻愰棶鏂瑰紡銆"
+
+msgid "title must be > 10 characters"
+msgstr "鏍囬鐨勯暱搴﹀繀椤诲ぇ浜10"
+
+msgid "content"
+msgstr "鍐呭"
+
+msgid "question content must be > 10 characters"
+msgstr "鍐呭鑷冲皯瑕10涓瓧绗"
+
+msgid "please use space to separate tags (this enables autocomplete feature)"
+msgstr "澶氫釜鏍囩璇风敤绌烘牸闂撮殧-鏈澶5涓爣绛俱傦紙浼樺厛浣跨敤鑷姩鍖归厤鐨勮嫳鏂囨爣绛俱傦級"
+
+msgid "tags must be shorter than 20 characters"
+msgstr "姣忎釜鏍囩鐨勯暱搴︿笉瓒呰繃20"
+
+msgid "please use following characters in tags: letters 'a-z', numbers, and characters '.-_#'"
+msgstr "鏍囩璇蜂娇鐢ㄨ嫳鏂囧瓧姣嶏紝涓枃鎴栬呮暟瀛楀瓧绗︿覆锛. - _ # 涔熷彲浠ワ級"
+
+msgid "if you choose community wiki option, the question and answer do not generate points and name of author will not be shown"
+msgstr "閫夋嫨绀惧尯wiki妯″紡锛岄棶绛斾笉璁$畻绉垎锛岀鍚嶄篃涓嶆樉绀轰綔鑰呬俊鎭"
+
+msgid "update summary:"
+msgstr "鏇存柊姒傝锛"
+
+msgid "enter a brief summary of your revision (e.g. fixed spelling, grammar, improved style, this field is optional)"
+msgstr "杈撳叆鏈淇敼鐨勭畝鍗曟杩帮紙濡傦細淇敼浜嗗埆瀛楋紝淇浜嗚娉曪紝鏀硅繘浜嗘牱寮忕瓑銆傞潪蹇呭~椤广傦級"
+
+msgid "this email does not have to be linked to gravatar"
+msgstr "涓嶄細鍏紑锛岀敤浜庡ご鍍忔樉绀烘湇鍔"
+
+msgid "Real name"
+msgstr "鐪熷疄濮撳悕"
+
+msgid "Website"
+msgstr "涓汉缃戠珯"
+
+msgid "Location"
+msgstr "鍩庡競"
+
+msgid "Date of birth"
+msgstr "鐢熸棩"
+
+msgid "will not be shown, used to calculate age, format: YYYY-MM-DD"
+msgstr "涓嶄細鍏紑锛屽彧浼氭樉绀烘偍鐨勫勾榫勶紝鏍煎紡涓猴細YYYY-MM-DD"
+
+msgid "Profile"
+msgstr "涓汉绠浠"
+
+msgid "this email has already been registered, please use another one"
+msgstr "璇ョ數瀛愰偖浠跺凡琚敞鍐岋紝璇烽夋嫨鍙︿竴涓啀璇曘"
+
+msgid "duplicate question"
+msgstr "瀹屽叏閲嶅鐨勯棶棰"
+
+msgid "too subjective and argumentative"
+msgstr "澶富瑙傛с佸紩璧蜂簤鍚电殑闂"
+
+msgid "is not an answer to the question"
+msgstr "涓嶆槸涓涓彲浠ュ洖绛旂殑鈥滈棶棰樷"
+
+msgid "the question is answered, right answer was accepted"
+msgstr "闂宸茬粡瑙e喅锛屽凡寰楀埌姝g‘绛旀"
+
+msgid "problem is not reproducible or outdated"
+msgstr "宸茬粡杩囨椂銆佷笉鍙噸鐜扮殑闂"
+
+msgid "question contains offensive inappropriate, or malicious remarks"
+msgstr "鎭舵剰瑷璁"
+
+msgid "spam or advertising"
+msgstr "鍨冨溇骞垮憡"
+
+msgid "question"
+msgstr "鎻愰棶"
+
+msgid "answer"
+msgstr "鍥炵瓟"
+
+msgid "commented question"
+msgstr "璇勮闂"
+
+msgid "edited question"
+msgstr "淇敼闂"
+
+msgid "edited answer"
+msgstr "淇敼鍥炵瓟"
+
+msgid "received award"
+msgstr "鑾峰"
+
+msgid "marked best answer"
+msgstr "鏍囪鏈浣崇瓟妗"
+
+msgid "upvoted"
+msgstr "鎶曡禐鎴愮エ"
+
+msgid "downvoted"
+msgstr "鎶曞弽瀵圭エ"
+
+msgid "canceled vote"
+msgstr "鎾ら攢鎶曠エ"
+
+msgid "deleted question"
+msgstr "鍒犻櫎闂"
+
+msgid "deleted answer"
+msgstr "鍒犻櫎鍥炵瓟"
+
+msgid "marked offensive"
+msgstr "鏍囪鍨冨溇甯"
+
+msgid "updated tags"
+msgstr "鏇存柊鏍囩"
+
+msgid "selected favorite"
+msgstr "鏀惰棌"
+
+msgid "completed user profile"
+msgstr "瀹屾垚涓汉鎵鏈夎祫鏂"
+
+msgid "[closed]"
+msgstr "[宸插叧闂璢"
+
+msgid "[deleted]"
+msgstr "[宸插垹闄"
+
+msgid "initial version"
+msgstr "鍒濆鐗堟湰"
+
+msgid "retagged"
+msgstr "鏇存柊浜嗘爣绛"
+
+#todo: review this message may be confusing user
+msgid "This account already exists, please use another."
+msgstr "杈撳叆鎮ㄧ殑鏂板笎鍙锋垨鑰呮寚瀹氬凡缁忓瓨鍦ㄧ殑甯愬彿銆"
+
+msgid "Sorry, looks like we have some errors:"
+msgstr "璇锋敞鎰忎互涓嬮敊璇細"
+
+msgid "New account"
+msgstr "鏂板笎鍙"
+
+msgid "Use login name and password"
+msgstr "浣跨敤甯愬彿瀵嗙爜鐧诲綍"
+
+msgid "User name (will be shown to others, cannot be modified)"
+msgstr "鐢ㄦ埛鍚嶏紙鍦ㄧぞ鍖烘樉绀哄弸濂藉悕绉帮紝涓嶅彲鏇存敼锛"
+
+msgid "Email (not shared with anyone)"
+msgstr "鐢靛瓙閭欢锛鐢ㄤ簬澶村儚鏄剧ず鏈嶅姟锛"
+
+msgid "create account"
+msgstr "鍒涘缓甯愬彿"
+
+msgid "Existing account"
+msgstr "宸茬粡瀛樺湪鐨勭敤鎴"
+
+msgid "password"
+msgstr "瀵嗙爜"
+
+msgid "Password"
+msgstr "瀵嗙爜"
+
+msgid "Register"
+msgstr "纭"
+
+msgid "Forgot your password?"
+msgstr "蹇樿瀵嗙爜锛"
+
+msgid "Create new account"
+msgstr "娉ㄥ唽鏂板笎鍙"
+
+msgid "Send new password"
+msgstr "鍙戦佹柊瀵嗙爜"
+
+msgid "Lost your password? No problem - here you can reset it."
+msgstr "涓㈠け浜嗘偍鐨勫瘑鐮侊紵 浣犲彲浠ュ湪杩欓噷閲嶈瀵嗙爜銆"
+
+msgid "Please enter your username below and new password will be sent to your registered e-mail"
+msgstr "璇疯緭鍏ョ敤鎴峰悕锛屾柊鐨勫瘑鐮佷細鍙戦佸埌浣犳敞鍐屾椂鍊欏~鍐欑殑鐢靛瓙閭欢銆"
+
+msgid "Reset password"
+msgstr "閲嶈瀵嗙爜"
+
+msgid "return to login"
+msgstr "杩斿洖鐧诲綍"
+
+msgid "back to login"
+msgstr "杩斿洖鐧诲綍"
+
+#todo - check translation or see if it's indeed true
+msgid "Note: your new password will be activated only after you click the activation link in the email message"
+msgstr "娉ㄦ剰: 鏂扮殑瀵嗙爜鍙湁鎮ㄥ湪婵娲婚偖浠朵腑鐨勯摼鎺ュ悗鎵嶄細琚縺娲汇"
+
+msgid "Signup"
+msgstr "娉ㄥ唽甯愬彿"
+
+msgid "We support two types of user registration: conventional username/password, and"
+msgstr "鎴戜滑鏀寔涓ょ娉ㄥ唽鏂瑰紡锛屼綘鍙互浣跨敤甯歌鐨勭敤鎴峰悕銆佸瘑鐮佹柟寮忔敞鍐岋紝鎴栬"
+
+msgid "the OpenID method"
+msgstr "浣跨敤OpenID甯愬彿娉ㄥ唽"
+
+msgid "Conventional registration"
+msgstr "璇锋敞鎰忎互涓嬮敊璇細"
+
+msgid "choose a user name"
+msgstr "閫夋嫨涓涓敤鎴峰悕"
+
+msgid "your email address"
+msgstr "鎮ㄧ殑鐢靛瓙閭欢鍦板潃"
+
+msgid "choose password"
+msgstr "瀵嗙爜"
+
+msgid "retype password"
+msgstr "纭瀵嗙爜"
+
+msgid "Register with your OpenID"
+msgstr "浣跨敤OpenID娉ㄥ唽"
+
+msgid "sorry, this name can not be used, please try another"
+msgstr "瀵逛笉璧凤紝鎮ㄤ笉鑳芥敞鍐岃鐢ㄦ埛鍚嶏紝璇锋崲涓涓瘯璇"
+
+msgid "this name is already in use - please try anoter"
+msgstr "璇ョ敤鎴峰悕宸茶娉ㄥ唽锛岃鎹竴涓瘯璇"
+
+msgid "Why use OpenID?"
+msgstr "涓轰粈涔堥渶瑕丱penID鐧诲綍锛"
+
+msgid "with openid it is easier"
+msgstr "鏋勫缓鍦∣penID缃戠粶璁よ瘉涓婄殑鏈郴缁燂紝涓嶉渶瑕佷綘娉ㄥ唽鏂扮殑甯愬彿锛屽嵆鍙娇鐢ㄦ垜浠郴缁熺殑鎵鏈夊姛鑳"
+
+msgid "openid is supported open standard"
+msgstr "OpenID鏄湁寮鏀炬爣鍑嗭紝骞朵笖鏈夌浉鍏崇殑鍩洪噾缁勭粐鎻愪緵鏀寔"
+
+msgid "Find out more"
+msgstr "鏌ョ湅鏇村"
+
+msgid "Get OpenID"
+msgstr "鑾峰彇OpenID"
+
+msgid "openid is widely adopted"
+msgstr "鍏ㄤ笘鐣屾湁1.6浜縊penID甯愬彿锛屽拰10,000涓敮鎸丱penID鐨勭珯鐐"
+
+msgid "reuse openid"
+msgstr "鐢ㄥ悓涓涓笎鍙峰彲鐧诲綍浜掕仈缃戞墍鏈夋縺娲籓penID鐨勭綉绔"
diff --git a/log/cnprog.log b/log/cnprog.log
new file mode 100644
index 00000000..e69de29b
diff --git a/settings.py b/settings.py
index 985de51a..7ad8524a 100644
--- a/settings.py
+++ b/settings.py
@@ -1,24 +1,56 @@
-# encoding:utf-8
# Django settings for lanai project.
import os.path
-#DEBUG SETTINGS
DEBUG = True
TEMPLATE_DEBUG = DEBUG
+
+SITE_SRC_ROOT = '/var/www/vhosts/cnprog'
+#David Cramer debug toolbar
INTERNAL_IPS = ('127.0.0.1',)
+DEBUG_TOOLBAR_PANELS = (
+ 'debug_toolbar.panels.sql.SQLDebugPanel',
+ 'debug_toolbar.panels.headers.HeaderDebugPanel',
+ 'debug_toolbar.panels.cache.CacheDebugPanel',
+ 'debug_toolbar.panels.profiler.ProfilerDebugPanel',
+ 'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
+ 'debug_toolbar.panels.templates.TemplatesDebugPanel',
+ # If you are using the profiler panel you don't need the timer
+ # 'debug_toolbar.panels.timer.TimerDebugPanel',
+)
+
+DEBUG_TOOLBAR_CONFIG = {
+ "INTERCEPT_REDIRECTS":False
+}
+
+#for logging
+import logging
+LOG_FILENAME = '/var/www/vhosts/cnprog/log/cnprog.log'
+logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)
#for OpenID auth
ugettext = lambda s: s
LOGIN_URL = '/%s%s' % (ugettext('account/'), ugettext('signin/'))
-#EMAIL AND ADMINS
+#system will send admins email about error stacktrace if DEBUG=False
ADMINS = (
- ('CNProg team', 'team@cnprog.com'),
+ ('you', 'you@where.com'),
)
+
MANAGERS = ADMINS
-SERVER_EMAIL = 'webmaster@cnprog.com'
-DEFAULT_FROM_EMAIL = 'webmaster@cnprog.com'
+DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+#DATABASE_NAME = 'cnprog' # Or path to database file if using sqlite3.
+#DATABASE_USER = 'root' # Not used with sqlite3.
+#DATABASE_PASSWORD = '' # Not used with sqlite3.
+DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
+DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
+
+DATABASE_NAME = 'dbname' # Or path to database file if using sqlite3.
+DATABASE_USER = 'dbuser' # Not used with sqlite3.
+DATABASE_PASSWORD = 'dbpass' # Not used with sqlite3.
+
+SERVER_EMAIL = 'server@where.com'
+DEFAULT_FROM_EMAIL = 'from@where.com'
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_SUBJECT_PREFIX = '[cnprog.com]'
@@ -26,21 +58,44 @@ EMAIL_HOST='smtp.gmail.com'
EMAIL_PORT='587'
EMAIL_USE_TLS=True
-#LOCALIZATIONS
-TIME_ZONE = 'Asia/Chongqing Asia/Chungking'
-# LANGUAGE_CODE = 'en-us'
+
+
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'America/Chicago'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+#LANGUAGE_CODE = 'en'
LANGUAGE_CODE = 'zh-cn'
+
SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
USE_I18N = True
-#OTHER SETTINS
-APP_TITLE = u'CNProg.com 绋嬪簭鍛橀棶绛旂ぞ鍖'
-APP_URL = 'http://www.cnprog.com'
-APP_KEYWORDS = u'鎶鏈棶绛旂ぞ鍖猴紝涓浗绋嬪簭鍛橈紝缂栫▼鎶鏈ぞ鍖猴紝绋嬪簭鍛樼ぞ鍖猴紝绋嬪簭鍛樿鍧涳紝绋嬪簭鍛榳iki锛岀▼搴忓憳鍗氬'
-APP_DESCRIPTION = u'涓浗绋嬪簭鍛樼殑缂栫▼鎶鏈棶绛旂ぞ鍖恒傛垜浠仛涓撲笟鐨勩佸彲鍗忎綔缂栬緫鐨勬妧鏈棶绛旂ぞ鍖恒'
-APP_INTRO = u' CNProg鏄竴涓闈㈠悜绋嬪簭鍛鐨勫彲鍗忎綔缂栬緫鐨寮鏀炬簮浠g爜闂瓟绀惧尯銆
鎮ㄥ彲浠ュ湪杩欓噷鎻愰棶鍚勭被绋嬪簭鎶鏈棶棰 - 闂涓嶅垎璇█鍜屽钩鍙般 鍚屾椂涔熷笇鏈涙偍瀵瑰姏鎵鑳藉強鐨勯棶棰橈紝缁欎簣鎮ㄧ殑瀹濊吹绛旀銆
'
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+MEDIA_ROOT = '/var/www/vhosts/cnprog/templates/upfiles/'
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+# Examples: "http://media.lawrence.com", "http://example.com/media/"
+MEDIA_URL = 'http://where.com/upfiles/'
+
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# trailing slash.
+# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/admin/media/'
-SECRET_KEY = '$oo^&_m&qwbib=(_4m_n*zn-d=g#s0he5fx9xonnym#8p6yigm'
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = '$oo^&_m&qwbib=ffljk_4m_n*zn-d=g#s0he5fx9xonnym#8p6yigm'
+
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.load_template_source',
@@ -55,15 +110,12 @@ MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.transaction.TransactionMiddleware',
- #'django.middleware.sqlprint.SqlPrintingMiddleware',
- 'middleware.pagesize.QuestionsPageSizeMiddleware',
- #'debug_toolbar.middleware.DebugToolbarMiddleware',
+ 'debug_toolbar.middleware.DebugToolbarMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
'django.core.context_processors.auth',
- 'context.application_settings'
)
ROOT_URLCONF = 'urls'
@@ -72,7 +124,6 @@ TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)
-#UPLOAD SETTINGS
FILE_UPLOAD_TEMP_DIR = os.path.join(os.path.dirname(__file__), 'tmp').replace('\\','/')
FILE_UPLOAD_HANDLERS = ("django.core.files.uploadhandler.MemoryFileUploadHandler",
"django.core.files.uploadhandler.TemporaryFileUploadHandler",)
@@ -93,7 +144,3 @@ INSTALLED_APPS = (
'django_authopenid',
'debug_toolbar' ,
)
-
-# User settings
-from settings_local import *
-
diff --git a/templates/404.html b/templates/404.html
index 02725854..d24edaf0 100644
--- a/templates/404.html
+++ b/templates/404.html
@@ -1,4 +1,6 @@
+
{% extends "base_content.html" %}
+{% load i18n %}
{% block title %}{% spaceless %}404 Error{% endspaceless %}{% endblock %}
{% block forestyle%}