summaryrefslogtreecommitdiffstats
path: root/templates
diff options
context:
space:
mode:
authorMike Chen <chagel@gmail.com>2009-07-29 00:00:52 +0800
committerMike Chen <chagel@gmail.com>2009-07-29 00:00:52 +0800
commit068bb7dc78d0b3565c100b61acc859ede0adc0d4 (patch)
tree0ec7772b1fa7c1a88bd60c585cc0c8a7adbccc1a /templates
parent002317dcd125d66eea5ea98ce7beb9389615b10d (diff)
downloadaskbot-068bb7dc78d0b3565c100b61acc859ede0adc0d4.tar.gz
askbot-068bb7dc78d0b3565c100b61acc859ede0adc0d4.tar.bz2
askbot-068bb7dc78d0b3565c100b61acc859ede0adc0d4.zip
merge Evgeny's English and Botum's Spanish translations
Diffstat (limited to 'templates')
-rw-r--r--templates/404.html27
-rw-r--r--templates/500.html28
-rw-r--r--templates/answer_edit.html83
-rw-r--r--templates/answer_edit_tips.html589
-rw-r--r--templates/ask.html87
-rw-r--r--templates/authopenid/changeemail.html4
-rw-r--r--templates/authopenid/complete.html37
-rw-r--r--templates/authopenid/sendpw.html17
-rw-r--r--templates/authopenid/settings.html10
-rw-r--r--templates/authopenid/signin.html47
-rw-r--r--templates/authopenid/signup.html25
-rw-r--r--templates/badge.html13
-rw-r--r--templates/badges.html28
-rw-r--r--templates/base.html30
-rw-r--r--templates/base_content.html28
-rw-r--r--templates/book.html52
-rw-r--r--templates/close.html18
-rw-r--r--templates/content/images/favicon.icobin3638 -> 0 bytes
-rw-r--r--templates/content/js/com.cnprog.i18n.js90
-rw-r--r--templates/content/js/com.cnprog.post.js109
-rw-r--r--templates/content/js/com.cnprog.post.pack.js1
-rw-r--r--templates/content/js/com.cnprog.utils.js22
-rw-r--r--templates/content/js/jquery.i18n.js133
-rw-r--r--templates/content/js/wmd/wmd.js34
-rw-r--r--templates/header.html37
-rw-r--r--templates/index.html44
-rw-r--r--templates/logout.html12
-rw-r--r--templates/privacy.html37
-rw-r--r--templates/question.html165
-rw-r--r--templates/question_edit.html85
-rw-r--r--templates/question_edit_tips.html51
-rw-r--r--templates/reopen.html15
-rw-r--r--templates/revisions_answer.html18
-rw-r--r--templates/revisions_question.html21
-rw-r--r--templates/tags.html18
-rw-r--r--templates/unanswered.html55
-rw-r--r--templates/user.html3
-rw-r--r--templates/user_edit.html19
-rw-r--r--templates/user_favorites.html4
-rw-r--r--templates/user_footer.html3
-rw-r--r--templates/user_info.html34
-rw-r--r--templates/user_recent.html4
-rw-r--r--templates/user_reputation.html3
-rw-r--r--templates/user_responses.html6
-rw-r--r--templates/user_stats.html27
-rw-r--r--templates/user_tabs.html30
-rw-r--r--templates/user_votes.html9
-rw-r--r--templates/users.html22
-rw-r--r--templates/users_questions.html22
49 files changed, 1570 insertions, 686 deletions
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 @@
+<!-- template 404.html -->
{% extends "base_content.html" %}
+{% load i18n %}
{% block title %}{% spaceless %}404 Error{% endspaceless %}{% endblock %}
{% block forestyle%}
<style type="text/css">
@@ -19,30 +21,29 @@
</div>
<div id="main-body" class="">
<div style="padding:5px 0px 10px 0;line-height:25px;">
- <h3>对不起,没有找到您请求的页面!</h3>
+ <h3>{% trans "Sorry, could not find the page you requested." %}</h3>
<div style="margin-top:5px">
- 有可能是以下原因导致:<br>
+ {% trans "This might have happened for the following reasons:" %}<br>
<ul>
- <li>你正在查看的问题或者回答已经被删除;</li>
- <li>请求的地址有误 - 请核实原始URL地址;</li>
- <li>访问的页面被保护或你的积分不够,参见<a href="/faq"> faq</a>;</li>
- <li>如果你确信不该出现404错误,请<a href="http://cnprog.uservoice.com/" target="_blank">报告这个问题</a></li>
+ <li>{% trans "this question or answer has been deleted;" %}</li>
+ <li>{% trans "url has error - please check it;" %}</li>
+ <li>{% trans "the page you tried to visit is protected or you don't have sufficient points, see" %} <a href="/faq"> faq</a>;</li>
+ <li>{% trans "if you believe this error 404 should not have occured, please" %}
+ <a href="{{feedback_site_url}}" target="_blank">{% trans "report this problem" %}</a></li>
</u>
</div>
<script type="text/javascript">
var GOOG_FIXURL_LANG = 'zh-cn';
- var GOOG_FIXURL_SITE = 'http://cnprog.com/';
+ var GOOG_FIXURL_SITE = '{{site_url}}';
</script>
<script type="text/javascript" src="http://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
<ul>
- <li><a href="#" id="linkPrevious">返回前页 » </li>
- <li><a href="/questions">查看最新问题 » </a></li>
- <li><a href="/tags/">查看标签列表 » </a></li>
+ <li><a href="#" id="linkPrevious">{% trans "back to previous page" %} » </li>
+ <li><a href="/questions">{% trans "see all questions" %} » </a></li>
+ <li><a href="/tags/">{% trans "see all tags" %} » </a></li>
</u>
</div>
</div>
{% endblock %}
-
-
-
+<!-- end template 404.html -->
diff --git a/templates/500.html b/templates/500.html
index 2e89783a..c99774b3 100644
--- a/templates/500.html
+++ b/templates/500.html
@@ -1,4 +1,6 @@
+<!-- template 500.html -->
{% extends "base_content.html" %}
+{% load i18n %}
{% block title %}{% spaceless %}500 Error{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
@@ -9,25 +11,25 @@
</script>
{% endblock %}
{% block content %}
-<div id="main-bar" class="headNormal">
- 500 Server Error
+<div id="main-bar" class="">
+ <h3>
+ 500 Server Error
+ </h3>
+
</div>
-<div id="main-body" class="">
+<div id="main-body" class="headNormal">
<div style="padding:5px 0px 10px 0;line-height:25px">
- <h3>对不起,系统发生了错误,不能响应您的请求!</h3>
+ <h3>{% trans "sorry, system error"</h3>
<br>
- 系统已经记录错误日志,我们会尽快解决此问题。<br>
- 如果这个问题长时间没有被修复,请<span class="darkred"><a title="cnprog.uservoice.com" href="http://cnprog.uservoice.com/" >搜索查看当前问题的状态,或者报告新的bug</a></span>。感谢您的支持!
-
+ {% trans "system error log is recorded, error will be fixed as soon as possible" %}<br>
+ {% trans "please report the error to the site administrators if you wish" %}
<ul>
- <li><a href="#" id="linkPrevious">返回前页</li>
- <li><a href="/questions">查看最新问题</a></li>
- <li><a href="/tags/">查看标签列表</a></li>
+ <li><a href="#" id="linkPrevious">{% trans "back to previous page" %}</li>
+ <li><a href="/questions">{% trans "see latest questions" %}</a></li>
+ <li><a href="/tags/">{% trans "see tags" %}</a></li>
</u>
</div>
</div>
{% endblock %}
-
-
-
+<!-- end template 500.html -->
diff --git a/templates/answer_edit.html b/templates/answer_edit.html
index f914660a..008d9f78 100644
--- a/templates/answer_edit.html
+++ b/templates/answer_edit.html
@@ -1,11 +1,13 @@
+<!-- template answer_edit.html -->
{% extends "base.html" %}
-{% block title %}{% spaceless %}修改回答{% endspaceless %}{% endblock %}
+{% load i18n %}
+{% block title %}{% spaceless %}{% trans "Edit answer" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type='text/javascript' src='/content/js/com.cnprog.editor.js'></script>
<script type='text/javascript' src='/content/js/com.cnprog.post.js'></script>
<script type='text/javascript' src='/content/js/jquery.validate.pack.js'></script>
- <script type='text/javascript' src='/content/js/wmd/showdown-min.js'></script>
- <script type='text/javascript' src='/content/js/wmd/wmd-min.js'></script>
+ <script type='text/javascript' src='/content/js/wmd/showdown.js'></script>
+ <script type='text/javascript' src='/content/js/wmd/wmd.js'></script>
<link rel="stylesheet" type="text/css" href="/content/js/wmd/wmd.css" />
<script type="text/javascript">
@@ -19,10 +21,10 @@
//toggle preview of editor
var display = true;
- var txt = "禁用预览";
+ var txt = "{% trans "hide preview" %}";
$('#pre-collapse').text(txt);
$('#pre-collapse').bind('click', function(){
- txt = display ? "启用预览" : "禁用预览";
+ txt = display ? "{% trans "show preview" %}" : "{% trans "hide preview" %}";
display = !display;
$('#previewer').toggle();
$('#pre-collapse').text(txt);
@@ -42,21 +44,22 @@
{% block content %}
<div id="main-bar" class="headNormal">
- 修改回答 [<a href="{{ answer.question.get_absolute_url }}#{{ answer.id }}">返回</a>]
+ {% trans "Edit answer" %} [<a href="{{ answer.question.get_absolute_url }}#{{ answer.id }}">{% trans "back" %}</a>]
</div>
<div id="main-body" class="ask-body">
<div id="askform">
<form id="fmedit" action="{% url edit_answer answer.id %}" method="post" >
- <label for="id_revision" ><strong>版本:</strong></label> <br>
+ <label for="id_revision" ><strong>{% trans "revision" %}:</strong></label> <br>
{% if revision_form.revision.errors %}{{ revision_form.revision.errors.as_ul }}{% endif %}
<div style="vertical-align:middle">
- {{ revision_form.revision }} <input type="submit" style="display:none" id="select_revision" name="select_revision" value="选择版本">
+ {{ revision_form.revision }} <input type="submit" style="display:none" id="select_revision" name="select_revision" value="{% trans "select revision" %}">
</div><br>
<div class="form-item">
<div id="wmd-button-bar" class="wmd-panel"></div>
{{ form.text }}
<span class="form-error"></span>
- <div class="preview-toggle"><span id="pre-collapse" title="打开或者关闭Markdown编辑器的实时预览">预览开关</span></div>
+ <div class="preview-toggle"><span id="pre-collapse"
+ title="{% trans "Toggle the real time Markdown editor preview" %}打">{% trans "toggle preview" %}</span></div>
<div id="previewer" class="wmd-preview"></div>
<br>
</div>
@@ -67,8 +70,8 @@
{{ form.summary.help_text }}
</div>
<br>
- <input type="submit" value="现在修改" class="submit" />
- <input type="button" value="取消" class="submit" onclick="history.back(-1);" />
+ <input type="submit" value="{% trans "Save edit" %}" class="submit" />
+ <input type="button" value="{% trans "Cancel" %}" class="submit" onclick="history.back(-1);" />
<br>
<br>
</form>
@@ -77,63 +80,9 @@
{% endblock %}
{% block sidebar %}
-<div class="boxC">
- <p class="subtitle darkred">受欢迎的提问</p>
- <div>
- <ul class="list-item">
- <li>
- <b>您的问题与编程相关吗?</b>
- </li>
- <li>
- 建议您提的问题是可以被答复的,而不仅仅是可以讨论。
- </li>
- <li>
- 请详细描述您的问题。
- </li>
- <li>
- 我们推荐您使用中文描述问题,这样可以得到更多的答复机会。
- </li>
- </ul>
- <a href="/faq/" target="_blank" title="查看常见问题" style="float:right;position:relative">faq »</a>
- <br>
- </div>
-</div>
-
-<div class="boxC">
- <p class="subtitle">Markdown快速参考</p>
- <ul class="list-item">
- <li>
- *斜体* 或者 _斜体_
-
- </li>
- <li>
- **加粗** 或者 __加粗__
-
- </li>
- <li>
- <b>链接</b>:一个[例子](http://url.com/ "标题")
-
- </li>
-
- <li>
- <b>图片</b>:![alt 文本](/path/img.jpg "标题")
-
- </li>
- <li>
- 列表:
- 1. Foo
- 2. Bar
- </li>
- <li>
- 基本的HTML标签也是支持的
- </li>
- </ul>
- <a href="http://en.wikipedia.org/wiki/Markdown" target="_blank" style="float:right;position:relative">有关Markdown详细说明 »</a>
- <br>
-</div>
-
+{% include "answer_edit_tips.html" %}
{% endblock %}
{% block endjs %}
{% endblock %}
-
+<!-- end template answer_edit.html -->
diff --git a/templates/answer_edit_tips.html b/templates/answer_edit_tips.html
new file mode 100644
index 00000000..11d1d989
--- /dev/null
+++ b/templates/answer_edit_tips.html
@@ -0,0 +1,589 @@
+
+
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
+ <title>templates/answer_edit_tips.html at f38036ae08927e3a7726b45623ba81146003b8a1 from evgenyfadeev's CNPROG - GitHub</title>
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
+ <link rel="fluid-icon" href="http://github.com/fluidicon.png" title="GitHub" />
+
+
+ <link href="http://assets1.github.com/stylesheets/bundle.css?2a110633f941d64a2db1f0670742ca89122869ad" media="screen" rel="stylesheet" type="text/css" />
+
+
+
+
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
+ <script src="http://assets0.github.com/javascripts/bundle.js?2a110633f941d64a2db1f0670742ca89122869ad" type="text/javascript"></script>
+
+
+
+
+
+
+
+ <link href="http://github.com/feeds/evgenyfadeev/commits/CNPROG/f38036ae08927e3a7726b45623ba81146003b8a1" rel="alternate" title="Recent Commits to CNPROG:f38036ae08927e3a7726b45623ba81146003b8a1" type="application/atom+xml" />
+
+ <meta name="description" content="An open source Q&amp;A(question and answer) eco-system " />
+
+
+
+
+ <script type="text/javascript">
+ github_user = null
+ </script>
+ </head>
+
+
+
+ <body>
+
+
+ <div id="main">
+ <div id="header" class="">
+ <div class="site">
+ <div class="logo">
+ <a href="http://github.com"><img src="/images/modules/header/logov3.png" alt="github" /></a>
+ </div>
+
+ <div class="topsearch">
+ <form action="/search" id="top_search_form" method="get">
+ <input type="search" class="search" name="q" /> <input type="submit" value="Search" />
+ <input type="hidden" name="type" value="Everything" />
+ <input type="hidden" name="repo" value="" />
+ <input type="hidden" name="langOverride" value="" />
+ <input type="hidden" name="start_value" value="1" />
+ </form>
+ <div class="links">
+ <a href="/repositories">Browse</a> | <a href="/guides">Guides</a> | <a href="/search">Advanced</a>
+ </div>
+</div>
+
+
+ <div class="actions">
+
+ <a href="http://github.com">Home</a>
+ <a href="/plans"><b><u>Pricing and Signup</u></b></a>
+ <a href="http://github.com/popular/forked">Repositories</a>
+
+ <a href="/blog">Blog</a>
+
+ <a href="https://github.com/login">Login</a>
+ </div>
+
+ </div>
+ </div>
+
+
+
+ <div id="repo_menu">
+ <div class="site">
+ <ul>
+
+ <li class="active"><a href="http://github.com/evgenyfadeev/CNPROG/tree/">Source</a></li>
+
+ <li class=""><a href="http://github.com/evgenyfadeev/CNPROG/commits/">Commits</a></li>
+
+
+ <li class=""><a href="/evgenyfadeev/CNPROG/network">Network (15)</a></li>
+
+
+
+
+
+
+
+ <li class=""><a href="/evgenyfadeev/CNPROG/downloads">Downloads (0)</a></li>
+
+
+
+
+ <li class=""><a href="http://wiki.github.com/evgenyfadeev/CNPROG">Wiki (1)</a></li>
+
+
+ <li class=""><a href="/evgenyfadeev/CNPROG/graphs">Graphs</a></li>
+
+
+
+
+ </ul>
+ </div>
+ </div>
+
+ <div id="repo_sub_menu">
+ <div class="site">
+ <div class="joiner"></div>
+
+
+
+
+
+
+
+ </div>
+ </div>
+
+ <div class="site">
+
+
+
+
+
+
+<div id="repos">
+
+
+
+<script type="text/javascript">
+ GitHub.currentCommitRef = "f38036ae08927e3a7726b45623ba81146003b8a1"
+ GitHub.currentRepoOwner = "evgenyfadeev"
+ GitHub.currentRepo = "CNPROG"
+
+</script>
+
+
+
+ <div class="repo public" id="repo_details">
+ <div class="title">
+ <div class="path">
+ <a href="/evgenyfadeev">evgenyfadeev</a> / <b><a href="http://github.com/evgenyfadeev/CNPROG/tree">CNPROG</a></b>
+
+
+
+ <span id="edit_button" style="display:none;">
+ <a href="/evgenyfadeev/CNPROG/edit"><img alt="edit" class="button" src="http://assets0.github.com/images/modules/repos/edit_button.png?2a110633f941d64a2db1f0670742ca89122869ad" /></a>
+ </span>
+
+
+ <span id="pull_request_button" style="display:none;">
+ <a href="/evgenyfadeev/CNPROG/pull_request/" class="pull_request_button"><img alt="pull request" class="button" src="http://assets0.github.com/images/modules/repos/pull_request_button.png?2a110633f941d64a2db1f0670742ca89122869ad" /></a>
+ </span>
+
+ <span id="fast_forward_button" style="display:none;">
+ <a href="/evgenyfadeev/CNPROG/fast_forward" id="ff_button"><img alt="fast forward" class="button" src="http://assets3.github.com/images/modules/repos/fast_forward_button.png?2a110633f941d64a2db1f0670742ca89122869ad" /></a>
+ </span>
+
+ <span id="fork_button">
+ <a href="/evgenyfadeev/CNPROG/fork"><img alt="fork" class="button" src="http://assets0.github.com/images/modules/repos/fork_button.png?2a110633f941d64a2db1f0670742ca89122869ad" /></a>
+ </span>
+
+
+ <span id="watch_button">
+ <a href="/evgenyfadeev/CNPROG/toggle_watch" class="toggle_watch"><img alt="watch" class="button" src="http://assets0.github.com/images/modules/repos/watch_button.png?2a110633f941d64a2db1f0670742ca89122869ad" /></a>
+ </span>
+
+ <span id="unwatch_button" style="display:none;">
+ <a href="/evgenyfadeev/CNPROG/toggle_watch" class="toggle_watch"><img alt="watch" class="button" src="http://assets3.github.com/images/modules/repos/unwatch_button.png?2a110633f941d64a2db1f0670742ca89122869ad" /></a>
+ </span>
+
+
+ <a href="#" id="download_button" rel="evgenyfadeev/CNPROG"><img alt="download tarball" class="button" src="http://assets2.github.com/images/modules/repos/download_button.png?2a110633f941d64a2db1f0670742ca89122869ad" /></a>
+
+
+ </div>
+
+ <div class="security private_security" style="display:none">
+ <a href="#private_repo" rel="facebox"><img src="/images/icons/private.png" alt="private" /></a>
+ </div>
+
+ <div id="private_repo" class="hidden">
+ This repository is private.
+ All pages are served over SSL and all pushing and pulling is done over SSH.
+ No one may fork, clone, or view it unless they are added as a <a href="/evgenyfadeev/CNPROG/edit">member</a>.
+
+ <br/>
+ <br/>
+ Every repository with this icon (<img src="/images/icons/private.png" alt="private" />) is private.
+ </div>
+
+ <div class="security public_security" style="">
+ <a href="#public_repo" rel="facebox"><img src="/images/icons/public.png" alt="public" /></a>
+ </div>
+
+ <div id="public_repo" class="hidden">
+ This repository is public.
+ Anyone may fork, clone, or view it.
+
+ <br/>
+ <br/>
+ Every repository with this icon (<img src="/images/icons/public.png" alt="public" />) is public.
+ </div>
+
+
+
+ <div class="flexipill">
+ <a href="/evgenyfadeev/CNPROG/network">
+ <table cellpadding="0" cellspacing="0">
+ <tr><td><img alt="Forks" src="http://assets1.github.com/images/modules/repos/pills/forks.png?2a110633f941d64a2db1f0670742ca89122869ad" /></td><td class="middle"><span>14</span></td><td><img alt="Right" src="http://assets1.github.com/images/modules/repos/pills/right.png?2a110633f941d64a2db1f0670742ca89122869ad" /></td></tr>
+ </table>
+ </a>
+ </div>
+
+ <div class="flexipill">
+ <a href="/evgenyfadeev/CNPROG/watchers">
+ <table cellpadding="0" cellspacing="0">
+ <tr><td><img alt="Watchers" src="http://assets0.github.com/images/modules/repos/pills/watchers.png?2a110633f941d64a2db1f0670742ca89122869ad" /></td><td class="middle"><span>2</span></td><td><img alt="Right" src="http://assets1.github.com/images/modules/repos/pills/right.png?2a110633f941d64a2db1f0670742ca89122869ad" /></td></tr>
+ </table>
+ </a>
+ </div>
+ </div>
+
+ <div class="meta">
+ <table>
+
+ <tr>
+ <td class="label" colspan="2">
+ <em>Fork of <a href="/chagel/CNPROG/tree">chagel/CNPROG</a></em>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="label">Description:</td>
+ <td>
+ <span id="repository_description" rel="/evgenyfadeev/CNPROG/edit/update">An open source Q&amp;A(question and answer) eco-system </span>
+ <a href="#description" class="edit_link action" style="display:none;">edit</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td class="label">Homepage:</td>
+ <td>
+
+ <span id="repository_homepage" rel="/evgenyfadeev/CNPROG/edit/update">
+ <a href="http://www.cnprog.com">http://www.cnprog.com</a>
+ </span>
+ <a href="#homepage" class="edit_link action" style="display:none;">edit</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td class="label"><span id="public_clone_text" style="display:none;">Public&nbsp;</span>Clone&nbsp;URL:</td>
+
+ <td>
+ <a href="git://github.com/evgenyfadeev/CNPROG.git" class="git_url_facebox" rel="#git-clone">git://github.com/evgenyfadeev/CNPROG.git</a>
+ <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+ width="110"
+ height="14"
+ class="clippy"
+ id="clippy" >
+ <param name="movie" value="/flash/clippy.swf"/>
+ <param name="allowScriptAccess" value="always" />
+ <param name="quality" value="high" />
+ <param name="scale" value="noscale" />
+ <param NAME="FlashVars" value="text=git://github.com/evgenyfadeev/CNPROG.git">
+ <param name="bgcolor" value="#F0F0F0">
+ <param name="wmode" value="opaque">
+ <embed src="/flash/clippy.swf"
+ width="110"
+ height="14"
+ name="clippy"
+ quality="high"
+ allowScriptAccess="always"
+ type="application/x-shockwave-flash"
+ pluginspage="http://www.macromedia.com/go/getflashplayer"
+ FlashVars="text=git://github.com/evgenyfadeev/CNPROG.git"
+ bgcolor="#F0F0F0"
+ wmode="opaque"
+ />
+ </object>
+
+ <div id="git-clone" style="display:none;">
+ Give this clone URL to anyone.
+ <br/>
+ <code>git clone git://github.com/evgenyfadeev/CNPROG.git </code>
+ </div>
+ </td>
+ </tr>
+
+
+ <tr id="private_clone_url" style="display:none;">
+ <td class="label">Your Clone URL:</td>
+
+ <td>
+
+ <div id="private-clone-url">
+ <a href="git@github.com:evgenyfadeev/CNPROG.git" class="git_url_facebox" rel="#your-git-clone">git@github.com:evgenyfadeev/CNPROG.git</a>
+ <input type="text" value="git@github.com:evgenyfadeev/CNPROG.git" style="display: none;" />
+ <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+ width="110"
+ height="14"
+ class="clippy"
+ id="clippy" >
+ <param name="movie" value="/flash/clippy.swf"/>
+ <param name="allowScriptAccess" value="always" />
+ <param name="quality" value="high" />
+ <param name="scale" value="noscale" />
+ <param NAME="FlashVars" value="text=git@github.com:evgenyfadeev/CNPROG.git">
+ <param name="bgcolor" value="#F0F0F0">
+ <param name="wmode" value="opaque">
+ <embed src="/flash/clippy.swf"
+ width="110"
+ height="14"
+ name="clippy"
+ quality="high"
+ allowScriptAccess="always"
+ type="application/x-shockwave-flash"
+ pluginspage="http://www.macromedia.com/go/getflashplayer"
+ FlashVars="text=git@github.com:evgenyfadeev/CNPROG.git"
+ bgcolor="#F0F0F0"
+ wmode="opaque"
+ />
+ </object>
+
+ </div>
+
+ <div id="your-git-clone" style="display:none;">
+ Use this clone URL yourself.
+ <br/>
+ <code>git clone git@github.com:evgenyfadeev/CNPROG.git </code>
+ </div>
+ </td>
+ </tr>
+
+
+
+
+
+
+ </table>
+
+ </div>
+ </div>
+
+
+
+
+
+
+</div>
+
+
+ <div id="commit">
+ <div class="group">
+
+ <div class="envelope commit">
+ <div class="human">
+
+ <div class="message"><pre><a href="/evgenyfadeev/CNPROG/commit/f38036ae08927e3a7726b45623ba81146003b8a1">added APP_TITLE, APP_KEYWORDS and APP_DESCRIPTION</a> </pre></div>
+
+
+ <div class="actor">
+ <div class="gravatar">
+
+ <img alt="" height="30" src="http://www.gravatar.com/avatar/db77fe6f52095bd53cbd53a406e2c4b2?s=30&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-30.png" width="30" />
+ </div>
+ <div class="name"><a href="/evgenyfadeev">evgenyfadeev</a> <span>(author)</span></div>
+ <div class="date">
+ <abbr class="relatize" title="2009-07-27 17:44:51">Mon Jul 27 17:44:51 -0700 2009</abbr>
+ </div>
+ </div>
+
+
+
+ </div>
+ <div class="machine">
+ <span>c</span>ommit&nbsp;&nbsp;<a href="/evgenyfadeev/CNPROG/commit/f38036ae08927e3a7726b45623ba81146003b8a1" hotkey="c">f38036ae08927e3a7726b45623ba81146003b8a1</a><br />
+ <span>t</span>ree&nbsp;&nbsp;&nbsp;&nbsp;<a href="/evgenyfadeev/CNPROG/tree/f38036ae08927e3a7726b45623ba81146003b8a1/templates/answer_edit_tips.html" hotkey="t">92408af2557eb7b6677495a3bdf4e39c8a47af62</a><br />
+
+
+ <span>p</span>arent&nbsp;
+
+ <a href="/evgenyfadeev/CNPROG/commit/464c14f8e63cc1df409f2f72a1871d364d41b0d7" hotkey="p">464c14f8e63cc1df409f2f72a1871d364d41b0d7</a>
+
+
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+
+
+
+ <div id="path">
+ <b><a href="/evgenyfadeev/CNPROG/tree/f38036ae08927e3a7726b45623ba81146003b8a1">CNPROG</a></b> / <a href="/evgenyfadeev/CNPROG/tree/f38036ae08927e3a7726b45623ba81146003b8a1/templates">templates</a> / answer_edit_tips.html <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+ width="110"
+ height="14"
+ class="clippy"
+ id="clippy" >
+ <param name="movie" value="/flash/clippy.swf"/>
+ <param name="allowScriptAccess" value="always" />
+ <param name="quality" value="high" />
+ <param name="scale" value="noscale" />
+ <param NAME="FlashVars" value="text=templates/answer_edit_tips.html">
+ <param name="bgcolor" value="#FFFFFF">
+ <param name="wmode" value="opaque">
+ <embed src="/flash/clippy.swf"
+ width="110"
+ height="14"
+ name="clippy"
+ quality="high"
+ allowScriptAccess="always"
+ type="application/x-shockwave-flash"
+ pluginspage="http://www.macromedia.com/go/getflashplayer"
+ FlashVars="text=templates/answer_edit_tips.html"
+ bgcolor="#FFFFFF"
+ wmode="opaque"
+ />
+ </object>
+
+ </div>
+
+ <div id="files">
+ <div class="file">
+ <div class="meta">
+ <div class="info">
+ <span>100644</span>
+ <span>55 lines (50 sloc)</span>
+ <span>1.685 kb</span>
+ </div>
+ <div class="actions">
+
+ <a href="/evgenyfadeev/CNPROG/raw/f38036ae08927e3a7726b45623ba81146003b8a1/templates/answer_edit_tips.html" id="raw-url">raw</a>
+
+ <a href="/evgenyfadeev/CNPROG/blame/f38036ae08927e3a7726b45623ba81146003b8a1/templates/answer_edit_tips.html">blame</a>
+
+ <a href="/evgenyfadeev/CNPROG/commits/master/templates/answer_edit_tips.html">history</a>
+ </div>
+ </div>
+
+ <div class="data syntax">
+
+ <table cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+
+ <pre class="line_numbers">
+<span id="LID1" rel="#L1">1</span>
+<span id="LID2" rel="#L2">2</span>
+<span id="LID3" rel="#L3">3</span>
+<span id="LID4" rel="#L4">4</span>
+<span id="LID5" rel="#L5">5</span>
+<span id="LID6" rel="#L6">6</span>
+<span id="LID7" rel="#L7">7</span>
+<span id="LID8" rel="#L8">8</span>
+<span id="LID9" rel="#L9">9</span>
+<span id="LID10" rel="#L10">10</span>
+<span id="LID11" rel="#L11">11</span>
+<span id="LID12" rel="#L12">12</span>
+<span id="LID13" rel="#L13">13</span>
+<span id="LID14" rel="#L14">14</span>
+<span id="LID15" rel="#L15">15</span>
+<span id="LID16" rel="#L16">16</span>
+<span id="LID17" rel="#L17">17</span>
+<span id="LID18" rel="#L18">18</span>
+<span id="LID19" rel="#L19">19</span>
+<span id="LID20" rel="#L20">20</span>
+<span id="LID21" rel="#L21">21</span>
+<span id="LID22" rel="#L22">22</span>
+<span id="LID23" rel="#L23">23</span>
+<span id="LID24" rel="#L24">24</span>
+<span id="LID25" rel="#L25">25</span>
+<span id="LID26" rel="#L26">26</span>
+<span id="LID27" rel="#L27">27</span>
+<span id="LID28" rel="#L28">28</span>
+<span id="LID29" rel="#L29">29</span>
+<span id="LID30" rel="#L30">30</span>
+<span id="LID31" rel="#L31">31</span>
+<span id="LID32" rel="#L32">32</span>
+<span id="LID33" rel="#L33">33</span>
+<span id="LID34" rel="#L34">34</span>
+<span id="LID35" rel="#L35">35</span>
+<span id="LID36" rel="#L36">36</span>
+<span id="LID37" rel="#L37">37</span>
+<span id="LID38" rel="#L38">38</span>
+<span id="LID39" rel="#L39">39</span>
+<span id="LID40" rel="#L40">40</span>
+<span id="LID41" rel="#L41">41</span>
+<span id="LID42" rel="#L42">42</span>
+<span id="LID43" rel="#L43">43</span>
+<span id="LID44" rel="#L44">44</span>
+<span id="LID45" rel="#L45">45</span>
+<span id="LID46" rel="#L46">46</span>
+<span id="LID47" rel="#L47">47</span>
+<span id="LID48" rel="#L48">48</span>
+<span id="LID49" rel="#L49">49</span>
+<span id="LID50" rel="#L50">50</span>
+<span id="LID51" rel="#L51">51</span>
+<span id="LID52" rel="#L52">52</span>
+<span id="LID53" rel="#L53">53</span>
+<span id="LID54" rel="#L54">54</span>
+<span id="LID55" rel="#L55">55</span>
+</pre>
+ </td>
+ <td width="100%">
+
+
+ <div class="highlight"><pre><div class="line" id="LC1"><span class="c">&lt;!-- template answer_edit_tips.html --&gt;</span></div><div class="line" id="LC2">{% load i18n %}</div><div class="line" id="LC3"><span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;boxC&quot;</span><span class="nt">&gt;</span></div><div class="line" id="LC4">&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;p</span> <span class="na">class=</span><span class="s">&quot;subtitle darkred&quot;</span><span class="nt">&gt;</span>{% trans &quot;answer tips&quot; %}<span class="nt">&lt;/p&gt;</span></div><div class="line" id="LC5">&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;div&gt;</span></div><div class="line" id="LC6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;ul</span> <span class="na">class=</span><span class="s">&quot;list-item&quot;</span><span class="nt">&gt;</span></div><div class="line" id="LC7">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span> <span class="nt">&lt;b&gt;</span>{% trans &quot;please make your answer relevant to this community&quot; %}<span class="nt">&lt;/b&gt;</span></div><div class="line" id="LC8">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC9">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span></div><div class="line" id="LC10">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{% trans &quot;try to give an answer, rather than engage into a discussion&quot; %}</div><div class="line" id="LC11">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC12">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span></div><div class="line" id="LC13">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{% trans &quot;please try to provide details&quot; %}</div><div class="line" id="LC14">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC15">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span></div><div class="line" id="LC16"> {% trans &quot;be clear and concise&quot; %}</div><div class="line" id="LC17">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC18">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/ul&gt;</span></div><div class="line" id="LC19">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;/faq/&quot;</span> <span class="na">target=</span><span class="s">&quot;_blank&quot;</span> <span class="na">title=</span><span class="s">&quot;{% trans &quot;</span><span class="na">see</span> <span class="na">frequently</span> <span class="na">asked</span> <span class="na">questions</span><span class="err">&quot;</span> <span class="err">%}&quot;</span> <span class="na">style=</span><span class="s">&quot;float:right;position:relative&quot;</span><span class="nt">&gt;</span>faq »<span class="nt">&lt;/a&gt;</span></div><div class="line" id="LC20">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;br&gt;</span> </div><div class="line" id="LC21">&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/div&gt;</span></div><div class="line" id="LC22"><span class="nt">&lt;/div&gt;</span></div><div class="line" id="LC23">&nbsp;</div><div class="line" id="LC24"><span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;boxC&quot;</span><span class="nt">&gt;</span></div><div class="line" id="LC25">&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;p</span> <span class="na">class=</span><span class="s">&quot;subtitle&quot;</span><span class="nt">&gt;</span>{% trans &quot;Markdown tips&quot; %}<span class="nt">&lt;/p&gt;</span></div><div class="line" id="LC26">&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;ul</span> <span class="na">class=</span><span class="s">&quot;list-item&quot;</span><span class="nt">&gt;</span></div><div class="line" id="LC27">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span></div><div class="line" id="LC28">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{% trans &quot;*italic* or __italic__&quot; %}</div><div class="line" id="LC29">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC30">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span></div><div class="line" id="LC31"> {% trans &quot;**bold** or __bold__&quot; %}</div><div class="line" id="LC32">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC33">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span></div><div class="line" id="LC34">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;b&gt;</span>{% trans &quot;link&quot; %}<span class="nt">&lt;/b&gt;</span>:[{% trans &quot;text&quot; %}](http://url.com/ &quot;{% trans &quot;title&quot; %}&quot;)</div><div class="line" id="LC35">&nbsp;</div><div class="line" id="LC36">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC37">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div class="line" id="LC38">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span></div><div class="line" id="LC39">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;b&gt;</span>{% trans &quot;image&quot; %}<span class="nt">&lt;/b&gt;</span>:![alt {% trans &quot;text&quot; %}](/path/img.jpg &quot;{% trans &quot;title&quot; %}&quot;)</div><div class="line" id="LC40">&nbsp;</div><div class="line" id="LC41">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC42">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span></div><div class="line" id="LC43"> {% trans &quot;numbered list:&quot; %}</div><div class="line" id="LC44">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. Foo</div><div class="line" id="LC45">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. Bar</div><div class="line" id="LC46">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC47">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li&gt;</span></div><div class="line" id="LC48"> {% trans &quot;basic HTML tags are also supported&quot; %}</div><div class="line" id="LC49">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class="line" id="LC50">&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/ul&gt;</span></div><div class="line" id="LC51">&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;http://en.wikipedia.org/wiki/Markdown&quot;</span> <span class="na">target=</span><span class="s">&quot;_blank&quot;</span> <span class="na">style=</span><span class="s">&quot;float:right;position:relative&quot;</span><span class="nt">&gt;</span>{% trans &quot;learn more about Markdown&quot; %} »<span class="nt">&lt;/a&gt;</span></div><div class="line" id="LC52">&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;br&gt;</span> </div><div class="line" id="LC53"><span class="nt">&lt;/div&gt;</span></div><div class="line" id="LC54"><span class="c">&lt;!-- end template answer_edit_tips.html --&gt;</span></div><div class="line" id="LC55">&nbsp;</div></pre></div>
+
+ </td>
+ </tr>
+ </table>
+
+ </div>
+
+
+ </div>
+ </div>
+
+
+
+
+ </div>
+
+
+
+ <div class="push"></div>
+ </div>
+
+ <div id="footer">
+ <div class="site">
+ <div class="info">
+ <div class="links">
+ <a href="http://github.com/blog"><b>Blog</b></a> |
+ <a href="http://support.github.com/">Support</a> |
+ <a href="http://github.com/training">Training</a> |
+ <a href="http://github.com/contact">Contact</a> |
+ <a href="http://develop.github.com">API</a> |
+ <a href="http://twitter.com/github">Status</a> |
+ <a href="http://twitter.com/github">GitHub on Twitter</a> |
+ <a href="http://github.com/guides/home">Help</a>
+
+ </div>
+ <div class="company">
+ <span id="_rrt" title="1.62186s from xc88-s00009">GitHub</span>&trade;
+ is <a href="http://logicalawesome.com/">Logical Awesome</a> &copy;2009 | <a href="/site/terms">Terms of Service</a> | <a href="/site/privacy">Privacy Policy</a>
+ </div>
+ </div>
+ <div class="sponsor">
+ <a href="http://engineyard.com"><img src="/images/modules/footer/ey-rubyhosting.png" alt="Engine Yard" /></a>
+ </div>
+ </div>
+ </div>
+
+ <div id="coming_soon" style="display:none;">
+ This feature is coming soon. Sit tight!
+ </div>
+
+
+ <script type="text/javascript">
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script type="text/javascript">
+ var pageTracker = _gat._getTracker("UA-3769691-2");
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ </script>
+
+
+ </body>
+</html>
+
diff --git a/templates/ask.html b/templates/ask.html
index ecd176bc..1b00a701 100644
--- a/templates/ask.html
+++ b/templates/ask.html
@@ -1,11 +1,13 @@
+<!-- template ask.html -->
{% extends "base.html" %}
-{% block title %}{% spaceless %}我要提问{% endspaceless %}{% endblock %}
+{% load i18n %}
+{% block title %}{% spaceless %}{% trans "Ask a question" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type='text/javascript' src='/content/js/com.cnprog.editor.js'></script>
- <script type='text/javascript' src='/content/js/com.cnprog.post.pack.js'></script>
+ <script type='text/javascript' src='/content/js/com.cnprog.post.js'></script>
<script type='text/javascript' src='/content/js/jquery.validate.pack.js'></script>
- <script type='text/javascript' src='/content/js/wmd/showdown-min.js'></script>
- <script type='text/javascript' src='/content/js/wmd/wmd-min.js'></script>
+ <script type='text/javascript' src='/content/js/wmd/showdown.js'></script>
+ <script type='text/javascript' src='/content/js/wmd/wmd.js'></script>
<link rel="stylesheet" type="text/css" href="/content/js/wmd/wmd.css" />
<script type="text/javascript">
$().ready(function(){
@@ -18,11 +20,12 @@
captureLength: 5, callback: lanai.highlightSyntax});
//toggle preview of editor
+ //todo remove copy-paste
var display = true;
- var txt = "[禁用预览]";
+ var txt = "[{% trans "hide preview" %}]";
$('#pre-collapse').text(txt);
$('#pre-collapse').bind('click', function(){
- txt = display ? "[启用预览]" : "[禁用预览]";
+ txt = display ? "[{% trans "show preview" %}]" : "[{% trans "hide preview" %}]";
display = !display;
$('#previewer').toggle();
$('#pre-collapse').text(txt);
@@ -54,7 +57,7 @@
{% block content %}
<div id="main-bar" class="headNormal">
- 我要提问
+ {% trans "Ask a question" %}
</div>
<div id="main-body" class="ask-body">
<div id="askform">
@@ -75,7 +78,7 @@
<table width="100%">
<tr>
<td>
- <span id="pre-collapse" title="打开或者关闭Markdown编辑器的实时预览">预览开关</span>
+ <span id="pre-collapse" title="{% trans "Toggle the real time Markdown editor preview" %}">{% trans "toggle preview" %}</span>
</td>
<td style="text-align:right;">
{{ form.wiki }} <span style="font-weight:normal;cursor:help" title="{{form.wiki.help_text}}">{{ form.wiki.label_tag }} </span>
@@ -100,10 +103,10 @@
<table id="login-box">
<tr>
<td style="vertical-align:middle;">
- <strong>使用 <a href="http://openid.net/" title="了解更多有关OpenID的信息">OpenID</a> 登录:</strong><br>
+ <strong>{% trans "Use" %} <a href="http://openid.net/" title="{% trans "learn more about OpenID" %}">OpenID</a> {% trans "Login" %}:</strong><br>
{{ form.openid }}
<div class="title-desc">
- 获取您自己的<a href="https://www.myopenid.com/" target=="_blank">OpenID</a>。
+ {% trans "Get your own "%} <a href="https://www.myopenid.com/" target=="_blank">OpenID</a>。
</div>
</td>
<td style="vertical-align:middle; padding: 0px 40px 0px 40px">
@@ -111,17 +114,17 @@
<div style="width:1px; border-left:solid 1px #999; height:8em; margin:auto;"></div>
</td>
<td style="vertical-align:middle;">
- <strong>您的大名:</strong><br>
+ <strong>{% trans "User name" %}:</strong><br>
{{ form.user }}
<p>
- <strong>电子邮件:(不会公开显示)</strong><br>
+ <strong>{% trans "Email: (won't be shown to anyone)" %}:</strong><br>
{{ form.email }}
</p>
</td>
</tr>
</table>
{% endif %}
- <input type="submit" value="现在提问" class="submit" />
+ <input type="submit" value="{% trans "Ask your question" %}" class="submit" />
<br><br>
</form>
</div>
@@ -129,63 +132,9 @@
{% endblock %}
{% block sidebar %}
-<div class="boxC">
- <p class="subtitle darkred">受欢迎的提问</p>
- <div>
- <ul class="list-item">
- <li>
- <b>您的问题与编程相关吗?</b>
- </li>
- <li>
- 建议您提的问题是可以被答复的,而不仅仅是可以讨论。
- </li>
- <li>
- 请详细描述您的问题。
- </li>
- <li>
- 我们推荐您使用中文描述问题,这样可以得到更多的答复机会。
- </li>
- </ul>
- <a href="/faq/" target="_blank" title="查看常见问题" style="float:right;position:relative">faq »</a>
- <br>
- </div>
-</div>
-
-<div class="boxC">
- <p class="subtitle">Markdown快速参考</p>
- <ul class="list-item">
- <li>
- *斜体* 或者 _斜体_
-
- </li>
- <li>
- **加粗** 或者 __加粗__
-
- </li>
- <li>
- <b>链接</b>:一个[例子](http://url.com/ "标题")
-
- </li>
-
- <li>
- <b>图片</b>:![alt 文本](/path/img.jpg "标题")
-
- </li>
- <li>
- 列表:
- 1. Foo
- 2. Bar
- </li>
- <li>
- 基本的HTML标签也是支持的
- </li>
- </ul>
- <a href="http://en.wikipedia.org/wiki/Markdown" target="_blank" style="float:right;position:relative">有关Markdown详细说明 »</a>
- <br>
-</div>
-
+{% include "question_edit_tips.html" %}
{% endblock %}
{% block endjs %}
{% endblock %}
-
+<!-- end template ask.html -->
diff --git a/templates/authopenid/changeemail.html b/templates/authopenid/changeemail.html
index a6c53a64..99984b3f 100644
--- a/templates/authopenid/changeemail.html
+++ b/templates/authopenid/changeemail.html
@@ -1,9 +1,5 @@
{% extends "base_content.html" %}
{% load i18n %}
-
-
-
-
{% block content %}
<div id="main-bar" class="">
<h3>
diff --git a/templates/authopenid/complete.html b/templates/authopenid/complete.html
index fd243f28..28c38a04 100644
--- a/templates/authopenid/complete.html
+++ b/templates/authopenid/complete.html
@@ -1,19 +1,19 @@
{% extends "base.html" %}
+{% load i18n %}
{% block head %}{% endblock %}
-{% block title %}{% spaceless %}绑定OpenID{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Connect your OpenID with this site" %}{% endspaceless %}{% endblock %}
{% block content %}
<div id="main-bar" class="headNormal">
- 绑定OpenID帐号
-
+ {% trans "Connect your OpenID with your account on this site" %}
</div>
<p id="completetxt" >
- <h3>您的OpenID帐号已经验证通过! 请完成最后一步 - 绑定OpenID到您的帐号。</h3>
- <p style="display:none">输入您的新帐号或者指定已经存在的帐号。</p>
+ <h3>{% trans "Your OpenID is accepted. Please complete this to finish registration." %}</h3>
+ <p style="display:none">{% trans "This account already exists, please use another." %}</p>
</p>
{% if form1.errors %}
<p class="errors">
- <span class="big">请注意以下错误:</span><br>
+ <span class="big">{% trans "Sorry, looks like we have some errors:" %}</span><br>
<ul class="error-list">
{% if form1.username.errors %}
<li><span class="error">{{ form1.username.errors|join:", " }}</span></li>
@@ -26,7 +26,7 @@
{% endif %}
{% if form2.errors %}
<p class="errors">
- <span class="big">请注意以下错误:</span><br>
+ <span class="big">{% trans "Sorry, looks like we have some errors:" %}</span><br>
<ul class="error-list">
{% if form2.username.errors %}
<li><span class="error">{{ form2.username.errors|join:", " }}</span></li>
@@ -42,10 +42,10 @@
<form name="fregister" action="{% url user_register %}" method="POST">
{{ form.next }}
<fieldset style="padding:10px">
- <legend class="big">新帐号</legend>
- <div class="form-row"><label for="id_username">用户名(<i>在社区显示友好名称,不可更改</i>)</label><br />{{ form1.username }}</div>
- <div class="form-row"><label for="id_email">电子邮件(<i>用于头像显示服务</i>)</label><br />{{ form1.email }}</div>
- <div class="submit-row"><input type="submit" class="submit" name="bnewaccount" value="创建帐号"></div>
+ <legend class="big">{% trans "New account" %}</legend>
+ <div class="form-row"><label for="id_username">{% trans "User name (<i>will be shown to others, cannot be modified</i>)" %}</label><br />{{ form1.username }}</div>
+ <div class="form-row"><label for="id_email">{% trans "Email (<i>not shared with anyone</i>)" %}</label><br />{{ form1.email }}</div>
+ <div class="submit-row"><input type="submit" class="submit" name="bnewaccount" value="{% trans "create account" %}"></div>
</fieldset>
</form>
</div>
@@ -53,14 +53,15 @@
<form name="fverify" action="{% url user_register %}" method="POST">
{{ form.next }}
<fieldset style="padding:10px">
- <legend class="big">已经存在的用户</legend>
- <div class="form-row"><label for="id_username">用户名</label><br />{{ form2.username }}</div>
- <div class="form-row"><label for="id_passwordl">密码</label><br />{{ form2.password }}</div>
- <div class="submit-row"><input type="submit" class="submit" name="bverify" value="确认"> <a href="">忘记密码?</a></div>
+ <legend class="big">{% trans "Existing account" %}</legend>
+ <div class="form-row"><label for="id_username">{% trans "user name" %}</label><br />{{ form2.username }}</div>
+ <div class="form-row"><label for="id_passwordl">{% trans "password" %}</label><br />{{ form2.password }}</div>
+ <!--todo double check translation from chinese 确认 = "Register" -->
+ <div class="submit-row">
+ <input type="submit" class="submit" name="bverify" value="{% trans "Register" %}">
+ <a href="">{% trans "Forgot your password?" %}</a>
+ </div>
</fieldset>
</form>
</div>
{% endblock %}
-
-
-
diff --git a/templates/authopenid/sendpw.html b/templates/authopenid/sendpw.html
index 237a5cf6..a9488c4c 100644
--- a/templates/authopenid/sendpw.html
+++ b/templates/authopenid/sendpw.html
@@ -1,17 +1,18 @@
{% extends "base.html" %}
-{% block title %}{% spaceless %}发送新密码{% endspaceless %}{% endblock %}
+{% load i18n %}
+{% block title %}{% spaceless %}{% trans "Send new password" %}{% endspaceless %}{% endblock %}
{% block content %}
<div id="main-bar" class="">
- <h3 >发送新密码</h3>
+ <h3>{% trans "Send new password" %}</h3>
</div>
<div class="paragraph">
-丢失了您的密码? 你可以在这里重设密码。<br>
-请输入用户名,新的密码会发送到你注册时候填写的电子邮件。
+{% trans "Lost your password? No problem - here you can reset it." %}<br>
+{% trans "Please enter your username below and new password will be sent to your registered e-mail" %}
</div>
{% if form.errors %}
-<p class="errors"><span class="big">请注意以下错误:</span><br>
+<p class="errors"><span class="big">{% "Sorry, looks like we have some errors:" %}</span><br>
{% if form.username.errors %}
<span class="error">{{ form.username.errors|join:", " }}</span>
{% endif %}
@@ -23,11 +24,11 @@
<div class="aligned">
<form action="." method="post" accept-charset="utf-8">
- <div id="form-row"><label for="id_username">用户名: </label>{{ form.username }}</div>
+ <div id="form-row"><label for="id_username">{% trans "User name" %}:</label>{{ form.username }}</div>
- <p style="padding-top:10px"><input type="submit" value="重设密码"> <a href="{% url user_signin %}">返回登录</a></p>
+ <p style="padding-top:10px"><input type="submit" value="{% trans "Reset password" %}"> <a href="{% url user_signin %}">{% trans "return to login" %}</a></p>
</form>
- <span class="darkred">注意: 新的密码只有您在激活邮件中的链接后才会被激活。</span>
+ <span class="darkred">{% trans "Note: your new password will be activated only after you click the activation link in the email message" %}</span>
</div>
{% endblock %}
diff --git a/templates/authopenid/settings.html b/templates/authopenid/settings.html
index c765b989..ffd5dd8f 100644
--- a/templates/authopenid/settings.html
+++ b/templates/authopenid/settings.html
@@ -17,7 +17,7 @@
{% block content %}
<div id="main-bar">
- <h3><strong>{{ request.user.username }}账户设置</strong></h3>
+ <h3><strong>{{ request.user.username }} {% trans "Profile" %}</strong></h3>
</div>
<div id="settings-options">
{% if msg %}
@@ -25,16 +25,16 @@
{% endif %}
<dl class="list-item">
- <dt>» <a href="{% url user_changepw %}">修改密码</a></dt>
+ <dt>» <a href="{% url user_changepw %}">{% trans "Change password" %}</a></dt>
<dd>{% trans "Give your account a new password." %}</dd>
- <dt>» <a href="{% url user_changeemail %}">更换电子邮件</a></dt>
+ <dt>» <a href="{% url user_changeemail %}">{% trans "Change email " %}</a></dt>
<dd>{% trans "Add or update the email address associated with your account." %}</dd>
{% if is_openid %}
- <dt>» <a href="{% url user_changeopenid %}">更换OpenID地址</a></dt>
+ <dt>» <a href="{% url user_changeopenid %}">{% trans "Change OpenID %}</a></dt>
<dd>{% trans "Change openid associated to your account" %}</dd>
{% endif %}
- <dt>» <a href="{% url user_delete %}">删除帐号</a></dt>
+ <dt>» <a href="{% url user_delete %}">{% trans "Delete account" %}</a></dt>
<dd>{% trans "Erase your username and all your data from website" %}</dd>
</dl>
</div>
diff --git a/templates/authopenid/signin.html b/templates/authopenid/signin.html
index 9c5511f2..aff2f06f 100644
--- a/templates/authopenid/signin.html
+++ b/templates/authopenid/signin.html
@@ -1,5 +1,6 @@
{% extends "base.html" %}
-{% block title %}{% spaceless %}用户登录{% endspaceless %}{% endblock %}
+{% load i18n %}
+{% block title %}{% spaceless %}{% trans "User login" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript" src="/content/js/jquery.openid.js?"></script>
<script type='text/javascript' src='/content/js/jquery.validate.pack.js'></script>
@@ -12,26 +13,26 @@
{% endblock %}
{% block content %}
<div class="headNormal">
- 用户登录
+ {% trans "User login" %}
</div>
<div class="login">
<form name="openid_form" action="{% url user_signin %}" method="post">
{{ form2.next }}
- <p style="display:none">CNProg支持<b>两种</b>登录模式。您可以使用帐号、密码登录,或者使用OpenID登录。</p>
+ <p style="display:none">{% trans "we support two login modes" %}</p>
{% if msg %}
<p class="warning">{{ msg }}</p>
{% endif %}
<fieldset class="fieldset">
- <legend ><strong>使用OpenID登录</strong></legend>
+ <legend ><strong>{% trans "Login with your OpenID" %}</strong></legend>
<div id="openid_choice">
- <p>请选择您的帐号类型并完成正确的OpenID地址(如:替换“{username}”为您的对应帐号):</p>
+ <p>{% trans "select openid provider" %}</p>
<div id="openid_btns">
</div>
+ <br><br><br>
+ <p>{% trans "verify openid link and login" %}</p>
</div>
- <br>
- <br><br>
<p>
- {{ form2.openid_url }} <input id="bsignin" name="bsignin" type="submit" value="登录" class="openid-login-submit" />
+ {{ form2.openid_url }} <input id="bsignin" name="bsignin" type="submit" value="{% trans "Login" %}" class="openid-login-submit" />
</p>
</fieldset>
</form>
@@ -39,7 +40,7 @@
<br>
{% if form1.errors %}
<p class="errors">
- <span class="big">请注意以下错误:</span><br>
+ <span class="big">{% trans "Sorry, looks like we have some errors:" %}</span><br>
<ul class="error-list">
{% if form1.username.errors %}
<li><span class="error">{{ form1.username.errors|join:", " }}</span></li>
@@ -54,11 +55,12 @@
<form name="fauth" action="{% url user_signin %}" method="post">
{{ form1.next }}
<fieldset class="fieldset" >
- <legend class="big">使用帐号密码登录</legend>
- <div class="form-row"><label for="id_username">用户名:</label><br />{{ form1.username }}</div>
- <div class="form-row"><label for="id_password">密码:</label><br />{{ form1.password }}</div>
- <div class="submit-row"><input type="submit" class="submit" name="blogin" value="登录"> <a href="">忘记密码?</a> <a href="">注册新帐号</a></div>
-
+ <legend class="big">{% trans "Use login name and password" %}</legend>
+ <div class="form-row"><label for="id_username">{% trans "Login name" %}:</label><br />{{ form1.username }}</div>
+ <div class="form-row"><label for="id_password">{% trans "Password" %}:</label><br />{{ form1.password }}</div>
+ <div class="submit-row"><input type="submit" class="submit" name="blogin" value="{% trans "Login" %}">
+ <a href="">{% trans "Forgot your password?" %}</a>
+ <a href="">{% trans "Create new acccount" %}</a></div>
</fieldset>
</form>
</div>
@@ -67,28 +69,25 @@
{% block sidebar %}
<div class="boxC">
- <h3 class="subtitle">为什么需要OpenID登录?</h3>
+ <h3 class="subtitle">{% trans "Why use OpenID?" %}</h3>
<p>
<ul class="list-item">
<li>
- 构建在OpenID网络认证上的本系统,不需要你注册新的帐号,即可使用我们系统的所有功能
+ {% trans "with openid it is easier" %}
</li>
<li>
- 用同一个帐号可登录互联网所有激活OpenID的网站
-
+ {% trans "reuse openid" %}
</li>
<li>
- 全世界有1.6亿OpenID帐号,和10,000个支持OpenID的站点
-
+ {% trans "openid is widely adopted" %}
</li>
<li>
- OpenID是有开放标准,并且有相关的基金组织提供支持
-
+ {% trans "openid is supported open standard" %}
</li>
</ul>
- <a href="http://openid.net/what/" target="_blank" style="float:right;position:relative">查看更多 »</a><br>
- <a href="http://openid.net/get/" target="_blank" style="float:right;position:relative">获取OpenID »</a>
+ <a href="http://openid.net/what/" target="_blank" style="float:right;position:relative">{% trans "Find out more" %} »</a><br>
+ <a href="http://openid.net/get/" target="_blank" style="float:right;position:relative">{% trans "Get OpenID" %} »</a>
</p>
<br>
</div>
diff --git a/templates/authopenid/signup.html b/templates/authopenid/signup.html
index e51544f7..a4460aa3 100644
--- a/templates/authopenid/signup.html
+++ b/templates/authopenid/signup.html
@@ -1,18 +1,18 @@
{% extends "base.html" %}
-{% block title %}{% spaceless %}注册帐号{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Signup" %}{% endspaceless %}{% endblock %}
{% block content %}
<div id="main-bar" class="">
- <h3 >注册帐号</h3>
+ <h3 >{% trans "Signup" %}</h3>
</div>
<div class="jointxt">
- <p>我们支持两种注册方式,你可以使用常规的用户名、密码方式注册,或者<a href="{% url user_signin %}">使用OpenID帐号注册</a>。</p>
+ <p>{% trans "We support two types of user registration: conventional username/password, and" %} <a href="{% url user_signin %}">{% trans "the OpenID method" %}</a>.</p>
{% if form.errors %}
<p class="errors">
- <span class="big">请注意以下错误:</span><br>
+ <span class="big">{% trans "Sorry, looks like we have some errors" %}</span><br>
<ul class="error-list">
{% if form.username.errors %}
<li><span class="error">{{ form.username.errors|join:", " }}</span></li>
@@ -30,22 +30,23 @@
</div>
<form action="{% url user_signup %}" method="post" accept-charset="utf-8">
<fieldset class="fieldset">
- <legend class="big">常规注册</legend>
- <div class="form-row"><label for="id_username">选择一个用户名:</label><br>{{ form.username }}</div>
+ <legend class="big">{% trans "Conventional registration" %}</legend>
+ <div class="form-row"><label for="id_username">{% trans "choose a user name" %}:</label><br>{{ form.username }}</div>
- <div class="form-row"><label for="id_email">您的电子邮件地址:</label><br>{{ form.email }}</div>
- <div class="form-row"><label for="id_password1">密码:</label><br />{{ form.password1 }}</div>
- <div class="form-row"><label for="id_password2">确认密码:</label><br>{{ form.password2 }}</div>
- <div class="submit-row"><input type="submit" class="submit" value="注册" > <a href="{% url user_signin %}">返回登录</a></div>
+ <div class="form-row"><label for="id_email">{% trans "your email address" %}:</label><br>{{ form.email }}</div>
+ <div class="form-row"><label for="id_password1">{% trans "choose password" %}:</label><br />{{ form.password1 }}</div>
+ <div class="form-row"><label for="id_password2">{% trans "retype password" %}:</label><br>{{ form.password2 }}</div>
+ <div class="submit-row"><input type="submit" class="submit" value="{% trans "login" %}" >
+ <a href="{% url user_signin %}">{% trans "back to login" %}</a></div>
</fieldset>
<br >
</form>
<br >
<div style="display:none">
- <h2 class="signup">使用OpenID注册</h2>
+ <h2 class="signup">{% trans "Register with your OpenID" %}</h2>
<form name="fopenid" action="{% url user_signin %}" method="post">
<div class="form-row">{{ form2.openid_url }}</div>
- <div class="submit-row "><input name="bsignin" class="submit" type="submit" value="使用OpenID登录"></div>
+ <div class="submit-row "><input name="bsignin" class="submit" type="submit" value="{% trans "Login with your OpenID" %}"></div>
</form>
</div>
{% endblock %}
diff --git a/templates/badge.html b/templates/badge.html
index 4ffedfa6..d0906918 100644
--- a/templates/badge.html
+++ b/templates/badge.html
@@ -1,7 +1,9 @@
+<!-- template badge.html -->
{% extends "base_content.html" %}
+{% load i18n %}
{% load extra_tags %}
{% load humanize %}
-{% block title %}{% spaceless %}{{ badge.name }}-奖牌{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{{ badge.name }} - {% trans "Badge" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
$().ready(function(){
@@ -12,7 +14,7 @@
{% endblock %}
{% block content %}
<div id="main-bar" class="headNormal">
- 奖牌
+ {% trans "Badge" %}
</div>
<div id="main-body" style="width:100%;margin-bottom:20px">
<p>
@@ -21,7 +23,7 @@
<div>
{% if badge.awarded_count %}
<p style="float:left"><span class="count">{{ awards|length|intcomma }}</span>
- <strong>用户已被授予该奖牌:</strong></p>
+ <strong>{% trans "The users have been awarded with badges:" %}</strong></p>
{% endif %}
</div>
<div id="award-list" style="clear:both;margin-left:20px;line-height:25px;">
@@ -32,7 +34,4 @@
</div>
{% endblock %}
-
-
-
-
+<!-- end template badge.html -->
diff --git a/templates/badges.html b/templates/badges.html
index e8033f13..ef0a5451 100644
--- a/templates/badges.html
+++ b/templates/badges.html
@@ -2,7 +2,7 @@
{% load extra_tags %}
{% load humanize %}
{% load i18n %}
-{% block title %}{% spaceless %}{% trans "Badges" %}{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Badges summary" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
$().ready(function(){
@@ -13,12 +13,11 @@
{% endblock %}
{% block content %}
<div class="headlineA">
- <span class="headMedals">{% trans "Badges"%}</span>
+ <span class="headMedals">{% trans "Badges" %}</span>
</div>
<div id="main-body" style="width:100%">
<p>
- 提出问题,给予回答,投出你的票 - CNProg 会针对你在社区的表现,授予你各类奖牌。<br>
- 这里列出社区所有的奖牌,以及到目前为此,每个奖牌被授予的用户人数。
+ {% trans "Community gives you awards for your questions, answers and votes. Below is the list of available badges and number of times each type of badge has been awarded." %}
</p>
<br>
<div id="medalList">
@@ -45,29 +44,30 @@
{% block sidebar %}
<div class="boxB">
- <h3>社区奖牌</h3>
+ <h3>{% trans "Community badges" %}</h3>
<div class="body">
<p>
- <a style="cursor:default;" title="金牌:十分罕见之最高荣耀" class="medal"><span class="badge1">&#9679;</span>&nbsp;金牌</a>
+ <a style="cursor:default;" title="gold badge: the highest honor and is very rare" class="medal"><span class="badge1">&#9679;</span>&nbsp;{% trans "gold" %}</a>
</p>
<p>
- 金牌是十分罕见的。你不仅要参与社区的提问、回答、投票等活动,而且需要有高深的知识和能力才能获得。获得金牌意味着你在某个层次上已经达到了顶峰。
+ {% trans "Gold badge is very rare. To obtain it you have to show profound knowledge and ability in addition to actively participating in the community. Gold badge is the highest award in this community." %}
</p>
<p>
- <a style="cursor:default;" title="银牌:偶尔颁发之优质奖章" class="medal"><span class="badge2">&#9679;</span>&nbsp;银牌</a>
+ <a style="cursor:default;"
+ title="silver badge: occasionally awarded for the very high quality contributions"
+ class="medal"><span class="badge2">&#9679;</span>&nbsp;{% trans "silver" %}</a>
</p>
<p>
- 银牌需要经过长时间的奋斗才能获得。它是不同寻常的荣誉,只要你付出足够的努力就会得到。
+ {% trans "Obtaining silver badge requires significant patience. If you got one, you've very significantly contributed to this community" %}
</p>
<p>
- <a style="cursor:default;" title="铜牌:时常授予之特殊荣誉" class="medal"><span class="badge3">&#9679;</span>&nbsp;铜牌</a>
+ <a style="cursor:default;" title="{% trans "bronze badge: often given as a special honor" %}" class="medal">
+ <span class="badge3">&#9679;</span>&nbsp;{% trans "bronze" %}</a>
</p>
<p>
- 铜牌会在你活跃于社区时产生,它相对容易获得,但也是一种特殊的荣誉。
+ {% trans "If you are active in this community, you will get this medal - still it is a special honor." %}
</p>
</div>
</div>
{% endblock %}
-
-
-
+<!-- end template badges.html -->
diff --git a/templates/base.html b/templates/base.html
index 90b40612..bf24c840 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -1,6 +1,7 @@
-{% load extra_filters %}
-{% load i18n %}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!-- template base.html -->
+{% load extra_filters %}
+{% load i18n %}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{% block title %}{% endblock %} - {{ APP_TITLE }}</title>
@@ -8,20 +9,26 @@
{% block meta %}{% endblock %}
{% endspaceless %}
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <meta name="verify-v1" content="55uGNnQVJW8p1bbXeF/Xbh9I7nZBM/wLhRz6N/I1kkA=" />
+ <meta name="verify-v1" content="{{verify_v1_code}}" />
<link rel="shortcut icon" href="/content/images/favicon.ico" >
<link href="/content/style/style.css" rel="stylesheet" type="text/css" />
- <script type='text/javascript' src='/content/js/com.cnprog.utils.js'></script>
<script src="http://www.google.com/jsapi"></script>
<script>google.load("jquery", "1.2.6");</script>
- <script type="text/javascript">
+ <script type="text/javascript">
+ var i18nLang = 'en';
+ </script>
+ <script type='text/javascript' src='/content/js/com.cnprog.i18n.js'></script>
+ <script type='text/javascript' src='/content/js/jquery.i18n.js'></script>
+ <script type='text/javascript' src='/content/js/com.cnprog.utils.js'></script>
+ <!--<script type="text/javascript">
var uservoiceJsHost = ("https:" == document.location.protocol) ? "https://uservoice.com" : "http://cdn.uservoice.com";
document.write(unescape("%3Cscript src='" + uservoiceJsHost + "/javascripts/widgets/tab.js' type='text/javascript'%3E%3C/script%3E"))
</script>
<script type="text/javascript">
UserVoice.Tab.show({
- key: 'cnprog',
- host: 'cnprog.uservoice.com',
+ //EDIT!!!
+ key: 'key',
+ host: 'where.uservoice.com',
forum: 'general',
alignment: 'left', /* 'left', 'right' */
background_color:'#777',
@@ -29,7 +36,8 @@
hover_color: '#06C',
lang: 'en' /* 'en', 'de', 'nl', 'es', 'fr' */
})
- </script>
+ </script>-->
+ <!-- todo move this to settings -->
{% with request.user.get_messages as messages%}
{% if messages %}
<style type="text/css">
@@ -50,9 +58,9 @@
<body>
<div class="notify" style="display:none">
<span>{% if request.user.get_messages %}
- {% trans "Congratulations! You have new badges: " %}{% for message in request.user.get_messages %}
- <font class="darkred">{{ message }}</font>, {% endfor %}{% trans "go to see" %}
- <a href="{{ request.user.get_profile_url }}">{% trans "Profile" %}</a>{% endif %}</span>
+ {% trans "congratulations, community gave you a badge" %}: {% for message in request.user.get_messages %}
+ <font class="darkred">{{ message }}</font>, {% endfor %}查看
+ <a href="{{ request.user.get_profile_url }}">{% trans "profile" %}</a>{% endif %}</span>
<a class="close-notify" onclick="notify.close(true)">&times;</a>
</div>
{% include "header.html" %}
diff --git a/templates/base_content.html b/templates/base_content.html
index 6dec6cae..39627a0e 100644
--- a/templates/base_content.html
+++ b/templates/base_content.html
@@ -10,17 +10,24 @@
{% spaceless %}
{% block forestyle %}{% endblock %}
{% endspaceless %}
- <script type='text/javascript' src='/content/js/com.cnprog.utils.js'></script>
<script src="http://www.google.com/jsapi"></script>
- <script>google.load("jquery", "1.2.6");</script>
- <script type="text/javascript">
+ <script>google.load("jquery", "1.2.6");</script>
+ <script type="text/javascript">
+ var i18nLang = 'en';
+ </script>
+ <script type='text/javascript' src='/content/js/com.cnprog.i18n.js'></script>
+ <script type='text/javascript' src='/content/js/jquery.i18n.js'></script>
+ <script type='text/javascript' src='/content/js/com.cnprog.utils.js'></script>
+
+ <!-- <script type="text/javascript">
var uservoiceJsHost = ("https:" == document.location.protocol) ? "https://uservoice.com" : "http://cdn.uservoice.com";
document.write(unescape("%3Cscript src='" + uservoiceJsHost + "/javascripts/widgets/tab.js' type='text/javascript'%3E%3C/script%3E"))
</script>
<script type="text/javascript">
UserVoice.Tab.show({
- key: 'cnprog',
- host: 'cnprog.uservoice.com',
+ //EDIT!!!
+ key: 'uservoicekey',
+ host: 'where.uservoice.com',
forum: 'general',
alignment: 'left', /* 'left', 'right' */
background_color:'#777',
@@ -28,7 +35,8 @@
hover_color: '#06C',
lang: 'en' /* 'en', 'de', 'nl', 'es', 'fr' */
})
- </script>
+ </script>-->
+ <!-- todo move this to settings-->
{% with request.user.get_messages as messages%}
{% if messages %}
@@ -49,10 +57,10 @@
<body>
<div class="notify" style="display:none">
<span>{% if request.user.get_messages %}
- {% trans "Congratulations! You have new badges: " %}{% for message in request.user.get_messages %}
- <font class="darkred">{{ message }}</font>, {% endfor %}{% trans "go to see" %}
- <a href="{{ request.user.get_profile_url }}">{% trans "Profile" %}</a>{% endif %}</span>
- <a class="close-notify" onclick="notify.close(true)">&times;</a>
+ {% trans "congratulations, community gave you a badge" %}:{% for message in request.user.get_messages %}
+ <font class="darkred">{{ message }}</font>, {% endfor %}{% trans "see" %}
+ <a href="{{ request.user.get_profile_url }}">{% trans "profile" %}</a>{% endif %}</span>
+ <a class="close-notify" onclick="notify.close(true)">&times;</a>
</div>
{% include "header.html" %}
<div id="wrapper">
diff --git a/templates/book.html b/templates/book.html
index e5d4396b..a58a09f2 100644
--- a/templates/book.html
+++ b/templates/book.html
@@ -1,8 +1,10 @@
+<!-- template book.html -->
{% extends "base_content.html" %}
+{% load i18n %}
{% load extra_tags %}
{% load extra_filters %}
{% load humanize %}
-{% block title %}{% spaceless %}{{ book.title }}-读书频道{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{{ book.title }}-{% trans "reading channel" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
$().ready(function(){
@@ -21,27 +23,27 @@
<div class="bookSummary">
<table>
<tr>
- <td>【作者】</td>
+ <td>{% trans "[author]" %}</td>
<td><b><a href="{% url user book.user.id %}" rel="nofollow" >{{ book.author }}</a></b></td>
</tr>
<tr>
- <td>【出版社】</td>
+ <td>{% trans "[publisher]" %}</td>
<td>{{ book.publication }}</td>
</tr>
<tr>
- <td>【出版日期】</td>
+ <td>{% trans "[publication date]" %}</td>
<td>{{ book.published_at|date:"Y-m" }}</td>
</tr>
<tr>
- <td>【价格】</td>
- <td>{{ book.price }} 元</td>
+ <td>{% trans "[price]" %}</td>
+ <td>{{ book.price }} {% trans "currency unit" %}</td>
</tr>
<tr>
- <td>【页数】</td>
- <td>{{ book.pages }} 页</td>
+ <td>{% trans "[pages]" %}</td>
+ <td>{{ book.pages }} {% trans "pages abbreviation" %}</td>
</tr>
<tr>
- <td>【标签】</td>
+ <td>{% trans "[tags]" %}</td>
<td>{{ book.tagnames }}</td>
</tr>
<tr>
@@ -51,17 +53,17 @@
{% if author_info.blog_url %}
<tr>
<td></td>
- <td><a href="{{ author_info.blog_url }}" rel="nofollow" >作者博客 »</a></td>
+ <td><a href="{{ author_info.blog_url }}" rel="nofollow" >{% trans "author blog" %} »</a></td>
</tr>
{% endif %}
<tr>
<td> </td>
- <td><a href="#" rel="nofollow">书籍目录 »</a></td>
+ <td><a href="#" rel="nofollow">{% trans "book directory" %} »</a></td>
</tr>
<tr>
<td> </td>
- <td><a href="#" rel="nofollow">网上购买 »</a></td>
+ <td><a href="#" rel="nofollow">{% trans "buy online" %} »</a></td>
</tr>
</table>
</div>
@@ -74,21 +76,21 @@
<div class="tabBar">
<div class="tabsB">
- <a id="qa" class="on" title="图书相关的技术答疑" href="#">答读者问</a>
+ <a id="qa" class="on" title="{% trans "book technical Q&A %}" href="#">{% trans "reader questions" %}</a>
</div>
</div>
- <div class="bookAsk"><a href="{% url ask_book book.short_name %}">向作者提问</div>
+ <div class="bookAsk"><a href="{% url ask_book book.short_name %}">{% trans "ask the author" %}</div>
<div class="user-stats-table">
{% for question in questions.object_list %}
{% if question.favourite_count %}
{% if question.favorited_myself %}
<div class="favorites-count">
- <img title="这个问题被 {{question.favourite_count}} 位用户收藏" src="/content/images/vote-favorite-on.png">
+ <img title="{% trans "this question was selected as favorite" %} {{question.favourite_count}} {% trans "number of times" %}" src="/content/images/vote-favorite-on.png">
<div><b>{{question.favourite_count|intcomma}}</b></div>
</div>
{% else %}
<div class="favorites-count-off">
- <img title="这个问题被 {{question.favourite_count}} 位用户收藏" src="/content/images/vote-favorite-off.png">
+ <img title="{% trans "this question was selected as favorite" %} {{question.favourite_count}} {% trans "number of times" %}" src="/content/images/vote-favorite-off.png">
<div><b>{{question.favourite_count|intcomma}}</b></div>
</div>
{% endif %}
@@ -100,17 +102,17 @@
<div class="stats">
<div class="votes">
<div class="vote-count-post">{{question.score|intcomma}}</div>
- 票
+ {% trans "votes" %}
</div>
- <div title="{% if question.answer_accepted %}有答案已被接受为正确答案{% endif %}" class="status {% if question.answer_accepted %}answered-accepted{% endif %} {% ifequal question.answer_count 0 %}unanswered{% endifequal %}{% ifnotequal question.answer_count 0 %}answered{% endifnotequal %}">
+ <div title="{% if question.answer_accepted %}{% trans "the answer has been accepted to be correct" %}{% endif %}" class="status {% if question.answer_accepted %}answered-accepted{% endif %} {% ifequal question.answer_count 0 %}unanswered{% endifequal %}{% ifnotequal question.answer_count 0 %}answered{% endifnotequal %}">
<div class="answer-count-post">{{question.answer_count|intcomma}}</div>
- 回答
-
+ {% trans "answer" %}
+
</div>
<div class="views">
<div class="views-count-post">{{question.view_count|cnprog_intword|safe}}</div>
- 浏览
+ {% trans "views" %}
</div>
</div>
</a>
@@ -120,7 +122,7 @@
</h3>
<div class="tags">
{% for tag in question.tagname_list %}
- <a href="{% url forum.views.tag tag|urlencode %}" title="查看有关'{{ tag }}'的问题" rel="tag">{{ tag }}</a>
+ <a href="{% url forum.views.tag tag|urlencode %}" title="{% "see questions tagged with" %}'{{ tag }}'{% trans "using tags" %}" rel="tag">{{ tag }}</a>
{% endfor %}
</div>
<div class="started">
@@ -136,15 +138,15 @@
</div>
{% endblock %}
{% block tail %}
-
<div class="pager">
{% cnprog_paginator context %}
</div>
<div class="bookFeed">
<div id="feeds">
- <a href="/feeds/rss" title="RSS订阅该图书最新问题">订阅最新问题</a>
+ <a href="/feeds/rss" title="{% trans "subscribe to book RSS feed" %}">{% trans "subscribe to the questions feed" %}</a>
</div>
</div>
-{% endblock %} \ No newline at end of file
+{% endblock %}
+<!-- end template book.html -->
diff --git a/templates/close.html b/templates/close.html
index 04a22f18..32df3e82 100644
--- a/templates/close.html
+++ b/templates/close.html
@@ -1,7 +1,9 @@
+<!-- template close.html -->
{% extends "base_content.html" %}
+{% load i18n %}
{% load extra_tags %}
{% load humanize %}
-{% block title %}{% spaceless %}关闭问题{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Close question" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
$().ready(function(){
@@ -11,26 +13,24 @@
{% endblock %}
{% block content %}
<div id="main-bar" class="headNormal">
- 关闭问题
+ {% trans "Close question" %}
</div>
<div id="main-body" style="width:100%;margin-bottom:10px">
- <p>由于以下原因,你要关闭这个问题: <a href="{{ question.get_absolute_url }}">
+ <p>{% trans "Close the question" %}: <a href="{{ question.get_absolute_url }}">
<strong>{{ question.get_question_title }}</strong></a>
</p>
<form id="fmclose" action="{% url close question.id %}" method="post" >
<p>
- <strong>原因:</strong> {{ form.reason }}
+ <strong>{% trans "Reasons" %}:</strong> {{ form.reason }}
</p>
<div id="" style="padding-top:20px">
- <input type="submit" value="确定关闭" class="submit" />
- <input id="btBack" type="button" class="submit" value="取消" />
+ <input type="submit" value="{% trans "OK to close" %}" class="submit" />
+ <input id="btBack" type="button" class="submit" value="{% trans "Cancel" %}" />
</div>
</form>
</div>
{% endblock %}
-
-
-
+<!-- end template close.html -->
diff --git a/templates/content/images/favicon.ico b/templates/content/images/favicon.ico
deleted file mode 100644
index b5c6f578..00000000
--- a/templates/content/images/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/templates/content/js/com.cnprog.i18n.js b/templates/content/js/com.cnprog.i18n.js
new file mode 100644
index 00000000..2d8c90a6
--- /dev/null
+++ b/templates/content/js/com.cnprog.i18n.js
@@ -0,0 +1,90 @@
+// Evgeny Fadeev evgeny.fadeev@gmail.com localized for english and chinese
+// i18nLang variable must be set in html header to extract correct language
+var i18nZh = {
+ 'insufficient privilege':'用户权限不在操作范围',
+ 'cannot pick own answer as best':'不能设置自己的回答为最佳答案',
+ 'anonymous users cannot select favorite questions':'匿名用户不能收藏问题,请先',
+ 'please login':'注册或者登录',
+ 'anonymous users cannot vote':'匿名用户不能投票',
+ '>15 points requried to upvote':'需要+15积分才能投支持票。',
+ '>100 points required to downvote':'需要+100积分才能投反对票。',
+ 'please see': '查看',
+ 'cannot vote for own posts':'不能给自己的帖子投票',
+ 'daily vote cap exhausted':'对不起,您已用完今日所有的投票。',
+ 'cannot revoke old vote':'这个投票已经过时,不能撤销。',
+ 'please confirm offensive':"确定要归类该帖为广告、人身攻击、恶意言论吗?",
+ 'anonymous users cannot flag offensive posts':'匿名用户不能操作,请先',
+ 'cannot flag message as offensive twice':'不能重复操作。',
+ 'flag offensive cap exhausted':'对不起,您已用完今日所有的5次‘水帖’操作。',
+ 'need >15 points to report spam':"需要+15积分才能归类‘垃圾帖’。",
+ 'confirm delete':"确定要删除/撤销删除该帖吗?",
+ 'anonymous users cannot delete/undelete':"匿名用户不能删除或撤销删除帖子",
+ 'post recovered':"操作成功!该帖子已被恢复。",
+ 'post deleted':"操作成功!该帖子已删除。",
+ 'add comment':'添加评论',
+ 'community reputation points':'社区积分',
+ 'to comment, need':'评论需要',
+ 'delete this comment':'删除此评论',
+ 'hide comments':"隐藏评论",
+ 'add a comment':"添加评论",
+ 'comments':"评论",
+ 'confirm delete comment':"真要删除此评论吗?",
+ 'characters':'字符',
+ 'can write':'还可写',
+ 'click to close':'点击消息框关闭',
+ 'loading...':'读取中...',
+ 'tags cannot be empty':'标签不能为空。',
+ 'tablimits info':"最多5个标签,每个标签长度小于20个字符。",
+ 'content cannot be empty':'内容不能为空。',
+ 'content minchars': '请输入至少 {0} 字符。',
+ 'please enter title':'请输入标题。',
+ 'title minchars':"请输入至少 {0} 字符。",
+ 'delete':'删除',
+ 'undelete': '取消',
+ 'bold':'粗体',
+ 'italic':'斜体',
+ 'link':'超链接',
+ 'quote':'引用',
+ 'preformatted text':'代码',
+ 'image':'图片',
+ 'numbered list':'数字编号列表',
+ 'bulleted list':'项目符号列表',
+ 'heading':'标题',
+ 'horizontal bar':'水平线',
+ 'undo':'撤销',
+ 'redo':'重做',
+ 'enter image url':'<b>输入图片地址</b></p><p>示例:<br />http://www.example.com/image.jpg \"我的截图\"',
+ 'enter url':'<b>输入Web地址</b></p><p>示例:<br />http://www.cnprog.com/ \"我的网站\"</p>"',
+ 'upload image':'或者上传本地图片:',
+};
+
+var i18nEn = {
+ 'to comment, need': 'to comment, need reputation ',
+ 'please see':'please see ',
+ 'community reputation points':' ',
+ 'upload image':'Upload image:',
+ 'enter image url':'enter URL of the image, e.g. http://www.example.com/image.jpg \"image title\"',
+ 'enter url':'enter Web address, e.g. http://www.example.com \"page title\"',
+ 'daily vote cap exhausted':'sorry, you\'ve used up todays vote cap',
+ 'cannot pick own answer as best':'cannot accept own answer',
+ 'cannot revoke old vote':'older votes cannot be revoked',
+ 'please confirm offensive':'are you sure this post is offensive, contains spam, advertising, malicious remarks, etc.?',
+ 'flag offensive cap exhausted':'sorry, you\'ve used up todays cap of flagging offensive messages',
+ 'confirm delete':'are you sure you want to delete this?',
+ 'anonymous users cannot delete/undelete':'anonymous users cannot delete or undelete posts',
+ 'post recovered':'your post is now restored!',
+ 'post deleted':'your post has been deleted',
+ 'confirm delete comment':'do you really want to delete this comment?',
+ 'can write':'have ',
+ 'tablimits info':'up to 5 tags, no more than 20 characters each',
+ 'content minchars': 'please enter more than {0} characters',
+ 'title minchars':"please enter at least {0} characters",
+ 'characters':'characters left',
+};
+
+var i18n = {
+ 'en':i18nEn,
+ 'zh':i18nZh
+};
+
+var i18n_dict = i18n[i18nLang];
diff --git a/templates/content/js/com.cnprog.post.js b/templates/content/js/com.cnprog.post.js
index dbf5d128..e3101ea7 100644
--- a/templates/content/js/com.cnprog.post.js
+++ b/templates/content/js/com.cnprog.post.js
@@ -49,24 +49,37 @@ var Vote = function(){
var removeQuestionLinkIdPrefix = 'question-delete-link-';
var removeAnswerLinkIdPrefix = 'answer-delete-link-';
- var acceptAnonymousMessage = "用户权限不在操作范围";
- var acceptOwnAnswerMessage = "不能设置自己的回答为最佳答案";
- var favoriteAnonymousMessage = "匿名用户不能收藏问题,请先<a href='/account/signin/?next=/questions/{{QuestionID}}'>注册或者登录</a>";
- var voteAnonymousMessage = "匿名用户不能投票,请先<a href='/account/signin/?next=/questions/{{QuestionID}}'>注册或者登录</a>";
- var upVoteRequiredScoreMessage = "需要+15积分才能投支持票。查看<a href='/faq'>faq</a>";
- var downVoteRequiredScoreMessage = "需要+100积分才能投反对票。查看<a href='/faq'>faq</a>";
- var voteOwnDeniedMessage = "不能给自己的帖子投票";
- var voteRequiredMoreVotes = "对不起,您已用完今日所有的投票。查看<a href='/faq'>faq</a>";
- var voteDenyCancelMessage = "这个投票已经过时,不能撤销。查看<a href='/faq'>faq</a>";
- var offensiveConfirmation = "确定要归类该帖为广告、人身攻击、恶意言论吗?";
- var offensiveAnonymousMessage = "匿名用户不能操作,请先<a href='/account/signin/?next=/questions/{{QuestionID}}'>注册或者登录</a>";
- var offensiveTwiceMessage = "不能重复操作。查看<a href='/faq'>faq</a>";
- var offensiveNoFlagsLeftMessage = "对不起,您已用完今日所有的5次‘水帖’操作。查看<a href='/faq'>faq</a>";
- var offensiveNoPermissionMessage = "需要+15积分才能归类‘垃圾帖’。查看<a href='/faq'>faq</a>";
- var removeConfirmation = "确定要删除/撤销删除该帖吗?";
- var removeAnonymousMessage = "匿名用户不能删除或撤销删除帖子";
- var recoveredMessage = "操作成功!该帖子已被恢复。";
- var deletedMessage = "操作成功!该帖子已删除。"
+ var acceptAnonymousMessage = $.i18n._('insufficient privilege');
+ var acceptOwnAnswerMessage = $.i18n._('cannot pick own answer as best');
+ var favoriteAnonymousMessage = $.i18n._('anonymous user cannot select favorite questions')
+ + "<a href='/account/signin/?next=/questions/{{QuestionID}}'>"
+ + $.i18n._('please login') + "</a>";
+ var voteAnonymousMessage = $.i18n._('anonymous users cannot vote')
+ + "<a href='/account/signin/?next=/questions/{{QuestionID}}'>"
+ + $.i18n._('please login') + "</a>";
+ var upVoteRequiredScoreMessage = $.i18n._('>15 points requried to upvote')
+ + $.i18n._('please see') + "<a href='/faq'>faq</a>";
+ var downVoteRequiredScoreMessage = $.i18n._('>100 points requried to downvote')
+ + $.i18n._('please see') + "<a href='/faq'>faq</a>";
+ var voteOwnDeniedMessage = $.i18n._('cannot vote for own posts');
+ var voteRequiredMoreVotes = $.i18n._('daily vote cap exhausted')
+ + $.i18n._('please see') + "<a href='/faq'>faq</a>";
+ var voteDenyCancelMessage = $.i18n._('cannot revoke old vote')
+ + $.i18n._('please see') + "<a href='/faq'>faq</a>";
+ var offensiveConfirmation = $.i18n._('please confirm offensive');
+ var offensiveAnonymousMessage = $.i18n._('anonymous users cannot flag offensive posts')
+ + "<a href='/account/signin/?next=/questions/{{QuestionID}}'>"
+ + $.i18n._('please login') + "</a>";
+ var offensiveTwiceMessage = $.i18n._('cannot flag message as offensive twice')
+ + $.i18n._('please see') + "<a href='/faq'>faq</a>";
+ var offensiveNoFlagsLeftMessage = $.i18n._('flag offensive cap exhausted')
+ + $.i18n._('please see') + "<a href='/faq'>faq</a>";
+ var offensiveNoPermissionMessage = $.i18n._('need >15 points to report spam')
+ + $.i18n._('please see') + "<a href='/faq'>faq</a>";
+ var removeConfirmation = $.i18n._('confirm delete');
+ var removeAnonymousMessage = $.i18n._('anonymous users cannot delete/undelete');
+ var recoveredMessage = $.i18n._('post recovered');
+ var deletedMessage = $.i18n._('post deleted');
var VoteType = {
acceptAnswer : 0,
@@ -201,7 +214,7 @@ var Vote = function(){
});
getremoveQuestionLink().unbind('click').click(function(event){
- Vote.remove(this, VoteType.removeQuestion)
+ Vote.remove(this, VoteType.removeQuestion);
});
getremoveAnswersLinks().unbind('click').click(function(event){
@@ -330,15 +343,22 @@ var Vote = function(){
};
var callback_remove = function(object, voteType, data){
+ alert(data.status);
if(data.allowed == "0" && data.success == "0"){
showMessage(object, removeAnonymousMessage.replace("{{QuestionID}}", questionId));
}
- else if(data.status == "1"){
- showMessage(object, recoveredMessage);
- }
- else if(data.success == "1"){
- showMessage(object, deletedMessage);
- }
+ else if (data.success == "1"){
+ if (removeActionType == 'delete'){
+ postNode.addClass('deleted');
+ postRemoveLink.innerHTML = $.i18n._('undelete');
+ showMessage(object, deletedMessage);
+ }
+ else if (removeActionType == 'undelete') {
+ postNode.removeClass('deleted');
+ postRemoveLink.innerHTML = $.i18n._('delete');
+ showMessage(object, recoveredMessage);
+ }
+ }
};
return {
@@ -395,8 +415,23 @@ var Vote = function(){
return false;
}
if(confirm(removeConfirmation)){
- postId = object.id.substr(object.id.lastIndexOf('-') + 1);
+ bits = object.id.split('-');
+ postId = bits.pop();/* this seems to be used within submit! */
+ postType = bits.shift();
+
+ if (postType == 'answer'){
+ postNode = $('#answer-container-' + postId);
+ postRemoveLink = object;
+ if (postNode.hasClass('deleted')){
+ removeActionType = 'undelete';
+ }
+ else {
+ removeActionType = 'delete';
+ }
+ }
submit($(object), voteType, callback_remove);
+
+
}
}
}
@@ -426,7 +461,8 @@ function createComments(type) {
var form = '<form id="' + formId + '" class="post-comments"><div>';
form += '<textarea name="comment" cols="60" rows="5" maxlength="300" onblur="'+ objectType +'Comments.updateTextCounter(this)" ';
form += 'onfocus="' + objectType + 'Comments.updateTextCounter(this)" onkeyup="'+ objectType +'Comments.updateTextCounter(this)"></textarea>';
- form += '<input type="submit" value="添加评论" /><br><span class="text-counter"></span>';
+ form += '<input type="submit" value="'
+ + $.i18n._('add comment') + '" /><br><span class="text-counter"></span>';
form += '<span class="form-error"></span></div></form>';
jDiv.append(form);
@@ -439,7 +475,10 @@ function createComments(type) {
else {
var divId = "comments-rep-needed-" + objectType + '-' + id;
if (jDiv.find("#" + divId).length == 0) {
- jDiv.append('<div id="' + divId + '" style="color:red">评论需要 ' + repNeededForComments + ' 社区积分 - <a href="/faq" class="comment-user">查看faq</a></span>');
+ jDiv.append('<div id="' + divId + '" style="color:red">'
+ + $.i18n._('to comment, need') + ' ' +
+ + repNeededForComments + ' ' + $.i18n._('community reputation points')
+ + '<a href="/faq" class="comment-user">' + $.i18n._('please see') + 'faq</a></span>');
}
}
};
@@ -477,7 +516,7 @@ function createComments(type) {
var imgHover = "/content/images/close-small-hover.png";
html += '<img onclick="' + objectType + 'Comments.deleteComment($(this), ' + json.object_id + ', \'' + json.delete_url + '\')" src="' + img;
html += '" onmouseover="$(this).attr(\'src\', \'' + imgHover + '\')" onmouseout="$(this).attr(\'src\', \'' + img
- html += '\')" title="删除此评论" />';
+ html += '\')" title="' + $.i18n._('delete this comment') + '" />';
}
html += '</div>';
@@ -524,13 +563,15 @@ function createComments(type) {
renderForm(id, jDiv);
jDiv.show();
if (canPostComments(id, jDiv)) jDiv.find("textarea").get(0).focus();
- jDiv.siblings("a").unbind("click").click(function() { commentsFactory[objectType].hide(id); }).text("隐藏评论");
+ jDiv.siblings("a").unbind("click").click(function(){
+ commentsFactory[objectType].hide(id);
+ }).text($.i18n._('hide comments'));
},
hide: function(id) {
var jDiv = jDivInit(id);
var len = jDiv.children("div.comments").children().length;
- var anchorText = len == 0 ? "添加评论" : "评论 (<b>" + len + "</b>)";
+ var anchorText = len == 0 ? $.i18n._('add a comment') : $.i18n._('comments') + ' (<b>' + len + "</b>)";
jDiv.hide();
jDiv.siblings("a").unbind("click").click(function() { commentsFactory[objectType].show(id); }).html(anchorText);
@@ -538,7 +579,7 @@ function createComments(type) {
},
deleteComment: function(jImg, id, deleteUrl) {
- if (confirm("真要删除此评论吗?")) {
+ if (confirm($.i18n._('confirm delete comment'))) {
jImg.hide();
appendLoaderImg(id);
$.post(deleteUrl, { dataNeeded: "forIIS7" }, function(json) {
@@ -551,7 +592,9 @@ function createComments(type) {
var length = textarea.value ? textarea.value.length : 0;
var color = length > 270 ? "#f00" : length > 200 ? "#f60" : "#999";
var jSpan = $(textarea).siblings("span.text-counter");
- jSpan.html('还可写' + (300 - length) + ' 字符').css("color", color);
+ jSpan.html($.i18n._('can write')
+ + (300 - length) + ' '
+ + $.i18n._('characters')).css("color", color);
}
};
}
diff --git a/templates/content/js/com.cnprog.post.pack.js b/templates/content/js/com.cnprog.post.pack.js
deleted file mode 100644
index 8af19d13..00000000
--- a/templates/content/js/com.cnprog.post.pack.js
+++ /dev/null
@@ -1 +0,0 @@
-var lanai={highlightSyntax:function(){var a=false;$("pre code").parent().each(function(){if(!$(this).hasClass("prettyprint")){$(this).addClass("prettyprint");a=true}});if(a){prettyPrint()}}};var Vote=function(){var M;var v;var ah;var O;var X="answer-container-";var V="vote-buttons";var s="answer-img-accept-";var T="question-img-favorite";var N="question-img-upvote-";var r="question-img-downvote-";var L="answer-img-upvote-";var ae="answer-img-downvote-";var ad="favorite-number";var j="comment-";var H="vote-number";var a="question-offensive-flag-";var t="answer-offensive-flag-";var x="offensive-flag";var aa="question-controls";var J="question-delete-link-";var b="answer-delete-link-";var o="用户权限不在操作范围";var w="不能设置自己的回答为最佳答案";var g="匿名用户不能收藏问题,请先<a href='/account/signin/?next=/questions/{{QuestionID}}'>注册或者登录</a>";var aj="匿名用户不能投票,请先<a href='/account/signin/?next=/questions/{{QuestionID}}'>注册或者登录</a>";var K="需要+15积分才能投支持票。查看<a href='/faq'>faq</a>";var Y="需要+100积分才能投反对票。查看<a href='/faq'>faq</a>";var q="不能给自己的帖子投票";var n="对不起,您已用完今日所有的投票。查看<a href='/faq'>faq</a>";var A="这个投票已经过时,不能撤销。查看<a href='/faq'>faq</a>";var u="确定要归类该帖为广告、人身攻击、恶意言论吗?";var ab="匿名用户不能操作,请先<a href='/account/signin/?next=/questions/{{QuestionID}}'>注册或者登录</a>";var C="不能重复操作。查看<a href='/faq'>faq</a>";var B="对不起,您已用完今日所有的5次‘水帖’操作。查看<a href='/faq'>faq</a>";var af="需要+15积分才能归类‘垃圾帖’。查看<a href='/faq'>faq</a>";var p="确定要删除/撤销删除该帖吗?";var W="匿名用户不能删除或撤销删除帖子";var Q="操作成功!该帖子已被恢复。";var i="操作成功!该帖子已删除。";var h={acceptAnswer:0,questionUpVote:1,questionDownVote:2,favorite:4,answerUpVote:5,answerDownVote:6,offensiveQuestion:7,offensiveAnswer:8,removeQuestion:9,removeAnswer:10};var Z=function(){var ak="div."+V+" img[class="+T+"]";return $(ak)};var I=function(){var ak="#"+ad;return $(ak)};var e=function(){var ak="div."+V+" img[id^="+N+"]";return $(ak)};var E=function(){var ak="div."+V+" img[id^="+r+"]";return $(ak)};var l=function(){var ak="div."+V+" img[id^="+L+"]";return $(ak)};var k=function(){var ak="div."+V+" img[id^="+ae+"]";return $(ak)};var m=function(al){var ak="div."+V+" img[id="+L+al+"]";return $(ak)};var y=function(al){var ak="div."+V+" img[id="+ae+al+"]";return $(ak)};var z=function(){var ak="table[id=question-table] span[class="+x+"]";return $(ak)};var c=function(){var ak="div.answer span[class="+x+"]";return $(ak)};var R=function(){var ak="div#question-controls a[id^="+J+"]";return $(ak)};var f=function(){var ak="div.answer-controls a[id^="+b+"]";return $(ak)};var U=function(an,al,am){var ak=al?"":"-on";var ao=(an==h.questionUpVote||an==h.answerUpVote)?"up":"down";am.attr("src","/content/images/vote-arrow-"+ao+ak+".png");if(al){if(an==h.questionUpVote||an==h.questionDownVote){$(e()).attr("src","/content/images/vote-arrow-up.png");$(E()).attr("src","/content/images/vote-arrow-down.png")}else{$(m(v)).attr("src","/content/images/vote-arrow-up.png");$(y(v)).attr("src","/content/images/vote-arrow-down.png")}}};var P=function(al,am){var ak=al.parent("div."+V).find("div."+H);$(ak).text(am)};var ac=function(){if(ah==O){var am="div."+V+" img[id^="+s+"]";$(am).unbind("click").click(function(aq){Vote.accept($(aq.target))})}var ao=Z();ao.unbind("click").click(function(aq){Vote.favorite($(aq.target))});var an=e();an.unbind("click").click(function(aq){Vote.vote($(aq.target),h.questionUpVote)});var ak=E();ak.unbind("click").click(function(aq){Vote.vote($(aq.target),h.questionDownVote)});var al=l();al.unbind("click").click(function(aq){Vote.vote($(aq.target),h.answerUpVote)});var ap=k();ap.unbind("click").click(function(aq){Vote.vote($(aq.target),h.answerDownVote)});z().unbind("click").click(function(aq){Vote.offensive(this,h.offensiveQuestion)});c().unbind("click").click(function(aq){Vote.offensive(this,h.offensiveAnswer)});R().unbind("click").click(function(aq){Vote.remove(this,h.removeQuestion)});f().unbind("click").click(function(aq){Vote.remove(this,h.removeAnswer)})};var G=function(ak,al,am){$.ajax({type:"POST",cache:false,dataType:"json",url:"/questions/"+M+"/vote/",data:{type:al,postId:v},error:ai,success:function(an){am(ak,al,an)}})};var ai=function(al,ak){alert("Callback invoke error: "+ak)};var d=function(al,am,ao){if(ao.allowed=="0"&&ao.success=="0"){showMessage(al,o)}else{if(ao.allowed=="-1"){showMessage(al,w)}else{if(ao.status=="1"){al.attr("src","/content/images/vote-accepted.png");$("#"+X+v).removeClass("accepted-answer");$("#"+j+v).removeClass("comment-link-accepted")}else{if(ao.success=="1"){var an="div."+V+" img[id^="+s+"]";$(an).attr("src","/content/images/vote-accepted.png");var ap=("div[id^="+X+"]");$(ap).removeClass("accepted-answer");var ak=("div[id^="+X+"] div[id^="+j+"]");$(ak).removeClass("comment-link-accepted");al.attr("src","/content/images/vote-accepted-on.png");$("#"+X+v).addClass("accepted-answer");$("#"+j+v).addClass("comment-link-accepted")}else{showMessage(al,ao.message)}}}}};var F=function(ak,al,am){if(am.allowed=="0"&&am.success=="0"){showMessage(ak,g.replace("{{QuestionID}}",M))}else{if(am.status=="1"){ak.attr("src","/content/images/vote-favorite-off.png");var an=I();an.removeClass("my-favorite-number");if(am.count==0){am.count=""}an.text(am.count)}else{if(am.success=="1"){ak.attr("src","/content/images/vote-favorite-on.png");var an=I();an.text(am.count);an.addClass("my-favorite-number")}else{showMessage(ak,am.message)}}}};var S=function(ak,al,am){if(am.allowed=="0"&&am.success=="0"){showMessage(ak,aj.replace("{{QuestionID}}",M))}else{if(am.allowed=="-3"){showMessage(ak,n)}else{if(am.allowed=="-2"){if(al==h.questionUpVote||al==h.answerUpVote){showMessage(ak,K)}else{if(al==h.questionDownVote||al==h.answerDownVote){showMessage(ak,Y)}}}else{if(am.allowed=="-1"){showMessage(ak,q)}else{if(am.status=="2"){showMessage(ak,A)}else{if(am.status=="1"){U(al,true,ak);P(ak,am.count)}else{if(am.success=="1"){U(al,false,ak);P(ak,am.count);if(am.message.length>0){showMessage(ak,am.message)}}}}}}}}};var ag=function(ak,al,am){ak=$(ak);if(am.allowed=="0"&&am.success=="0"){showMessage(ak,ab.replace("{{QuestionID}}",M))}else{if(am.allowed=="-3"){showMessage(ak,B)}else{if(am.allowed=="-2"){showMessage(ak,af)}else{if(am.status=="1"){showMessage(ak,C)}else{if(am.success=="1"){$(ak).children("span[class=darkred]").text("("+am.count+")")}}}}}};var D=function(ak,al,am){if(am.allowed=="0"&&am.success=="0"){showMessage(ak,W.replace("{{QuestionID}}",M))}else{if(am.status=="1"){showMessage(ak,Q)}else{if(am.success=="1"){showMessage(ak,i)}}}};return{init:function(ak,al,am){M=ak;ah=al;O=am;ac()},accept:function(ak){v=ak.attr("id").substring(s.length);G(ak,h.acceptAnswer,d)},favorite:function(ak){if(!O||O.toUpperCase()=="NONE"){showMessage(ak,g.replace("{{QuestionID}}",M));return false}G(ak,h.favorite,F)},vote:function(ak,al){if(!O||O.toUpperCase()=="NONE"){showMessage(ak,aj.replace("{{QuestionID}}",M));return false}if(al==h.answerUpVote){v=ak.attr("id").substring(L.length)}else{if(al==h.answerDownVote){v=ak.attr("id").substring(ae.length)}}G(ak,al,S)},offensive:function(ak,al){if(!O||O.toUpperCase()=="NONE"){showMessage($(ak),ab.replace("{{QuestionID}}",M));return false}if(confirm(u)){v=ak.id.substr(ak.id.lastIndexOf("-")+1);G(ak,al,ag)}},remove:function(ak,al){if(!O||O.toUpperCase()=="NONE"){showMessage($(ak),W.replace("{{QuestionID}}",M));return false}if(confirm(p)){v=ak.id.substr(ak.id.lastIndexOf("-")+1);G($(ak),al,D)}}}}();function createComments(i){var d=i;var b=function(k){return $("#comments-"+d+"-"+k)};var j=function(k){appendLoader("#comments-"+d+"-"+k+" div.comments")};var h=function(m,l){var k=l.siblings("#can-post-comments-"+d+"-"+m);return k.val().toLowerCase()=="true"};var f=function(o,m){var n="form-comments-"+d+"-"+o;if(h(o,m)){if(m.find("#"+n).length==0){var l='<form id="'+n+'" class="post-comments"><div>';l+='<textarea name="comment" cols="60" rows="5" maxlength="300" onblur="'+d+'Comments.updateTextCounter(this)" ';l+='onfocus="'+d+'Comments.updateTextCounter(this)" onkeyup="'+d+'Comments.updateTextCounter(this)"></textarea>';l+='<input type="submit" value="添加评论" /><br><span class="text-counter"></span>';l+='<span class="form-error"></span></div></form>';m.append(l);setupFormValidation("#"+n,{comment:{required:true,minlength:10}},"",function(){e(o,n)})}}else{var k="comments-rep-needed-"+d+"-"+o;if(m.find("#"+k).length==0){m.append('<div id="'+k+'" style="color:red">评论需要 '+repNeededForComments+' 社区积分 - <a href="/faq" class="comment-user">查看faq</a></span>')}}};var a=function(l,k){j(l);$.getJSON("/"+d+"s/"+l+"/comments/",function(m){c(l,m)})};var c=function(n,l){var m=b(n);m=m.find("div.comments");m.find("div[id^='comment-"+d+"-']").remove();removeLoader();if(l&&l.length>0){for(var k=0;k<l.length;k++){g(m,l[k])}m.children().show()}};var g=function(o,n){var m='<div id="comment-'+d+"-"+n.id+'" style="display:none">'+n.text;m+=n.user_url?'&nbsp;&ndash;&nbsp;<a href="'+n.user_url+'"':"<span";m+=' class="comment-user">'+n.user_display_name+(n.user_url?"</a>":"</span>");m+=' <span class="comment-date">('+n.add_date+")</span>";if(n.delete_url){var l="/content/images/close-small.png";var k="/content/images/close-small-hover.png";m+='<img onclick="'+d+"Comments.deleteComment($(this), "+n.object_id+", '"+n.delete_url+'\')" src="'+l;m+="\" onmouseover=\"$(this).attr('src', '"+k+"')\" onmouseout=\"$(this).attr('src', '"+l;m+='\')" title="删除此评论" />'}m+="</div>";o.append(m)};var e=function(n,m){j(n);var l="#"+m;var k=$(l+" textarea");$.ajax({type:"POST",url:"/"+d+"s/"+n+"/comments/",dataType:"json",data:{comment:k.val()},success:function(o){c(n,o);k.val("");commentsFactory[d].updateTextCounter(k);enableSubmitButton(l)},error:function(o,q,p){removeLoader();showMessage(l,o.responseText);enableSubmitButton(l)}})};return{init:function(){$("a[id^='comments-link-"+d+"-']").unbind("click").click(function(){commentsFactory[d].show($(this).attr("id").substr(("comments-link-"+d+"-").length))})},show:function(l){var k=b(l);a(l,k);f(l,k);k.show();if(h(l,k)){k.find("textarea").get(0).focus()}k.siblings("a").unbind("click").click(function(){commentsFactory[d].hide(l)}).text("隐藏评论")},hide:function(n){var m=b(n);var k=m.children("div.comments").children().length;var l=k==0?"添加评论":"评论 (<b>"+k+"</b>)";m.hide();m.siblings("a").unbind("click").click(function(){commentsFactory[d].show(n)}).html(l);m.children("div.comments").children().hide()},deleteComment:function(m,l,k){if(confirm("真要删除此评论吗?")){m.hide();j(l);$.post(k,{dataNeeded:"forIIS7"},function(n){c(l,n)},"json")}},updateTextCounter:function(l){var n=l.value?l.value.length:0;var m=n>270?"#f00":n>200?"#f60":"#999";var k=$(l).siblings("span.text-counter");k.html("还可写"+(300-n)+" 字符").css("color",m)}}}var questionComments=createComments("question");var answerComments=createComments("answer");$().ready(function(){questionComments.init();answerComments.init()});var commentsFactory={question:questionComments,answer:answerComments};var PR_SHOULD_USE_CONTINUATION=true;var PR_TAB_WIDTH=8;var PR_normalizedHtml;var PR;var prettyPrintOne;var prettyPrint;function _pr_isIE6(){var a=navigator&&navigator.userAgent&&/\bMSIE 6\./.test(navigator.userAgent);_pr_isIE6=function(){return a};return a}(function(){function W(av){av=av.split(/ /g);var aw={};for(var au=av.length;--au>=0;){var at=av[au];if(at){aw[at]=null}}return aw}var n="break continue do else for if return while ";var D=n+"auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile ";var w=D+"catch class delete false import new operator private protected public this throw true try ";var p=w+"alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename typeof using virtual wchar_t where ";var G=w+"boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient ";var ap=G+"as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var ";var F=w+"debugger eval export function get null set undefined var with Infinity NaN ";var y="caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END ";var ab=n+"and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None ";var k=n+"alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END ";var aa=n+"case done elif esac eval fi function in local set then until ";var M=(p+ap+F+y+ab+k+aa);var O="str";var L="kwd";var o="com";var al="typ";var Y="lit";var ah="pun";var V="pln";var q="tag";var U="dec";var ad="src";var ao="atn";var s="atv";var ak="nocode";function aq(at){return(at>="a"&&at<="z")||(at>="A"&&at<="Z")}function N(aw,au,at,av){aw.unshift(at,av||0);try{au.splice.apply(au,aw)}finally{aw.splice(0,2)}}var ai=function(){var av=["!","!=","!==","#","%","%=","&","&&","&&=","&=","(","*","*=","+=",",","-=","->","/","/=",":","::",";","<","<<","<<=","<=","=","==","===",">",">=",">>",">>=",">>>",">>>=","?","@","[","^","^=","^^","^^=","{","|","|=","||","||=","~","break","case","continue","delete","do","else","finally","instanceof","return","throw","try","typeof"];var aw="(?:(?:(?:^|[^0-9.])\\.{1,3})|(?:(?:^|[^\\+])\\+)|(?:(?:^|[^\\-])-)";for(var at=0;at<av.length;++at){var au=av[at];if(aq(au.charAt(0))){aw+="|\\b"+au}else{aw+="|"+au.replace(/([^=<>:&])/g,"\\$1")}}aw+="|^)\\s*$";return new RegExp(aw)}();var S=/&/g;var Z=/</g;var x=/>/g;var K=/\"/g;function E(at){return at.replace(S,"&amp;").replace(Z,"&lt;").replace(x,"&gt;").replace(K,"&quot;")}function r(at){return at.replace(S,"&amp;").replace(Z,"&lt;").replace(x,"&gt;")}var e=/&lt;/g;var C=/&gt;/g;var d=/&apos;/g;var i=/&quot;/g;var ar=/&amp;/g;var J=/&nbsp;/g;function t(aw){var ay=aw.indexOf("&");if(ay<0){return aw}for(--ay;(ay=aw.indexOf("&#",ay+1))>=0;){var at=aw.indexOf(";",ay);if(at>=0){var av=aw.substring(ay+3,at);var ax=10;if(av&&av.charAt(0)==="x"){av=av.substring(1);ax=16}var au=parseInt(av,ax);if(!isNaN(au)){aw=(aw.substring(0,ay)+String.fromCharCode(au)+aw.substring(at+1))}}}return aw.replace(e,"<").replace(C,">").replace(d,"'").replace(i,'"').replace(ar,"&").replace(J," ")}function R(at){return"XMP"===at.tagName}function an(ax,av){switch(ax.nodeType){case 1:var au=ax.tagName.toLowerCase();av.push("<",au);for(var aw=0;aw<ax.attributes.length;++aw){var at=ax.attributes[aw];if(!at.specified){continue}av.push(" ");an(at,av)}av.push(">");for(var ay=ax.firstChild;ay;ay=ay.nextSibling){an(ay,av)}if(ax.firstChild||!/^(?:br|link|img)$/.test(au)){av.push("</",au,">")}break;case 2:av.push(ax.name.toLowerCase(),'="',E(ax.value),'"');break;case 3:case 4:av.push(r(ax.nodeValue));break}}var am=null;function b(aw){if(null===am){var au=document.createElement("PRE");au.appendChild(document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));am=!/</.test(au.innerHTML)}if(am){var av=aw.innerHTML;if(R(aw)){av=r(av)}return av}var at=[];for(var ax=aw.firstChild;ax;ax=ax.nextSibling){an(ax,at)}return at.join("")}function ag(av){var at=" ";var au=0;return function(az){var ax=null;var aC=0;for(var ay=0,aB=az.length;ay<aB;++ay){var aA=az.charAt(ay);switch(aA){case"\t":if(!ax){ax=[]}ax.push(az.substring(aC,ay));var aw=av-(au%av);au+=aw;for(;aw>=0;aw-=at.length){ax.push(at.substring(0,aw))}aC=ay+1;break;case"\n":au=0;break;default:++au}}if(!ax){return az}ax.push(az.substring(aC));return ax.join("")}}var Q=/(?:[^<]+|<!--[\s\S]*?-->|<!\[CDATA\[([\s\S]*?)\]\]>|<\/?[a-zA-Z][^>]*>|<)/g;var v=/^<!--/;var T=/^<\[CDATA\[/;var u=/^<br\b/i;var h=/^<(\/?)([a-zA-Z]+)/;function B(aF){var aB=aF.match(Q);var aE=[];var aw=0;var at=[];if(aB){for(var aA=0,av=aB.length;aA<av;++aA){var aC=aB[aA];if(aC.length>1&&aC.charAt(0)==="<"){if(v.test(aC)){continue}if(T.test(aC)){aE.push(aC.substring(9,aC.length-3));aw+=aC.length-12}else{if(u.test(aC)){aE.push("\n");++aw}else{if(aC.indexOf(ak)>=0&&ac(aC)){var au=aC.match(h)[2];var az=1;end_tag_loop:for(var ay=aA+1;ay<av;++ay){var aD=aB[ay].match(h);if(aD&&aD[2]===au){if(aD[1]==="/"){if(--az===0){break end_tag_loop}}else{++az}}}if(ay<av){at.push(aw,aB.slice(aA,ay+1).join(""));aA=ay}else{at.push(aw,aC)}}else{at.push(aw,aC)}}}}else{var ax=t(aC);aE.push(ax);aw+=ax.length}}}return{source:aE.join(""),tags:at}}function ac(at){return !!at.replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,' $1="$2$3$4"').match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/)}function j(av,au){var at={};(function(){var ay=av.concat(au);for(var az=ay.length;--az>=0;){var aC=ay[az];var aA=aC[3];if(aA){for(var aB=aA.length;--aB>=0;){at[aA.charAt(aB)]=aC}}}})();var ax=au.length;var aw=/\S/;return function(aA,aH){aH=aH||0;var aB=[aH,V];var aC="";var aJ=0;var aI=aA;while(aI.length){var ay;var aD=null;var aG;var az=at[aI.charAt(0)];if(az){aG=aI.match(az[1]);aD=aG[0];ay=az[0]}else{for(var aE=0;aE<ax;++aE){az=au[aE];var aF=az[2];if(aF&&!aF.test(aC)){continue}aG=aI.match(az[1]);if(aG){aD=aG[0];ay=az[0];break}}if(!aD){ay=V;aD=aI.substring(0,1)}}aB.push(aH+aJ,ay);aJ+=aD.length;aI=aI.substring(aD.length);if(ay!==o&&aw.test(aD)){aC=aD}}return aB}}var a=j([],[[V,/^[^<]+/,null],[U,/^<!\w[^>]*(?:>|$)/,null],[o,/^<!--[\s\S]*?(?:-->|$)/,null],[ad,/^<\?[\s\S]*?(?:\?>|$)/,null],[ad,/^<%[\s\S]*?(?:%>|$)/,null],[ad,/^<(script|style|xmp)\b[^>]*>[\s\S]*?<\/\1\b[^>]*>/i,null],[q,/^<\/?\w[^<>]*>/,null]]);var z=/^(<[^>]*>)([\s\S]*)(<\/[^>]*>)$/;function ae(ay){var av=a(ay);for(var ax=0;ax<av.length;ax+=2){if(av[ax+1]===ad){var az,au;az=av[ax];au=ax+2<av.length?av[ax+2]:ay.length;var at=ay.substring(az,au);var aw=at.match(z);if(aw){av.splice(ax,2,az,q,az+aw[1].length,ad,az+aw[1].length+(aw[2]||"").length,q)}}}return av}var X=j([[s,/^\'[^\']*(?:\'|$)/,null,"'"],[s,/^\"[^\"]*(?:\"|$)/,null,'"'],[ah,/^[<>\/=]+/,null,"<>/="]],[[q,/^[\w:\-]+/,/^</],[s,/^[\w\-]+/,/^=/],[ao,/^[\w:\-]+/,null],[V,/^\s+/,null," \t\r\n"]]);function I(ay,au){for(var aw=0;aw<au.length;aw+=2){var ax=au[aw+1];if(ax===q){var aA,at;aA=au[aw];at=aw+2<au.length?au[aw+2]:ay.length;var av=ay.substring(aA,at);var az=X(av,aA);N(az,au,aw,2);aw+=az.length-2}}return au}function m(aw){var ay=[],av=[];if(aw.tripleQuotedStrings){ay.push([O,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(aw.multiLineStrings){ay.push([O,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{ay.push([O,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}av.push([V,/^(?:[^\'\"\`\/\#]+)/,null," \r\n"]);if(aw.hashComments){ay.push([o,/^#[^\r\n]*/,null,"#"])}if(aw.cStyleComments){av.push([o,/^\/\/[^\r\n]*/,null]);av.push([o,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(aw.regexLiterals){var aA=("^/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+(?:/|$)");av.push([O,new RegExp(aA),ai])}var ax=W(aw.keywords);aw=null;var au=j(ay,av);var az=j([],[[V,/^\s+/,null," \r\n"],[V,/^[a-z_$@][a-z_$@0-9]*/i,null],[Y,/^0x[a-f0-9]+[a-z]/i,null],[Y,/^(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?[a-z]*/i,null,"123456789"],[ah,/^[^\s\w\.$@]+/,null]]);function at(aB,aF){for(var aJ=0;aJ<aF.length;aJ+=2){var aC=aF[aJ+1];if(aC===V){var aD,aH,aL,aK;aD=aF[aJ];aH=aJ+2<aF.length?aF[aJ+2]:aB.length;aL=aB.substring(aD,aH);aK=az(aL,aD);for(var aI=0,aE=aK.length;aI<aE;aI+=2){var aM=aK[aI+1];if(aM===V){var aO=aK[aI];var aN=aI+2<aE?aK[aI+2]:aL.length;var aG=aB.substring(aO,aN);if(aG==="."){aK[aI+1]=ah}else{if(aG in ax){aK[aI+1]=L}else{if(/^@?[A-Z][A-Z$]*[a-z][A-Za-z$]*$/.test(aG)){aK[aI+1]=aG.charAt(0)==="@"?Y:al}}}}}N(aK,aF,aJ,2);aJ+=aK.length-2}}return aF}return function(aC){var aB=au(aC);aB=at(aC,aB);return aB}}var af=m({keywords:M,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function aj(at,ax){for(var aA=0;aA<ax.length;aA+=2){var au=ax[aA+1];if(au===ad){var av,ay;av=ax[aA];ay=aA+2<ax.length?ax[aA+2]:at.length;var aB=af(at.substring(av,ay));for(var az=0,aw=aB.length;az<aw;az+=2){aB[az]+=av}N(aB,ax,aA,2);aA+=aB.length-2}}return ax}function c(at,aB){var aI=false;for(var aF=0;aF<aB.length;aF+=2){var av=aB[aF+1];var ax,aD;if(av===ao){ax=aB[aF];aD=aF+2<aB.length?aB[aF+2]:at.length;aI=/^on|^style$/i.test(at.substring(ax,aD))}else{if(av===s){if(aI){ax=aB[aF];aD=aF+2<aB.length?aB[aF+2]:at.length;var aG=at.substring(ax,aD);var au=aG.length;var aA=(au>=2&&/^[\"\']/.test(aG)&&aG.charAt(0)===aG.charAt(au-1));var aw;var ay;var aC;if(aA){ay=ax+1;aC=aD-1;aw=aG}else{ay=ax+1;aC=aD-1;aw=aG.substring(1,aG.length-1)}var aH=af(aw);for(var aE=0,az=aH.length;aE<az;aE+=2){aH[aE]+=ay}if(aA){aH.push(aC,s);N(aH,aB,aF+2,0)}else{N(aH,aB,aF,2)}}aI=false}}}return aB}function l(au){var at=ae(au);at=I(au,at);at=aj(au,at);at=c(au,at);return at}function P(aJ,au,ay){var aB=[];var aI=0;var ax=null;var aC=null;var av=0;var aH=0;var az=ag(PR_TAB_WIDTH);var aw=/([\r\n ]) /g;var aF=/(^| ) /gm;var aA=/\r\n?|\n/g;var aD=/[ \r\n]$/;var aE=true;function aG(aK){if(aK>aI){if(ax&&ax!==aC){aB.push("</span>");ax=null}if(!ax&&aC){ax=aC;aB.push('<span class="',ax,'">')}var aL=r(az(aJ.substring(aI,aK))).replace(aE?aF:aw,"$1&nbsp;");aE=aD.test(aL);aB.push(aL.replace(aA,"<br />"));aI=aK}}while(true){var at;if(av<au.length){if(aH<ay.length){at=au[av]<=ay[aH]}else{at=true}}else{at=false}if(at){aG(au[av]);if(ax){aB.push("</span>");ax=null}aB.push(au[av+1]);av+=2}else{if(aH<ay.length){aG(ay[aH]);aC=ay[aH+1];aH+=2}else{break}}}aG(aJ.length);if(ax){aB.push("</span>")}return aB.join("")}var A={};function g(av,aw){for(var at=aw.length;--at>=0;){var au=aw[at];if(!A.hasOwnProperty(au)){A[au]=av}else{if("console" in window){console.log("cannot override language handler %s",au)}}}}g(af,["default-code"]);g(l,["default-markup","html","htm","xhtml","xml","xsl"]);g(m({keywords:p,hashComments:true,cStyleComments:true}),["c","cc","cpp","cs","cxx","cyc"]);g(m({keywords:G,cStyleComments:true}),["java"]);g(m({keywords:aa,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);g(m({keywords:ab,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);g(m({keywords:y,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);g(m({keywords:k,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);g(m({keywords:F,cStyleComments:true,regexLiterals:true}),["js"]);function H(ay,aw){try{var az=B(ay);var av=az.source;var at=az.tags;if(!A.hasOwnProperty(aw)){aw=/^\s*</.test(av)?"default-markup":"default-code"}var au=A[aw].call({},av);return P(av,at,au)}catch(ax){if("console" in window){console.log(ax);console.trace()}return ay}}function f(az){var aA=_pr_isIE6();var au=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")];var ay=[];for(var aw=0;aw<au.length;++aw){for(var av=0;av<au[aw].length;++av){ay.push(au[aw][av])}}au=null;var at=0;function ax(){var aG=(PR_SHOULD_USE_CONTINUATION?new Date().getTime()+250:Infinity);for(;at<ay.length&&new Date().getTime()<aG;at++){var aH=ay[at];if(aH.className&&aH.className.indexOf("prettyprint")>=0){var aD=aH.className.match(/\blang-(\w+)\b/);if(aD){aD=aD[1]}var aM=false;for(var aB=aH.parentNode;aB;aB=aB.parentNode){if((aB.tagName==="pre"||aB.tagName==="code"||aB.tagName==="xmp")&&aB.className&&aB.className.indexOf("prettyprint")>=0){aM=true;break}}if(!aM){var aJ=b(aH);aJ=aJ.replace(/(?:\r\n?|\n)$/,"");var aN=H(aJ,aD);if(!R(aH)){aH.innerHTML=aN}else{var aC=document.createElement("PRE");for(var aF=0;aF<aH.attributes.length;++aF){var aO=aH.attributes[aF];if(aO.specified){var aK=aO.name.toLowerCase();if(aK==="class"){aC.className=aO.value}else{aC.setAttribute(aO.name,aO.value)}}}aC.innerHTML=aN;aH.parentNode.replaceChild(aC,aH);aH=aC}if(aA&&aH.tagName==="PRE"){var aI=aH.getElementsByTagName("br");for(var aE=aI.length;--aE>=0;){var aL=aI[aE];aL.parentNode.replaceChild(document.createTextNode("\r\n"),aL)}}}}}if(at<ay.length){setTimeout(ax,250)}else{if(az){az()}}}ax()}window.PR_normalizedHtml=an;window.prettyPrintOne=H;window.prettyPrint=f;window.PR={createSimpleLexer:j,registerLangHandler:g,sourceDecorator:m,PR_ATTRIB_NAME:ao,PR_ATTRIB_VALUE:s,PR_COMMENT:o,PR_DECLARATION:U,PR_KEYWORD:L,PR_LITERAL:Y,PR_NOCODE:ak,PR_PLAIN:V,PR_PUNCTUATION:ah,PR_SOURCE:ad,PR_STRING:O,PR_TAG:q,PR_TYPE:al}})(); \ No newline at end of file
diff --git a/templates/content/js/com.cnprog.utils.js b/templates/content/js/com.cnprog.utils.js
index a5f0e982..683b7a3f 100644
--- a/templates/content/js/com.cnprog.utils.js
+++ b/templates/content/js/com.cnprog.utils.js
@@ -1,5 +1,6 @@
var showMessage = function(object, msg) {
- var div = $('<div class="vote-notification"><h3>' + msg + '</h3>(点击消息框关闭)</div>');
+ var div = $('<div class="vote-notification"><h3>' + msg + '</h3>('
+ + $.i18n._('click to close') + ')</div>');
div.click(function(event) {
$(".vote-notification").fadeOut("fast", function() { $(this).remove(); });
@@ -33,7 +34,12 @@ var notify = function() {
} ();
function appendLoader(containerSelector) {
- $(containerSelector).append('<img class="ajax-loader" src="/content/images/indicator.gif" title="读取中..." alt="读取中..." />');
+ $(containerSelector).append('<img class="ajax-loader" '
+ +'src="/content/images/indicator.gif" title="'
+ +$.i18n._('loading...')
+ +'" alt="'
+ +$.i18n._('loading...')
+ +'" />');
}
function removeLoader() {
@@ -96,16 +102,16 @@ var CPValidator = function(){
getQuestionFormMessages: function(){
return {
tags: {
- required: " 标签不能为空。",
- maxlength: " 最多5个标签,每个标签长度小于20个字符。"
+ required: " " + $.i18n._('tags cannot be empty'),
+ maxlength: " " + $.i18n._('tablimits info'),
},
text: {
- required: " 内容不能为空。",
- minlength: jQuery.format(" 请输入至少 {0} 字符。")
+ required: " " + $.i18n._('content cannot be empty'),
+ minlength: jQuery.format(' ' + $.i18n._('content minchars'))
},
title: {
- required: " 请输入标题。",
- minlength: jQuery.format(" 请输入至少 {0} 字符。")
+ required: " " + $.i18n._('please enter title'),
+ minlength: jQuery.format(' ' + $.i18n._('title minchars'))
}
};
}
diff --git a/templates/content/js/jquery.i18n.js b/templates/content/js/jquery.i18n.js
new file mode 100644
index 00000000..0a155a31
--- /dev/null
+++ b/templates/content/js/jquery.i18n.js
@@ -0,0 +1,133 @@
+/*
+ * jQuery i18n plugin
+ * @requires jQuery v1.1 or later
+ *
+ * Examples at: http://recurser.com/articles/2008/02/21/jquery-i18n-translation-plugin/
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Based on 'javascript i18n that almost doesn't suck' by markos
+ * http://markos.gaivo.net/blog/?p=100
+ *
+ * Revision: $Id$
+ * Version: 1.0.0 Feb-10-2008
+ */
+ (function($) {
+/**
+ * i18n provides a mechanism for translating strings using a jscript dictionary.
+ *
+ */
+
+
+/*
+ * i18n property list
+ */
+$.i18n = {
+
+/**
+ * setDictionary()
+ * Initialise the dictionary and translate nodes
+ *
+ * @param property_list i18n_dict : The dictionary to use for translation
+ */
+ setDictionary: function(i18n_dict) {
+ i18n_dict = i18n_dict;
+ },
+
+/**
+ * _()
+ * The actual translation function. Looks the given string up in the
+ * dictionary and returns the translation if one exists. If a translation
+ * is not found, returns the original word
+ *
+ * @param string str : The string to translate
+ * @param property_list params : params for using printf() on the string
+ * @return string : Translated word
+ *
+ */
+ _: function (str, params) {
+ var transl = str;
+ if (i18n_dict&& i18n_dict[str]) {
+ transl = i18n_dict[str];
+ }
+ return this.printf(transl, params);
+ },
+
+/**
+ * toEntity()
+ * Change non-ASCII characters to entity representation
+ *
+ * @param string str : The string to transform
+ * @return string result : Original string with non-ASCII content converted to entities
+ *
+ */
+ toEntity: function (str) {
+ var result = '';
+ for (var i=0;i<str.length; i++) {
+ if (str.charCodeAt(i) > 128)
+ result += "&#"+str.charCodeAt(i)+";";
+ else
+ result += str.charAt(i);
+ }
+ return result;
+ },
+
+/**
+ * stripStr()
+ *
+ * @param string str : The string to strip
+ * @return string result : Stripped string
+ *
+ */
+ stripStr: function(str) {
+ return str.replace(/^\s*/, "").replace(/\s*$/, "");
+ },
+
+/**
+ * stripStrML()
+ *
+ * @param string str : The multi-line string to strip
+ * @return string result : Stripped string
+ *
+ */
+ stripStrML: function(str) {
+ // Split because m flag doesn't exist before JS1.5 and we need to
+ // strip newlines anyway
+ var parts = str.split('\n');
+ for (var i=0; i<parts.length; i++)
+ parts[i] = stripStr(parts[i]);
+
+ // Don't join with empty strings, because it "concats" words
+ // And strip again
+ return stripStr(parts.join(" "));
+ },
+
+/*
+ * printf()
+ * C-printf like function, which substitutes %s with parameters
+ * given in list. %%s is used to escape %s.
+ *
+ * Doesn't work in IE5.0 (splice)
+ *
+ * @param string S : string to perform printf on.
+ * @param string L : Array of arguments for printf()
+ */
+ printf: function(S, L) {
+ if (!L) return S;
+
+ var nS = "";
+ var tS = S.split("%s");
+
+ for(var i=0; i<L.length; i++) {
+ if (tS[i].lastIndexOf('%') == tS[i].length-1 && i != L.length-1)
+ tS[i] += "s"+tS.splice(i+1,1)[0];
+ nS += tS[i] + L[i];
+ }
+ return nS + tS[tS.length-1];
+ }
+
+};
+
+
+})(jQuery);
diff --git a/templates/content/js/wmd/wmd.js b/templates/content/js/wmd/wmd.js
index d83780d6..7b611dba 100644
--- a/templates/content/js/wmd/wmd.js
+++ b/templates/content/js/wmd/wmd.js
@@ -27,18 +27,18 @@ Attacklab.wmdBase = function(){
global.isOpera = /opera/.test(nav.userAgent.toLowerCase());
global.isKonqueror = /konqueror/.test(nav.userAgent.toLowerCase());
- var toolbar_strong_label = "粗体 <strong> Ctrl-B";
- var toolbar_emphasis_label = "斜体 <em> Ctrl-I";
- var toolbar_hyperlink_label = "超链接 <a> Ctrl-L";
- var toolbar_blockquote_label = "引用 <blockquote> Ctrl-.";
- var toolbar_code_label = "代码 <pre><code> Ctrl-K";
- var toolbar_image_label = "图片 <img> Ctrl-G";
- var toolbar_numbered_label = "数字编号列表 <ol> Ctrl-O";
- var toolbar_bulleted_label = "项目符号列表 <ul> Ctrl-U";
- var toolbar_heading_label = "标题 <h1>/<h2> Ctrl-H";
- var toolbar_horizontal_label = "水平线 <hr> Ctrl-R";
- var toolbar_undo_label = "撤销 Ctrl-Z";
- var toolbar_redo_label = "重做 Ctrl-Y";
+ var toolbar_strong_label = $.i18n._('bold') + " <strong> Ctrl-B";
+ var toolbar_emphasis_label = $.i18n._('italic') + " <em> Ctrl-I";
+ var toolbar_hyperlink_label = $.i18n._('link') + " <a> Ctrl-L";
+ var toolbar_blockquote_label = $.i18n._('quote') + " <blockquote> Ctrl-.";
+ var toolbar_code_label = $.i18n._('preformatted text') + " <pre><code> Ctrl-K";
+ var toolbar_image_label = $.i18n._('image') + " <img> Ctrl-G";
+ var toolbar_numbered_label = $.i18n._('numbered list') + " <ol> Ctrl-O";
+ var toolbar_bulleted_label = $.i18n._('bulleted list') + " <ul> Ctrl-U";
+ var toolbar_heading_label = $.i18n._('heading') + " <h1>/<h2> Ctrl-H";
+ var toolbar_horizontal_label = $.i18n._('horizontal bar') + " <hr> Ctrl-R";
+ var toolbar_undo_label = $.i18n._('undo') + " Ctrl-Z";
+ var toolbar_redo_label = $.i18n._('redo') + " Ctrl-Y";
// -------------------------------------------------------------------
// YOUR CHANGES GO HERE
@@ -49,11 +49,9 @@ Attacklab.wmdBase = function(){
// The text that appears on the upper part of the dialog box when
// entering links.
- var imageDialogText = "<p style='margin-top: 0px'><b>输入图片地址</b></p><p>示例:<br />"+
- "http://www.cnprog.com/images/temp.jpg \"我的截图\"</p>";
- var linkDialogText = "<p style='margin-top: 0px'><b>输入Web地址</b></p><p>示例:<br />"+
- "http://www.cnprog.com/ \"我的网站\"</p>";
- var uploadImageHTML ="<div>或者上传本地图片:</div>" +
+ var imageDialogText = "<p style='margin-top: 0px'>" + $.i18n._('enter image url') + '</p>';
+ var linkDialogText = "<p style='margin-top: 0px'>" + $.i18n._('enter url') + '</p>';
+ var uploadImageHTML ="<div>" + $.i18n._('upload image') + "</div>" +
"<input type=\"file\" name=\"file-upload\" id=\"file-upload\" size=\"26\" "+
"onchange=\"return ajaxFileUpload($('#image-url'));\"/><br>" +
"<img id=\"loading\" src=\"/content/images/indicator.gif\" style=\"display:none;\"/>";
@@ -1079,7 +1077,7 @@ Attacklab.wmdBase = function(){
}
else {
// mac and other non-Windows platforms
- redoButton.title = "重做 - Ctrl+Shift+Z";
+ redoButton.title = $.i18n._('redo') + " - Ctrl+Shift+Z";
}
redoButton.XShift = "-220px";
redoButton.execute = function(manager){
diff --git a/templates/header.html b/templates/header.html
index 1da107b6..fb07a4c0 100644
--- a/templates/header.html
+++ b/templates/header.html
@@ -1,13 +1,15 @@
+<!-- template header.html -->
{% load extra_tags %}
{% load i18n %}
<div id="top">
<div id="header">
{% if request.user.is_authenticated %}
- <a href="/users/{{ request.user.id }}/{{ request.user.username }}/">{{ request.user.username }}</a> {% get_score_badge request.user %} <a href="/logout/">{% trans "Logout" %}</a>
+ <a href="/users/{{ request.user.id }}/{{ request.user.username }}/">{{ request.user.username }}</a> {% get_score_badge request.user %}
+ <a href="{% url user_signout %}">{% trans "logout" %}</a>
{% else %}
- <a href="/account/signin">{% trans "Login" %}</a>
+ <a href="{% url user_signin %}">{% trans "login" %}</a>
{% endif %}
- <a href="/about">{% trans "About us" %}</a>
+ <a href="/about">{% trans "about" %}</a>
<a href="/faq">{% trans "faq" %}</a>
</div>
</div>
@@ -18,24 +20,26 @@
<td width="23%">
<div id="logo">
<a href="/">
- <img src="/content/images/logo.png" title="{% trans 'link to homepage'%}" />
+ <img src="/content/images/logo.png" title="{% trans "back to home page" %}" />
</a>
</div>
</td>
<td width="77%" valign="bottom">
<div class="nav">
- <a id="nav_questions" href="/questions/" >{% trans "Questions" %}</a>
- <a id="nav_tags" href="/tags/">{% trans "Tags" %}</a>
- <a id="nav_users" href="/users/">{% trans "Users" %}</a>
- <a id="nav_books" href="/books/">{% trans "Books" %}</a>
- <a id="nav_badges" href="/badges/">{% trans "Badges" %}</a>
- <a id="nav_unanswered" href="/questions/unanswered/">{% trans "Unanswered" %}</a>
+ <a id="nav_questions" href="/questions/" >{% trans "questions" %}</a>
+ <a id="nav_tags" href="/tags/">{% trans "tags" %}</a>
+ <a id="nav_users" href="/users/">{% trans "users" %}</a>
+ <!--<a id="nav_books" href="/books/">{% trans "books" %}</a>-->
+ <a id="nav_badges" href="/badges/">{% trans "badges" %}</a>
+ <a id="nav_unanswered" href="/questions/unanswered/">{% trans "unanswered questions" %}</a>
+ {% comment %}<!-- i think this needs to be removed -e.f. -->
{% if request.user.is_authenticated %}
- <a id="nav_profile" href="/users/{{ request.user.id }}/{{ request.user.username }}/">{% trans "Profile" %}</a>
+ <a id="nav_profile" href="/users/{{ request.user.id }}/{{ request.user.username }}/">{% trans "my profile" %}</a>
{% endif %}
+ {% endcomment %}
<div class="focus">
- <a id="nav_ask" href="/questions/ask/" class="special">{% trans "Ask a question" %}</a>
+ <a id="nav_ask" href="/questions/ask/" class="special">{% trans "ask a question" %}</a>
</div>
</div>
@@ -50,12 +54,12 @@
<form action="/search/" method="GET">
<div>
<input type="text" class="searchInput" value="{{ keywords }}" name="q" id="keywords" >
- <input type="submit" name="Submit" value="{% trans 'Search' %}" class="searchBtn" >
+ <input type="submit" name="Submit" value="{% trans "search" %}" class="searchBtn" >
</div>
<div class="options">
- <input id="type-question" type="radio" class="" value="question" name="t" checked >{% trans "Questions" %}
- <input id="type-tag" type="radio" class="" value="tag" name="t" >{% trans "Tags" %}
- <input id="type-user" type="radio" class="" value="user" name="t" >{% trans "Users" %}
+ <input id="type-question" type="radio" class="" value="question" name="t" checked >{% trans "questions" %}
+ <input id="type-tag" type="radio" class="" value="tag" name="t" >{% trans "tags" %}
+ <input id="type-user" type="radio" class="" value="user" name="t" >{% trans "users" %}
</div>
</form>
</td>
@@ -63,3 +67,4 @@
</table>
</div>
</div>
+<!-- end template header.html -->
diff --git a/templates/index.html b/templates/index.html
index ba3e2229..db2bb12e 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,8 +1,8 @@
{% extends "base.html" %}
+{% load i18n %}
{% load extra_tags %}
{% load humanize %}
{% load extra_filters %}
-{% load i18n %}
{% block title %}{% spaceless %}{% trans "Home" %}{% endspaceless %}{% endblock %}
{% block meta %}<meta name="keywords" content="{{ APP_KEYWORDS }}" />
<meta name="description" content="{{ APP_DESCRIPTION }}" />{% endblock %}
@@ -20,12 +20,13 @@
<div class="tabBar">
<div class="headQuestions">{% trans "Questions" %}</div>
<div class="tabsA">
- <a id="latest" href="?sort=latest" title="{% trans 'Newest updated questions' %}" >{% trans "Newest" %}</a>
- <a id="hottest" href="?sort=hottest" title="{% trans 'Questions with most answers' %}" >{% trans "Hottest" %}</a>
- <a id="mostvoted" href="?sort=mostvoted" title="{% trans 'Questions with most votes' %}" >{% trans "Best" %}</a>
- <a id="all" href="/questions/" title="{% trans 'All questions' %}" >{% trans "All" %}</a>
+ <a id="latest" href="?sort=latest" title="{% trans "last updated questions" %}" >{% trans "newest" %}</a>
+ <a id="hottest" href="?sort=hottest" title="{% trans "hottest questions" %}" >{% trans "hottest" %}</a>
+ <a id="mostvoted" href="?sort=mostvoted" title="{% trans "most voted questions" %}" >{% trans "most voted" %}</a>
+ <a id="all" href="/questions/" title="{% trans "all questions" %}" >{% trans "all questions" %}</a>
</div>
</div>
+<!-- 问题列表 -->
<div id="listA">
{% for question in questions %}
<div class="qstA">
@@ -42,9 +43,9 @@
<td><span class="num">{{ question.view_count|cnprog_intword|safe }}</span> </td>
</tr>
<tr>
- <td><span class="unit">{% trans "Answers" %}</span></td>
- <td><span class="unit">{% trans "Votes" %}</span></td>
- <td><span class="unit">{% trans "Visits" %}</span></td>
+ <td><span class="unit">{% trans "answers" %}</span></td>
+ <td><span class="unit">{% trans "votes" %}</span></td>
+ <td><span class="unit">{% trans "views" %}</span></td>
</tr>
</table>
</div>
@@ -52,7 +53,7 @@
{{ question.summary }}...
</div>
{% if question.wiki %}
- <span class="from wiki">{% trans "Community wiki" %}</span>
+ <span class="from wiki">{% trans "community wiki" %}</span>
<span class="date" title="{{ question.last_activity_at }}">{% diff_date question.last_activity_at %}</span>
{% else %}
<div class="from">
@@ -64,7 +65,7 @@
{% endif %}
<div class="tags">
{% for tag in question.tagname_list %}
- <a href="{% url forum.views.tag tag|urlencode %}" title="{% trans 'Browse questions with tag of ' %}'{{ tag }}'" rel="tag">{{ tag }}</a>
+ <a href="{% url forum.views.tag tag|urlencode %}" title="{% trans "see questions tagged" %}'{{ tag }}'{% trans "using tags" %}" rel="tag">{{ tag }}</a>
{% endfor %}
</div>
</div>
@@ -75,11 +76,11 @@
{% block sidebar %}
{% if not request.user.is_authenticated %}
<div class="boxA">
- <h3>{% trans "Welcome" %}</h3>
+ <h3>{% trans "welcome to website" %}</h3>
<div class="body">
- {{ APP_INTRO|safe }}
- <div class="more"><a href="/about">{% trans "About us" %} »</a></div>
- <div class="more"><a href="/faq">FAQ »</a></div>
+ {{ APP_INTRO|safe }}
+ <div class="more"><a href="/about">{% trans "about" %} »</a></div>
+ <div class="more"><a href="/faq">{% trans "faq" %} »</a></div>
</div>
</div>
{% endif %}
@@ -88,33 +89,34 @@
<div class="body">
<p class="tagsbox">
{% for tag in tags %}
- <a rel="tag" title="{% trans 'Browse questions with tag of ' %}'{{ tag.name }}'" href="{% url forum.views.tag tag.name|urlencode %}">{{ tag.name }}</a>
+ <a rel="tag"
+ title="{% blocktrans with tag.name as tagname %}see questions tagged '{{tagname}}'{% endblocktrans %}" href="{% url forum.views.tag tag.name|urlencode %}">{{ tag.name }}</a>
{% endfor %}
</p>
- <div class="more"><a href="/tags">{% trans "Popular tags" %} »</a> </div>
+ <div class="more"><a href="/tags">{% trans "popular tags" %} »</a> </div>
</div>
</div>
<div class="boxB">
- <h3>{% trans "Recent badges" %}</h3>
+ <h3>{% trans "Recent awards" %}</h3>
<div class="body">
<ul class="badge-list">
{% for award in awards %}
<li>
<a href="/badges/{{award.badge_id}}/{{award.badge_name}}" title="{{ award.badge_description }}" class="medal">
- <span class="badge{{ award.badge_type }}">&#9679;</span>&nbsp;{{ award.badge_name }}</a>
+ <span class="badge{{ award.badge_type }}">&#9679;</span>&nbsp;{{ award.badge_name }}</a> {% trans "given to" %}
<a href="/users/{{award.user_id}}/{{award.user_name}}">{{ award.user_name }}</a>
</li>
{% endfor %}
</ul>
- <div class="more"><a href="/badges/">{% trans "All badges" %} »</a> </div>
+ <div class="more"><a href="/badges/">{% trans "all awards" %} »</a> </div>
</div>
</div>
<div id="feeds">
-<a href="/feeds/rss" title="{% trans 'RSS feed of recent 30 questions' %}">{% trans "Subscribe" %}</a>
+<a href="/feeds/rss" title="{% trans "subscribe to last 30 questions by RSS" %}">{% trans "subscribe to the questions feed" %}</a>
</div>
{% endblock %}
{% block tail %}
<div style="padding:5px 0 5px 5px;">
-<span class="evenMore">{% trans "Are you looking for more questions? Try to browse" %} <a href="/questions/">{% trans "All questions" %}</a>{% trans " or "%} <a href="/tags/">{% trans "Popular tags" %}</a>{% trans ". Please help us answer "%}<a href="/questions/unanswered">{% trans "Unanswered questions" %}</a></span>
+<span class="evenMore">{% trans "Still looking for more? See" %} <a href="/questions/">{% trans "complete list of quesionts" %}</a>, {% trans "or" %} <a href="/tags/">{% trans "popular tags" %}</a>{% trans "." %} {% trans "Please help us answer" %} <a href="/questions/unanswered">{% trans "unanswered questions" %}</a>{% trans "." %}</span>
</div>
{% endblock %}
diff --git a/templates/logout.html b/templates/logout.html
index 48a2deaf..6270924a 100644
--- a/templates/logout.html
+++ b/templates/logout.html
@@ -1,3 +1,4 @@
+<!-- template logout.html -->
{% extends "base_content.html" %}
{% load extra_tags %}
{% load humanize %}
@@ -6,20 +7,19 @@
{% block forejs %}
<script type="text/javascript">
$().ready(function(){
- $('#btLogout').bind('click', function(){ window.location.href='/account/signout/?next={{ next }}'; });
+ $('#btLogout').bind('click', function(){ window.location.href='{% url user_signout %}?next={{ next }}'; });
});
</script>
{% endblock %}
{% block content %}
<div class="headNormal">
- {% trans "Logout" %}
+ {% trans "Logout" %}
</div>
<div id="main-body" style="width:100%">
- <input id="btLogout" type="button" class="submit" value="OK" style="width:150px">
+ <p>{% trans "As a registered user you can login with your OpenID, log out of the site or permanently remove your account." %}</p>
+ <input id="btLogout" type="button" class="submit" value="{% trans "Logout now" %}"><!-- style="width:150px">-->
<br><br>
</div>
{% endblock %}
-
-
-
+<!-- ent template logout.html -->
diff --git a/templates/privacy.html b/templates/privacy.html
index b0f02cd7..335aba92 100644
--- a/templates/privacy.html
+++ b/templates/privacy.html
@@ -1,40 +1,43 @@
+<!-- privacy.html -->
{% extends "base_content.html" %}
{% load extra_tags %}
+{% load i18n %}
{% load humanize %}
-{% block title %}{% spaceless %}隐私政策{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Privacy policy" %}{% endspaceless %}{% endblock %}
{% block forejs %}
{% endblock %}
{% block content %}
<div class="headNormal">
- 隐私政策
+ {% trans "Privacy policy" %}
</div>
<div id="main-body" style="width:100%">
<p>
- CNProg承认用户隐私的重要性。本文件概述在您浏览CNProg过程中所接收和收集的个人信息的种类,以及CNProg所采取的保护信息的一些措施。CNProg希望这将有助于您在知情的情况下,就和我们共享个人信息的问题作出决定。
+ {% trans "general message about privacy" %}
</p>
- <h3 class="subtitle">网站访问者</h3>
- <p> 当您访问本网站或使用我们的某些在线服务时,服务器会自动记录信息,包括但不限于URL、IP地址、浏览器的类型、屏幕分辨率、系统类型和使用的语言以及访问日期和时间。我们的目的是为了向您提供更好的用户服务,包括可能为您提供定制的在线服务。
+ <h3 class="subtitle">{% trans "Site Visitors" %}</h3>
+ <p>
+ {% trans "what technical information is collected about visitors" %}
</p>
- <h3 class="subtitle">个人身份信息</h3>
- <p> 在登录使用CNProg的提问和回答功能时,我们要求使用者提供用户名、密码、电子邮件等信息。CNProg收集这类关于个人身份的信息只是为了登录系统获得使用功能的目的。我们不会向任何其他社区用户、个人或第三方透露您的密码或者电子邮件信息。用户可以选择性地填写用户资料、个人网站、年龄、城市等信息,我们收集这些内容为了使用户能够更容易和更满意地使用CNProg提供的网页和服务。
+ <h3 class="subtitle">{% trans "Personal Information" %}</h3>
+ <p>
+ {% trans "details on personal information policies" %}
</p>
- <h3 class="subtitle">其他服务</h3>
- <p> CNProg可能会收集和统计用户访问本站的概况数据。例如,CNProg可能会检测网站最流行的部分功能。CNProg可能会公开显示或者提供给第三方使用该数据。但是,CNProg不会公开您的身份信息。
+ <h3 class="subtitle">{% trans "Other Services" %}</h3>
+ <p>
+ {% trans "details on sharing data with third parties" %}
</p>
- <h3 class="subtitle">Cookie</h3>
- <p> 访问CNProg时,我们会向您的计算机发送一个或多个专门用于识别您的浏览器的Cookie(包含一个字符串的小文件)。 使用 Cookie 的目的是通过储存用户偏好、跟踪用户倾向(例如搜索方法)来提高我们的服务质量。大多数浏览器的初始设置均为接受 Cookie,但也可以将其重置为拒绝所有 Cookie 或在收到 Cookie 时提示。不过,如果禁用 Cookie,某些功能和服务可能无法正常运行。
+ <h3 class="subtitle">Cookies</h3>
+ <p>
+ {% trans "cookie policy details" %}
</p>
-
- <h3 class="subtitle">政策更改</h3>
- <p> 我们可能在事先通知或不通知的情况下随时更改此"隐私政策",我们建议用户时常查看CNProg隐私政策的改动,在任何改动生效后您的继续访问和使用本站,我们假设您已同意了CNProg以上的所有条款。
+ <h3 class="subtitle">{% trans "Policy Changes" %}</h3>
+ <p>{% trans "how privacy policies can be changed" %}
</p>
<br><br>
</div>
{% endblock %}
-
-
-
+<!-- end privacy.html -->
diff --git a/templates/question.html b/templates/question.html
index 9cbe1664..5ba08b63 100644
--- a/templates/question.html
+++ b/templates/question.html
@@ -1,13 +1,15 @@
+<!-- question.html -->
{% extends "base.html" %}{% load extra_tags %}{% load extra_filters %}{% load humanize %}
+{% load i18n %}
{% block title %}{% spaceless %}{{ question.get_question_title }}{% endspaceless %}{% endblock %}
{% block forejs %}
{% if not question.closed and request.user.is_authenticated %}
<script type='text/javascript' src='/content/js/com.cnprog.editor.js'></script>
- <script type='text/javascript' src='/content/js/wmd/showdown-min.js'></script>
- <script type='text/javascript' src='/content/js/wmd/wmd-min.js'></script>
+ <script type='text/javascript' src='/content/js/wmd/showdown.js'></script>
+ <script type='text/javascript' src='/content/js/wmd/wmd.js'></script>
<link rel="stylesheet" type="text/css" href="/content/js/wmd/wmd.css" />
{% endif %}
- <script type='text/javascript' src='/content/js/com.cnprog.post.pack.js'></script>
+ <script type='text/javascript' src='/content/js/com.cnprog.post.js'></script>
<script type='text/javascript' src='/content/js/jquery.validate.pack.js'></script>
<script type="text/javascript">
// define reputation needs for comments
@@ -32,10 +34,10 @@
captureLength: 5, callback: lanai.highlightSyntax});
var display = true;
- var txt = "[禁用预览]";
+ var txt = "[{% trans "hide preview" %}]";
$('#pre-collapse').text(txt);
$('#pre-collapse').bind('click', function(){
- txt = display ? "[启用预览]" : "[禁用预览]";
+ txt = display ? "[{% trans "show preview" %}]" : "[{% trans "hide preview" %}]";
display = !display;
$('#previewer').toggle();
$('#pre-collapse').text(txt);
@@ -59,29 +61,39 @@
<td style="width:30px;vertical-align:top">
<div class="vote-buttons">
{% if question_vote %}
- <img id="question-img-upvote-{{ question.id }}" class="question-img-upvote" src="/content/images/vote-arrow-up{% if question_vote.is_upvote %}-on{% endif %}.png" title="这篇帖子有价值(再次点击取消操作)" >
- <div id="question-vote-number-{{ question.id }}" class="vote-number" title="当前总票数">
+ <img id="question-img-upvote-{{ question.id }}" class="question-img-upvote"
+ src="/content/images/vote-arrow-up{% if question_vote.is_upvote %}-on{% endif %}.png"
+ title="{% trans "i like this post (click again to cancel)" %}" >
+ <div id="question-vote-number-{{ question.id }}" class="vote-number"
+ title="{% trans "current number of votes" %}">
{{ question.score }}
</div>
- <img id="question-img-downvote-{{ question.id }}" class="question-img-downvote" src="/content/images/vote-arrow-down{% if question_vote.is_downvote %}-on{% endif %}.png" title="这篇帖子没有价值(再次点击取消操作)" >
+ <img id="question-img-downvote-{{ question.id }}" class="question-img-downvote"
+ src="/content/images/vote-arrow-down{% if question_vote.is_downvote %}-on{% endif %}.png"
+ title="{% trans "i dont like this post (click again to cancel)" %}" >
{% else %}
- <img id="question-img-upvote-{{ question.id }}" class="question-img-upvote" src="/content/images/vote-arrow-up.png" title="这篇帖子有价值(再次点击取消操作)" >
- <div id="question-vote-number-{{ question.id }}" class="vote-number" title="当前总票数">
+ <img id="question-img-upvote-{{ question.id }}" class="question-img-upvote"
+ src="/content/images/vote-arrow-up.png"
+ title="{% trans "i like this post (click again to cancel)" %}" >
+ <div id="question-vote-number-{{ question.id }}" class="vote-number"
+ title="{% trans "current number of votes" %}">
{{ question.score }}
</div>
- <img id="question-img-downvote-{{ question.id }}" class="question-img-downvote" src="/content/images/vote-arrow-down.png" title="这篇帖子没有价值(再次点击取消操作)" >
+ <img id="question-img-downvote-{{ question.id }}" class="question-img-downvote"
+ src="/content/images/vote-arrow-down.png" title="{% trans "i dont like this post (click again to cancel)" %}" >
{% endif %}
<br><br>
{% if favorited %}
- <img class="question-img-favorite" src="/content/images/vote-favorite-on.png" title="我要收藏这个问题(再次点击取消操作)" >
+ <img class="question-img-favorite" src="/content/images/vote-favorite-on.png"
+ title="{% trans "mark this question as favorite (click again to cancel)" %}" >
<div id="favorite-number" class="favorite-number my-favorite-number">
{{ question.favourite_count }}
</div>
{% else %}
- <img class="question-img-favorite" src="/content/images/vote-favorite-off.png" title="我要收藏这个问题(再次点击取消操作)" >
-
+ <img class="question-img-favorite" src="/content/images/vote-favorite-off.png"
+ title="{% trans "remove favorite mark from this question (click again to restore mark)" %}" >
<div id="favorite-number" class="favorite-number">{% ifnotequal question.favourite_count 0 %}{{ question.favourite_count }}{% endifnotequal %}
</div>
@@ -96,7 +108,8 @@
</div>
<div id="question-tags" class="tags" >
{% for tag in question.tagname_list %}
- <a href="{% url forum.views.tag tag|urlencode %}" class="post-tag" title="查看有关'{{ tag }}'的问题" rel="tag">{{ tag }}</a>
+ <a href="{% url forum.views.tag tag|urlencode %}" class="post-tag"
+ title="{% trans "see questions tagged" %}'{{ tag }}'{% trans "using tags" %}" rel="tag">{{ tag }}</a>
{% endfor %}
</div>
<div id="question-controls" style="clear:both;">
@@ -105,27 +118,30 @@
<td width="210px" style="vertical-align:top">
{% if request.user|can_edit_post:question %}
- <span class="action-link"><a href="{% url edit_question question.id %}">编辑</a></span>
+ <span class="action-link"><a href="{% url edit_question question.id %}">{% trans 'edit' %}</a></span>
<span class="action-link-separator">|</span>
{% endif %}
{% if request.user|can_delete_post:question %}
- <span class="action-link"><a id="question-delete-link-{{question.id}}">删除</a></span>
+ <span class="action-link"><a id="question-delete-link-{{question.id}}">{% trans "delete" %}</a></span>
<span class="action-link-separator">|</span>
{% endif %}
{% if question.closed %}
{% if request.user|can_reopen_question:question %}
- <span class="action-link"><a href="{% url reopen question.id %}">打开</a></span>
+ <span class="action-link"><a href="{% url reopen question.id %}">{% trans "reopen" %}</a></span>
<span class="action-link-separator">|</span>
{% endif %}
{% else %}
{% if request.user|can_close_question:question %}
- <span class="action-link"><a href="{% url close question.id %}">关闭</a></span>
+ <span class="action-link"><a href="{% url close question.id %}">{% trans "close" %}</a></span>
<span class="action-link-separator">|</span>
{% endif %}
{% endif %}
- <span id="question-offensive-flag-{{ question.id }}" class="offensive-flag" title="检举该帖为垃“水帖”(含广告、人身攻击、恶意言论等)"><a>垃圾帖?</a><span class="darkred">{% if request.user|can_view_offensive_flags %}{% if question.offensive_flag_count %}({{ question.offensive_flag_count }}){% endif %}{% endif %}</span>
-
+ <span id="question-offensive-flag-{{ question.id }}" class="offensive-flag"
+ title="{% trans "report as offensive (i.e containing spam, advertising, malicious text, etc.)" %}">
+ <a>{% trans "flag offensive" %}</a>
+ <span class="darkred">{% if request.user|can_view_offensive_flags %}
+ {% if question.offensive_flag_count %}({{ question.offensive_flag_count }}){% endif %}{% endif %}</span>
</span>
</td>
@@ -135,7 +151,7 @@
<table width="200px" >
<tr>
<td colspan="2">
- 更新于<a href="{% url question_revisions question.id %}"><strong title="{{question.last_edited_at }}">{% diff_date question.last_edited_at %}</strong></a>
+ {% trans "updated" %} <a href="{% url question_revisions question.id %}"><strong title="{{question.last_edited_at }}">{% diff_date question.last_edited_at %}</strong></a>
</td>
</tr>
@@ -177,14 +193,14 @@
</td>
<td style="vertical-align:top">
{% if question.wiki %}
- <span class="wiki-category">社区Wiki</span>
+ <span class="wiki-category">{% trans "community wiki" %}</span>
<div style="margin-bottom:10px"></div>
{% else %}
<div class="question-mark">
<table width="200px">
<tr>
<td colspan="2">
- 提问于<strong title="{{ question.added_at }}">{% diff_date question.added_at %}</strong>
+ {% trans "asked" %} <strong title="{{ question.added_at }}">{% diff_date question.added_at %}</strong>
</td>
</tr>
@@ -213,7 +229,10 @@
<div class="post-comments" style="margin-bottom:20px">
<input id="can-post-comments-question-{{question.id}}" type="hidden" value="{{ request.user|can_add_comments }}"/>
- <a id="comments-link-question-{{question.id}}" class="comments-link">{% if question.comment_count %}评论 <strong>({{question.comment_count}})</strong>{% else %}添加评论{% endif %}</a>
+ <a id="comments-link-question-{{question.id}}" class="comments-link">
+ {% if question.comment_count %}{% trans "comments" %} <strong>({{question.comment_count}})</strong>
+ {% else %}{% trans "add comment" %}
+ {% endif %}</a>
<div id="comments-question-{{question.id}}" class="comments-container">
<div class="comments"/></div>
</div>
@@ -225,41 +244,49 @@
</table>
{% if question.closed %}
<div class="question-status" style="margin-bottom:15px">
- <h3>问题以“{{ question.get_close_reason_display }}”的原因已被 <a href="{{ question.closed_by.get_profile_url }}">{{ question.closed_by.username }}</a> 于{% diff_date question.closed_at %}<font class="darkred">关闭</font></h3>
+ <h3>{% blocktrans %}The question has been closed for the following reason "{{ question.get_close_reason_display }}" by{% endblocktrans %}
+ <a href="{{ question.closed_by.get_profile_url }}">{{ question.closed_by.username }}</a>
+ {% blocktrans %}close date {{question.closed_at}}{% endblocktrans %}</h3>
</div>
{% endif %}
{% ifnotequal question.answer_count 0 %}
<div class="tabBar">
<a name="sort-top"></a>
- <div class="headQuestions">{{ question.answer_count }}个回答:</div>
+ <div class="headQuestions">{{ question.answer_count }}{% trans "Answers" %}:</div>
<div class="tabsA">
- <a id="oldest" href="?sort=oldest#sort-top" title="最先回答显示在最前面">最先回答</a>
- <a id="latest" href="?sort=latest#sort-top" title="最晚回答显示在最前面">最近回答</a>
- <a id="votes" href="?sort=votes#sort-top" title="投票次数最多的显示在最前面">投票最多</a>
+ <a id="oldest" href="?sort=oldest#sort-top" title="{% trans "oldest answers will be shown first" %}">{% trans "oldest answers" %}</a>
+ <a id="latest" href="?sort=latest#sort-top" title="{% trans "newest answers will be shown first" %}">{% trans "newest answers" %}</a>
+ <a id="votes" href="?sort=votes#sort-top" title="{% trans "most voted answers will be shown first" %}">{% trans "popular answers" %}</a>
</div>
</div>
{% cnprog_paginator context %}
{% for answer in answers %}
<a name="{{ answer.id }}"></a>
- <div id="answer-container-{{ answer.id }}" class="answer {% if answer.accepted %}accepted-answer{% endif %}{% if answer.deleted %}deleted{% endif %} {% ifequal answer.author_id question.author_id %} answered-by-owner{% endifequal %}">
+ <div id="answer-container-{{ answer.id }}" class="answer {% if answer.accepted %}accepted-answer{% endif %} {% ifequal answer.author_id question.author_id %} answered-by-owner{% endifequal %} {% if answer.deleted %}deleted{% endif %}">
<table style="width:100%;">
<tr>
<td style="width:30px;vertical-align:top">
<div class="vote-buttons">
- <img id="answer-img-upvote-{{ answer.id }}" class="answer-img-upvote" src="/content/images/vote-arrow-up{% get_user_vote_image user_answer_votes answer.id 1 %}.png" title="这篇帖子有价值(再次点击取消操作)" >
- <div id="answer-vote-number-{{ answer.id }}" class="vote-number" title="当前总票数">
+ <img id="answer-img-upvote-{{ answer.id }}" class="answer-img-upvote" src="/content/images/vote-arrow-up{% get_user_vote_image user_answer_votes answer.id 1 %}.png" title="{% trans "i like this answer (click again to cancel)" %}">
+ <div id="answer-vote-number-{{ answer.id }}" class="vote-number" title="{% trans "current number of votes" %}">
{{ answer.score }}
</div>
- <img id="answer-img-downvote-{{ answer.id }}" class="answer-img-downvote" src="/content/images/vote-arrow-down{% get_user_vote_image user_answer_votes answer.id -1 %}.png" title="这篇帖子没有价值(再次点击取消操作)" >
+ <img id="answer-img-downvote-{{ answer.id }}" class="answer-img-downvote"
+ src="/content/images/vote-arrow-down{% get_user_vote_image user_answer_votes answer.id -1 %}.png"
+ title="{% trans "i dont like this answer (click again to cancel)" %}" >
<br><br>
{% ifequal request.user question.author %}
- <img id="answer-img-accept-{{ answer.id }}" class="answer-img-accept" src="/content/images/vote-accepted{% if answer.accepted %}-on{% endif %}.png" title="最佳答案(再次点击取消操作)" >
+ <img id="answer-img-accept-{{ answer.id }}" class="answer-img-accept"
+ src="/content/images/vote-accepted{% if answer.accepted %}-on{% endif %}.png"
+ title="{% trans "mark this answer as favorite (click again to undo)" %}" >
{% else %}
{% if answer.accepted %}
- <img id="answer-img-accept-{{ answer.id }}" class="answer-img-accept" src="/content/images/vote-accepted{% if answer.accepted %}-on{% endif %}.png" title="这个答案已经被提问作者标记为最佳答案" >
+ <img id="answer-img-accept-{{ answer.id }}" class="answer-img-accept"
+ src="/content/images/vote-accepted{% if answer.accepted %}-on{% endif %}.png"
+ title="{% trans "the author of the question has selected this answer as correct" %}" >
{% endif %}
{% endifequal %}
</div>
@@ -272,32 +299,43 @@
<div class="answer-controls" style="clear:both;">
<table width="100%">
<tr>
- <td width="210px" style="vertical-align:top">
+ <td width="400px" style="vertical-align:top">
{% if request.user|can_edit_post:answer %}
- <span class="action-link"><a href="{% url edit_answer answer.id %}">编辑</a></span>
+ <span class="action-link"><a href="{% url edit_answer answer.id %}">{% trans "edit" %}</a></span>
<span class="action-link-separator">|</span>
{% endif %}
{% if request.user|can_delete_post:answer %}
- <span class="action-link"><a id="answer-delete-link-{{answer.id}}">删除</a></span>
+ <span class="action-link">
+ <a id="answer-delete-link-{{answer.id}}">
+ {% if answer.deleted %}
+ {% trans "undelete" %}
+ {% endif %}
+ {% if not answer.deleted %}
+ {% trans "delete" %}
+ {% endif %}
+ </a>
+ </span>
<span class="action-link-separator">|</span>
{% endif %}
<span class="linksopt">
- <a href="#{{ answer.id }}" title="该回答的链接地址">
- 永久链接
+ <a href="#{{ answer.id }}" title="{% trans "answer permanent link" %}">
+ {% trans "permanent link" %}
</a>
</span>
<span class="action-link-separator">|</span>
- <span id="answer-offensive-flag-{{ answer.id }}" class="offensive-flag" title="检举该帖为垃“水帖”(含广告、人身攻击、恶意言论等)"><a>垃圾帖?</a><span class="darkred">{% if request.user|can_view_offensive_flags %}{% if answer.offensive_flag_count %}({{ answer.offensive_flag_count }}){% endif %}{% endif %}</span></span>
+ <span id="answer-offensive-flag-{{ answer.id }}" class="offensive-flag"
+ title="{% trans "report as offensive (i.e containing spam, advertising, malicious text, etc.)" %}">
+ <a>{% trans "flag offensive" %}</a>
+ <span class="darkred">{% if request.user|can_view_offensive_flags %}{% if answer.offensive_flag_count %}({{ answer.offensive_flag_count }}){% endif %}{% endif %}</span></span>
</td>
- <td width="210px" style="vertical-align:top">
+ <td width="110px" style="vertical-align:top">
{% if answer.last_edited_by %}
<div class="question-edit" >
<table width="200px" >
<tr>
<td colspan="2">
- 更新于<a href="{% url answer_revisions answer.id %}"><strong title="{{answer.last_edited_at }}">{% diff_date answer.last_edited_at %}</strong></a>
+ {% trans "updated" %}<a href="{% url answer_revisions answer.id %}"><strong title="{{answer.last_edited_at }}">{% diff_date answer.last_edited_at %}</strong></a>
</td>
-
</tr>
{% if answer.wiki %}
<tr>
@@ -336,16 +374,15 @@
</td>
<td style="vertical-align:top">
{% if answer.wiki %}
- <span class="wiki-category">社区Wiki</span>
+ <span class="wiki-category">{% trans "community wiki" %}</span>
<div style="margin-bottom:10px"></div>
{% else %}
<div class="answer-mark">
<table width="200px">
<tr>
- <td colspan="2">
- 回答于<strong title="{{answer.added_at}}">{% diff_date answer.added_at %}</strong>
+ <td colspan="2">
+ {% trans "asked" %} <strong title="{{answer.added_at}}">{% diff_date answer.added_at %}</strong>
</td>
-
</tr>
<tr>
<td width="40px" style="vertical-align:bottom">
@@ -370,7 +407,9 @@
</div>
<div id="comment-{{ answer.id }}" class="post-comments" >
<input id="can-post-comments-answer-{{answer.id}}" type="hidden" value="{{ request.user|can_add_comments }}"/>
- <a id="comments-link-answer-{{answer.id}}" class="comments-link">{% if answer.comment_count %}评论 <strong>({{answer.comment_count}})</strong>{% else %}添加评论{% endif %}</a>
+ <a id="comments-link-answer-{{answer.id}}" class="comments-link">
+ {% if answer.comment_count %}{% trans "comments" %}
+ <strong>({{answer.comment_count}})</strong>{% else %}{% trans "add comment" %}{% endif %}</a>
<div id="comments-answer-{{answer.id}}" class="comments-container">
<div class="comments"/></div>
</div>
@@ -394,7 +433,7 @@
{% if not question.closed %}
{% if request.user.is_authenticated %}
<div style="padding:10px 0 0 0;">
- <div class="headNormal">您的回答:</div>
+ <div class="headNormal">{% trans "Your answer" %}:</div>
</div>
<div id="description" class="" >
@@ -404,7 +443,8 @@
<table width="100%">
<tr>
<td>
- <span id="pre-collapse" title="打开或者关闭Markdown编辑器的实时预览">预览开关</span>
+ <span id="pre-collapse"
+ title="{% trans "Toggle the real time Markdown editor preview" %}">{% trans "toggle preview" %}</span>
</td>
<td style="text-align:right;">
{{ answer.wiki }} <span style="font-weight:normal;cursor:help" title="{{answer.wiki.help_text}}">{{ answer.wiki.label_tag }} </span>
@@ -415,12 +455,11 @@
</div>
<div id="previewer" class="wmd-preview"></div>
{{ answer.text.errors }}
-
</div>
<br>
- <input type="submit" value="回答该问题" class="submit"><span class="form-error"></span>
+ <input type="submit" value="{% trans "Answer the question" %}" class="submit"><span class="form-error"></span>
{% else %}
- <input id="btLogin" type="button" class="submit" style="width:200px" value="登录并回答该问题">
+ <input id="btLogin" type="button" class="submit" style="width:200px" value="{% trans "Login to answer" %}">
{% endif %}
{% endif %}
<br><br>
@@ -432,26 +471,28 @@
{% block sidebar %}
<div class="boxC">
<p>
- 您正在浏览的问题含有以下标签:
+ {% trans "Question tags" %}:
</p>
<p class="tags" >
{% for tag in tags %}
- <a href="{% url forum.views.tag tag.name|urlencode %}" title="查看有关'{{ tag.name }}'的问题" rel="tag">{{ tag.name }}</a> <span class="tag-number">× {{ tag.used_count|intcomma }}</span><br>
+ <a href="{% url forum.views.tag tag.name|urlencode %}"
+ title="{% trans "see questions tagged"%}'{{tag.name}}'{% trans "using tags" %}"
+ rel="tag">{{ tag.name }}</a> <span class="tag-number">× {{ tag.used_count|intcomma }}</span><br>
{% endfor %}
</p>
<p>
- 提问时间: <br><strong title="{{ question.added_at }}">{{ question.added_at|timesince }}前</strong>
+ {% trans "question asked" %}: <strong title="{{ question.added_at }}">{{ question.added_at|timesince }} {% trans "ago" %}</strong>
</p>
<p>
- 目前浏览数量:<br><strong>{{ question.view_count|intcomma }} 次</strong>
+ {% trans "question was seen" %}: <strong>{{ question.view_count|intcomma }} {% trans "times" %}</strong>
</p>
<p>
- 最后更新时间:<br><strong title="{{ question.last_activity_at }}">{{ question.last_activity_at|timesince }}前</strong>
+ {% trans "last updated" %}: <strong title="{{ question.last_activity_at }}">{{ question.last_activity_at|timesince }} {% trans "ago" %}</strong>
</p>
</div>
<div class="boxC">
- <h3 class="subtitle">相似的问题</h3>
+ <h3 class="subtitle">{% trans "Related questions" %}</h3>
<div class="questions-related">
{% for question in similar_questions %}
<p>
@@ -466,4 +507,4 @@
{% block endjs %}
{% endblock %}
-
+<!-- end question.html -->
diff --git a/templates/question_edit.html b/templates/question_edit.html
index 2cec358f..6fe8bb41 100644
--- a/templates/question_edit.html
+++ b/templates/question_edit.html
@@ -1,14 +1,16 @@
+<!-- question_edit.html -->
{% extends "base.html" %}
-{% block title %}{% spaceless %}修改问题{% endspaceless %}{% endblock %}
+{% load i18n %}
+{% block title %}{% spaceless %}{% trans "Edit question" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type='text/javascript' src='/content/js/com.cnprog.editor.js'></script>
<script type='text/javascript' src='/content/js/com.cnprog.post.js'></script>
<script type='text/javascript' src='/content/js/jquery.validate.pack.js'></script>
- <script type='text/javascript' src='/content/js/wmd/showdown-min.js'></script>
- <script type='text/javascript' src='/content/js/wmd/wmd-min.js'></script>
+ <script type='text/javascript' src='/content/js/wmd/showdown.js'></script>
+ <script type='text/javascript' src='/content/js/wmd/wmd.js'></script>
<link rel="stylesheet" type="text/css" href="/content/js/wmd/wmd.css" />
<script type="text/javascript">
-
+ //todo move javascript out
$().ready(function(){
$("#nav_questions").attr('className',"on");
$('#editor').TextAreaResizer();
@@ -19,10 +21,10 @@
//toggle preview of editor
var display = true;
- var txt = "禁用预览";
+ var txt = "[{% trans "hide preview"}%]";
$('#pre-collapse').text(txt);
$('#pre-collapse').bind('click', function(){
- txt = display ? "启用预览" : "禁用预览";
+ txt = display ? "[{% trans "show preview" %}]" : "[{% trans "hide preview" %}]";
display = !display;
$('#previewer').toggle();
$('#pre-collapse').text(txt);
@@ -60,15 +62,16 @@
{% block content %}
<div id="main-bar" class="headNormal">
- 修改问题 [<a href="{{ question.get_absolute_url }}">返回</a>]
+ {% trans "Edit question" %} [<a href="{{ question.get_absolute_url }}">{% trans "back" %}</a>]
</div>
<div id="main-body" class="ask-body">
<div id="askform">
<form id="fmedit" action="{% url edit_question question.id %}" method="post" >
- <label for="id_revision" ><strong>版本:</strong></label> <br>
+ <label for="id_revision" ><strong>{% trans "revision" %}:</strong></label> <br>
{% if revision_form.revision.errors %}{{ revision_form.revision.errors.as_ul }}{% endif %}
<div style="vertical-align:middle">
- {{ revision_form.revision }} <input type="submit" style="display:none" id="select_revision" name="select_revision" value="选择版本">
+ {{ revision_form.revision }} <input type="submit" style="display:none" id="select_revision" name="select_revision"
+ value="{% trans "select revision"%}">
</div><br>
<div class="form-item">
<label for="id_title" ><strong>{{ form.title.label_tag }}:</strong></label> <span class="form-error"></span><br>
@@ -85,7 +88,7 @@
<table width="100%">
<tr>
<td>
- <span id="pre-collapse" title="打开或者关闭Markdown编辑器的实时预览">预览开关</span>
+ <span id="pre-collapse" title="{% trans "Toggle the real time Markdown editor preview" %}">{% trans "toggle preview" %}</span>
</td>
<td style="text-align:right;">
{{ form.wiki }} <span style="color:#000;cursor:help" title="{{form.wiki.help_text}}">{{ form.wiki.label_tag }} </span>
@@ -113,8 +116,8 @@
<br>
<div class="error" ></div>
- <input type="submit" value="现在修改" class="submit" />
- <input type="button" value="取消" class="submit" onclick="history.back(-1);" />
+ <input type="submit" value="{% trans "Save edit" %}" class="submit" />
+ <input type="button" value="{% trans "Cancel" %}" class="submit" onclick="history.back(-1);" />
<br>
<br>
</form>
@@ -123,63 +126,9 @@
{% endblock %}
{% block sidebar %}
-<div class="boxC">
- <p class="subtitle darkred">受欢迎的提问</p>
- <div>
- <ul class="list-item">
- <li>
- <b>您的问题与编程相关吗?</b>
- </li>
- <li>
- 建议您提的问题是可以被答复的,而不仅仅是可以讨论。
- </li>
- <li>
- 请详细描述您的问题。
- </li>
- <li>
- 我们推荐您使用中文描述问题,这样可以得到更多的答复机会。
- </li>
- </ul>
- <a href="/faq/" target="_blank" title="查看常见问题" style="float:right;position:relative">faq »</a>
- <br>
- </div>
-</div>
-
-<div class="boxC">
- <p class="subtitle">Markdown快速参考</p>
- <ul class="list-item">
- <li>
- *斜体* 或者 _斜体_
-
- </li>
- <li>
- **加粗** 或者 __加粗__
-
- </li>
- <li>
- <b>链接</b>:一个[例子](http://url.com/ "标题")
-
- </li>
-
- <li>
- <b>图片</b>:![alt 文本](/path/img.jpg "标题")
-
- </li>
- <li>
- 列表:
- 1. Foo
- 2. Bar
- </li>
- <li>
- 基本的HTML标签也是支持的
- </li>
- </ul>
- <a href="http://en.wikipedia.org/wiki/Markdown" target="_blank" style="float:right;position:relative">有关Markdown详细说明 »</a>
- <br>
-</div>
-
+{% include "question_edit_tips.html" %}
{% endblock %}
{% block endjs %}
{% endblock %}
-
+<!-- end question_edit.html -->
diff --git a/templates/question_edit_tips.html b/templates/question_edit_tips.html
new file mode 100644
index 00000000..4ac666a6
--- /dev/null
+++ b/templates/question_edit_tips.html
@@ -0,0 +1,51 @@
+<!-- question_edit_tips.html -->
+{% load i18n %}
+<div class="boxC">
+ <p class="subtitle darkred">{% trans "question tips" %}</p>
+ <div>
+ <ul class="list-item">
+ <li> <b>{% trans "please ask a relevant question" %}</b>
+ </li>
+ <li>
+ {% trans "please try provide enough details" %}
+ </li>
+ <li>
+ {% trans "be clear and concise" %}
+ </li>
+ </ul>
+ <a href="/faq/" target="_blank" title="{% trans "see frequently asked questions" %}" style="float:right;position:relative">faq »</a>
+ <br>
+ </div>
+</div>
+
+<div class="boxC">
+ <p class="subtitle">{% trans "Markdown tips" %}</p>
+ <ul class="list-item">
+ <li>
+ {% trans "*italic* or __italic__" %}
+ </li>
+ <li>
+ {% trans "**bold** or __bold__" %}
+ </li>
+ <li>
+ <b>{% trans "link" %}</b>:[{% trans "text" %}](http://url.com/ "{% trans "title" %}")
+
+ </li>
+
+ <li>
+ <b>{% trans "image" %}</b>:![alt {% trans "text" %}](/path/img.jpg "{% trans "title" %}")
+
+ </li>
+ <li>
+ {% trans "numbered list:" %}
+ 1. Foo
+ 2. Bar
+ </li>
+ <li>
+ {% trans "basic HTML tags are also supported" %}
+ </li>
+ </ul>
+ <a href="http://en.wikipedia.org/wiki/Markdown" target="_blank" style="float:right;position:relative">{% trans "learn more about Markdown" %} »</a>
+ <br>
+</div>
+<!-- end question_edit_tips.html -->
diff --git a/templates/reopen.html b/templates/reopen.html
index 9d87c3a6..7ab59421 100644
--- a/templates/reopen.html
+++ b/templates/reopen.html
@@ -1,7 +1,9 @@
+<!-- reopen.html -->
{% extends "base_content.html" %}
{% load extra_tags %}
+{% load i18n %}
{% load humanize %}
-{% block title %}{% spaceless %}重设问题{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Reopen question" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
$().ready(function(){
@@ -11,21 +13,21 @@
{% endblock %}
{% block content %}
<div id="main-bar" class="headNormal">
- 重设问题
+ {% trans "Reopen question" %}
</div>
<div id="main-body" style="width:100%">
- <p>你将打开这个已经被关闭的问题: <a href="{{ question.get_absolute_url }}"><span class="big">{{ question.get_question_title }}</span></a>
+ <p>{% trans "Open the previously closed question" %}: <a href="{{ question.get_absolute_url }}"><span class="big">{{ question.get_question_title }}</span></a>
</p>
- <p><strong>问题曾以“{{ question.get_close_reason_display }}”的原因被 <a href="{{ question.closed_by.get_profile_url }}">{{ question.closed_by.username }}</a> 于{% diff_date question.closed_at %}<font class="darkred">关闭</font>
+ <p><strong>{% trans "The question was closed for the following reason " %}"{{ question.get_close_reason_display }}"{% trans "reason - leave blank in english" %} <a href="{{ question.closed_by.get_profile_url }}">{{ question.closed_by.username }}</a> {% trans "on "%} {% diff_date question.closed_at %}<font class="darkred">{% trans "date closed" %}</font>
</strong>
</p>
<form id="fmclose" action="{% url reopen question.id %}" method="post" >
<div id="" style="padding:20px 0 20px 0">
- <input type="submit" value="确定打开这个问题" class="submit" />
- <input id="btBack" type="button" value="取消" class="submit" />
+ <input type="submit" value="{% trans "Reopen this question" %}" class="submit" />
+ <input id="btBack" type="button" value="{% trans "Cancel" %}" class="submit" />
</div>
@@ -35,3 +37,4 @@
+<!-- end reopen.html -->
diff --git a/templates/revisions_answer.html b/templates/revisions_answer.html
index ece59d6e..5ab12fbf 100644
--- a/templates/revisions_answer.html
+++ b/templates/revisions_answer.html
@@ -1,13 +1,15 @@
+<!-- revisions_answer.html -->
{% extends "base_content.html" %}
+{% load i18n %}
{% load extra_tags %}
{% load extra_filters %}
{% load humanize %}
-{% block title %}{% spaceless %}版本历史{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Revision history" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type='text/javascript' src='/content/js/com.cnprog.editor.js'></script>
<script type='text/javascript' src='/content/js/com.cnprog.post.js'></script>
<script type="text/javascript">
-
+ //todo - take this out into .js file
$().ready(function(){
$("#nav_questions").attr('className',"on");
$('div.revision div[id^=rev-header-]').bind('click', function(){
@@ -31,7 +33,7 @@
{% block content %}
<div id="main-bar" class="headNormal">
- 版本历史 [<a href="{{ post.get_absolute_url }}">返回</a>]
+ {% trans "Revision history" %} [<a href="{{ post.get_absolute_url }}">{% trans "back" %}</a>]
</div>
<div id="main-body" class="">
<div id="revisions">
@@ -42,13 +44,13 @@
<table width="100%">
<tr>
<td width="20" style="vertical-align:middle"><img id="rev-arrow-{{ revision.revision }}" src="/content/images/expander-arrow-show.gif"></td>
- <td width="30px" style="vertical-align:middle"><span class="revision-number" title="版本 {{ revision.revision }}">{{ revision.revision }}</span></td>
+ <td width="30px" style="vertical-align:middle"><span class="revision-number" title="{% trans "revision" %} {{ revision.revision }}">{{ revision.revision }}</span></td>
<td width="200px" style="vertical-align:middle">
{% if revision.summary %}
<div class="summary"><span>{{ revision.summary }}<span></div>
{% endif %}
{% if request.user|can_edit_post:post %}
- <a href="{% url edit_answer post.id %}?revision={{ revision.revision }}">编辑</a>
+ <a href="{% url edit_answer post.id %}?revision={{ revision.revision }}">{% trans "edit" %}</a>
{% endif %}
</td>
@@ -58,9 +60,9 @@
<tr >
<td colspan="2" style="padding:3px 0 3px 0">
{% ifequal revision.revision 1 %}
- 提问于<strong title="{{ post.added_at }}">{% diff_date post.added_at %}</strong>
+ {% trans "asked" %} <strong title="{{ post.added_at }}">{% diff_date post.added_at %}</strong>
{% else %}
- 更新于<strong title="{{ post.last_edited_at }}">{% diff_date revision.revised_at %}</strong>
+ {% trans "updated" %} <strong title="{{ post.last_edited_at }}">{% diff_date revision.revised_at %}</strong>
{% endifequal %}
</td>
@@ -97,4 +99,4 @@
{% block endjs %}
{% endblock %}
-
+<!-- end revisions_answer.html -->
diff --git a/templates/revisions_question.html b/templates/revisions_question.html
index 94fb2644..77a421bb 100644
--- a/templates/revisions_question.html
+++ b/templates/revisions_question.html
@@ -1,13 +1,16 @@
+<!-- revisions_question.html -->
{% extends "base_content.html" %}
+<!--somehow very similar to revisions_answer.html-->
{% load extra_tags %}
+{% load i18n %}
{% load extra_filters %}
{% load humanize %}
-{% block title %}{% spaceless %}版本历史{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Revision history" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type='text/javascript' src='/content/js/com.cnprog.editor.js'></script>
<script type='text/javascript' src='/content/js/com.cnprog.post.js'></script>
<script type="text/javascript">
-
+ //todo - take this out into .js file
$().ready(function(){
$("#nav_questions").attr('className',"on");
$('div.revision div[id^=rev-header-]').bind('click', function(){
@@ -15,8 +18,6 @@
toggleRev(revId);
});
-
-
lanai.highlightSyntax();
});
@@ -27,13 +28,12 @@
arrow.attr("src", "/content/images/expander-arrow-" + (visible ? "show" : "hide") + ".gif");
$("#rev-body-" + id).slideToggle("fast");
}
-
</script>
{% endblock %}
{% block content %}
<div id="main-bar" class="headNormal">
- 版本历史 [<a href="{{ post.get_absolute_url }}">返回</a>]
+ {% trans "Revision history" %}[<a href="{{ post.get_absolute_url }}">{% trans "back" %}</a>]
</div>
<div id="main-body" class="">
<div id="revisions">
@@ -44,13 +44,13 @@
<table width="100%">
<tr>
<td width="20" style="vertical-align:middle"><img id="rev-arrow-{{ revision.revision }}" src="/content/images/expander-arrow-show.gif"></td>
- <td width="30px" style="vertical-align:middle"><span class="revision-number" title="版本 {{ revision.revision }}">{{ revision.revision }}</span></td>
+ <td width="30px" style="vertical-align:middle"><span class="revision-number" title="{% trans "revision" %} {{ revision.revision }}">{{ revision.revision }}</span></td>
<td width="200px" style="vertical-align:middle">
{% if revision.summary %}
<div class="summary"><span>{{ revision.summary }}<span></div>
{% endif %}
{% if request.user|can_edit_post:post %}
- <a href="{% url edit_question post.id %}?revision={{ revision.revision }}">编辑</a>
+ <a href="{% url edit_question post.id %}?revision={{ revision.revision }}">{% trans "edit" %}</a>
{% endif %}
</td>
@@ -60,9 +60,9 @@
<tr >
<td colspan="2" style="padding:3px 0 3px 0">
{% ifequal revision.revision 1 %}
- 提问于<strong title="{{ post.added_at }}">{% diff_date post.added_at %}</strong>
+ {% trans "asked" %}<strong title="{{ post.added_at }}">{% diff_date post.added_at %}</strong>
{% else %}
- 更新于<strong title="{{ post.last_edited_at }}">{% diff_date revision.revised_at %}</strong>
+ {% trans "updated" %}<strong title="{{ post.last_edited_at }}">{% diff_date revision.revised_at %}</strong>
{% endifequal %}
</td>
@@ -100,3 +100,4 @@
{% block endjs %}
{% endblock %}
+<!-- end revisions_question.html -->
diff --git a/templates/tags.html b/templates/tags.html
index 0d2a972e..6131e527 100644
--- a/templates/tags.html
+++ b/templates/tags.html
@@ -1,7 +1,8 @@
{% extends "base_content.html" %}
+{% load i18n %}
{% load extra_tags %}
{% load humanize %}
-{% block title %}{% spaceless %}标签列表{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Tag list" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
$().ready(function(){
@@ -24,25 +25,25 @@
{% block content %}
<!-- Tabs -->
<div class="tabBar">
- <div class="headQuestions">标签列表</div>
+ <div class="headQuestions">{% trans "Tag list" %}</div>
<div class="tabsA">
- <a id="sort_name" href="/tags/?sort=name" class="off" title="按名称的字母先后顺序排序">按名称排序</a>
- <a id="sort_used" href="/tags/?sort=used" class="off" title="按标签被使用的次数排序">按流行程度排序</a>
+ <a id="sort_name" href="/tags/?sort=name" class="off" title="{% trans "sorted alphabetically" %}">{% trans "by name" %}</a>
+ <a id="sort_used" href="/tags/?sort=used" class="off" title="{% trans "sorted by frequency of tag use" %}">{% trans "by popularity" %}</a>
</div>
</div>
<div id="searchtags">
<p>
{% if stag %}
- 匹配查询 '<span class="darkred"><strong>{{ stag }}</strong></span>' 的所有标签:
+ {% trans "All tags matching query" %} '<span class="darkred"><strong>{{ stag }}</strong></span>' {% trans "all tags - make this empty in english" %}:
{% endif %}
{% if not tags.object_list %}
- <span >没有找到相关数据。</span>
+ <span>{% trans "Nothing found" %}</span>
{% endif %}
</p>
<ul class="tagsList tags">
{% for tag in tags.object_list %}
<li>
- <a href="{% url forum.views.tag tag|urlencode %}" title="查看有关'{{ tag }}'的问题" rel="tag">
+ <a href="{% url forum.views.tag tag|urlencode %}" title="{% trans "see questions tagged" %}'{{ tag }}'{% trans "using tags" %}" rel="tag">
{{ tag }}
</a>&nbsp;
<span class="tag-number">× {{ tag.used_count|intcomma }}</span>
@@ -58,4 +59,5 @@
<div class="pager">
{% cnprog_paginator context %}
</div>
-{% endblock %} \ No newline at end of file
+{% endblock %}
+<!-- end tags.html -->
diff --git a/templates/unanswered.html b/templates/unanswered.html
index 4012921a..926f2ffd 100644
--- a/templates/unanswered.html
+++ b/templates/unanswered.html
@@ -1,8 +1,10 @@
+<!-- unanswered.html -->
{% extends "base.html" %}
{% load extra_tags %}
+{% load i18n %}
{% load humanize %}
{% load extra_filters %}
-{% block title %}{% spaceless %}没有回答的问题{% endspaceless %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Unanswered questions" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
$().ready(function(){
@@ -13,9 +15,9 @@
{% endblock %}
{% block content %}
<div class="tabBar">
- <span class="headQuestions">没有回答的问题</span>
+ <span class="headQuestions">{% trans "Unanswered questions" %}</span>
<div class="tabsA">
- <a id="latest" href="?sort=latest" class="on" title="最新加入系统的问题">最新问题</a>
+ <a id="latest" href="?sort=latest" class="on" title="{% trans "most recently asked questions" %}">{% trans "newest" %}</a>
</div>
</div>
@@ -31,9 +33,9 @@
<td><span class="num">{{ question.view_count|cnprog_intword|safe }}</span> </td>
</tr>
<tr>
- <td><span class="unit">回答</span></td>
- <td><span class="unit">票数</span></td>
- <td><span class="unit">浏览</span></td>
+ <td><span class="unit">{% trans "answers" %}</span></td>
+ <td><span class="unit">{% trans "votes" %}</span></td>
+ <td><span class="unit">{% trans "views" %}</span></td>
</tr>
</table>
</div>
@@ -43,7 +45,7 @@
{% ifequal tab_id 'active'%}
{% if question.wiki %}
- <span class="from wiki">社区Wiki</span>
+ <span class="from wiki">{% trans "community wiki" %}</span>
<span class="date" title="{{ question.added_at }}">{% diff_date question.added_at %}</span>
{% else %}
<div class="from">
@@ -55,7 +57,7 @@
{% endif %}
{% else %}
{% if question.wiki %}
- <span class="from wiki">社区Wiki</span>
+ <span class="from wiki">{% trans "community wiki" %}</span>
<span class="date" title="{{ question.added_at }}">{% diff_date question.added_at %}</span>
{% else %}
<div class="from">
@@ -68,9 +70,12 @@
{% endifequal %}
<div class="tags">
- {% for tag in question.tagname_list %}
- <a href="{% url forum.views.tag tag|urlencode %}" title="查看有关'{{ tag }}'的问题" rel="tag">{{ tag }}</a>
- {% endfor %}
+ {% for tag in question.tagname_list %}
+ <a href="{% url forum.views.tag tag|urlencode %}"
+ title="{% trans "see questions tagged" %}'{{ tag }}'{% trans "using tags" %}"
+ rel="tag">{{ tag }}
+ </a>
+ {% endfor %}
</div>
</div>
{% endfor %}
@@ -78,31 +83,30 @@
{% endblock %}
{% block tail %}
- <div class="pager">
- {% cnprog_paginator context %}
-
- </div>
- <div class="pagesize">
- {% cnprog_pagesize context %}
- </div>
+ <div class="pager">
+ {% cnprog_paginator context %}
+ </div>
+ <div class="pagesize">
+ {% cnprog_pagesize context %}
+ </div>
{% endblock %}
{% block sidebar %}
<div class="boxC">
<p>
- 您正在浏览所有<br><div class="questions-count">{{ questions_count|intcomma }}</div>
- <p>个<span class="darkred"><strong> 没有回答的 </strong></span>问题。</p>
-
- <p>问题按 <strong>问题创建时间</strong> 排序。最新加入的问题将显示在最前面。</p>
-
+ {% blocktrans with questions_count|intcomma as num_q %}have {{num_q}} unanswered questions{% endblocktrans %}
+ {% comment %}
+ {% trans "Have a total of" %}<br><div class="questions-count">{{ questions_count|intcomma }}</div>
+ {% endcomment %}
+ <!---<p>问题按 <strong>问题创建时间</strong> 排序。最新加入的问题将显示在最前面。</p>-->
</p>
</div>
<div class="boxC">
- <h3 class="subtitle">相关标签</h3>
+ <h3 class="subtitle">{% trans "Related tags" %}</h3>
<div class="body">
<div class="tags">
{% for tag in tags %}
- <a rel="tag" title="查看有关'{{ tag.name }}'的问题" href="{% url forum.views.tag tag.name|urlencode %}">{{ tag.name }}</a>
+ <a rel="tag" title="{% trans "see questions tagged"%}'{{ tag.name }}'{% trans "using tags" %}" href="{% url forum.views.tag tag.name|urlencode %}">{{ tag.name }}</a>
<span class="tag-number">× {{ tag.used_count|intcomma }}</span>
<br>
{% endfor %}
@@ -113,3 +117,4 @@
{% endblock %}
+<!-- end unanswered.html -->
diff --git a/templates/user.html b/templates/user.html
index dd8e3b13..53a30dc0 100644
--- a/templates/user.html
+++ b/templates/user.html
@@ -1,3 +1,4 @@
+<!-- user.html -->
{% extends "base_content.html" %}
{% load extra_tags %}
{% load humanize %}
@@ -31,4 +32,4 @@
{% endblock %}
{% include "user_footer.html" %}
</div>
-{% endblock %} \ No newline at end of file
+{% endblock %}<!-- end user.html -->
diff --git a/templates/user_edit.html b/templates/user_edit.html
index 18794472..0f927374 100644
--- a/templates/user_edit.html
+++ b/templates/user_edit.html
@@ -1,7 +1,9 @@
+<!-- user_edit.html -->
{% extends "base_content.html" %}
{% load extra_tags %}
{% load humanize %}
-{% block title %}{% spaceless %}修改个人资料{% endspaceless %}{% endblock %}
+{% load i18n %}
+{% block title %}{% spaceless %}{% trans "Edit user profile" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
$().ready(function(){
@@ -14,7 +16,7 @@
{% endblock %}
{% block content %}
<div id="main-bar" class="headNormal">
- {{ request.user.username }} - 修改资料
+ {{ request.user.username }} - {% trans "edit profile" %}
</div>
<div id="main-body" style="width:100%;padding-top:10px">
<form name="" action="{% url edit_user request.user.id %}" method="post">
@@ -25,12 +27,13 @@
<img src="/content/images/nophoto.png">
{% endif %}
<div style="padding:20px 0 0 20px;font-weight:bold;font-size:150%">
- <a href="http://www.gravatar.com/" target="_blank" title="gravatar和您的邮件地址是绑定的">修改头像</a>
+ <a href="http://www.gravatar.com/" target="_blank"
+ title="gravatar {% trans "image associated with your email address" %}">{% trans "avatar" %}</a>
</div>
</div>
<div id="askform" style="float:right;width:750px;text-align:left;">
- <h2>注册用户</h2>
+ <h2>{% trans "Registered user" %}</h2>
<table class="user-details">
<tr>
<th width="100px"></th>
@@ -76,8 +79,8 @@
</table>
<div style="margin:30px 0 60px 0">
- <input type="submit" value="更新" class="submit" >
- <input id="cancel" type="button" value="取消" class="submit" >
+ <input type="submit" value="{% trans "Update" %}" class="submit" >
+ <input id="cancel" type="button" value="{% trans "Cancel" %}" class="submit" >
</div>
</div>
@@ -85,6 +88,4 @@
</div>
{% endblock %}
-
-
-
+<!-- end user_edit.html -->
diff --git a/templates/user_favorites.html b/templates/user_favorites.html
index 8cebc798..d47670bd 100644
--- a/templates/user_favorites.html
+++ b/templates/user_favorites.html
@@ -1,7 +1,9 @@
+<!-- user_favorites.html -->
{% extends "user.html" %}
{% load extra_tags %}
{% load humanize %}
{% block usercontent %}
{% include "users_questions.html" %}
-{% endblock %} \ No newline at end of file
+{% endblock %}
+<!-- end user_favorites.html -->
diff --git a/templates/user_footer.html b/templates/user_footer.html
index 3deba20a..ee347742 100644
--- a/templates/user_footer.html
+++ b/templates/user_footer.html
@@ -1,3 +1,4 @@
+<!-- user_footer.html -->
<div id="mainbar-footer">
-</div> \ No newline at end of file
+</div><!-- end user_footer.html -->
diff --git a/templates/user_info.html b/templates/user_info.html
index 1700fda8..8e6dca84 100644
--- a/templates/user_info.html
+++ b/templates/user_info.html
@@ -1,6 +1,8 @@
+<!-- user_info.html -->
{% load extra_tags %}
{% load extra_filters %}
{% load humanize %}
+{% load i18n %}
<div id="subheader" class="headUser">
{{view_user.username}}
@@ -18,7 +20,7 @@
<tr>
<td align="center">
<div class="scoreNumber">{{view_user.reputation|intcomma}}</div>
- <p><b style="color:#777;">积分</b></p>
+ <p><b style="color:#777;">{% trans "reputation" %}</b></p>
</td>
</tr>
</table>
@@ -26,51 +28,52 @@
<td width="360" style="vertical-align: top;">
<table class="user-details">
<tr height="30px">
- <th width="130" align="left"><strong>注册用户</strong></th>
+ <th width="130" align="left"><strong>{% trans "Registered user" %}</strong></th>
<th width="230" align="right">
{% if request.user|can_view_user_edit:view_user %}
- <span class="user-edit-link"><a href="/users/{{ view_user.id }}/edit/">更新我的资料</a></span>
+ <span class="user-edit-link"><a href="/users/{{ view_user.id }}/edit/">{% trans "update profile" %}</a></span>
{% endif %}
</th>
</tr>
{% if view_user.real_name %}
<tr>
- <td >姓名</td>
- <td ><b>{{view_user.real_name}}</b></td>
+ <td>{% trans "real name" %}</td>
+ <td><b>{{view_user.real_name}}</b></td>
</tr>
{% endif %}
<tr>
- <td>已加入</td>
+ <td>{% trans "member for" %}</td>
<td>{{ view_user.date_joined|timesince }}</td>
</tr>
{% if view_user.last_seen %}
<tr>
- <td>上次活动时间</td>
- <td><strong title="{{ view_user.last_seen }}">{{ view_user.last_seen|timesince }}前</strong></td>
+ <td>{% trans "last seen" %}</td>
+ <td><strong title="{{ view_user.last_seen }}">{{ view_user.last_seen|timesince }} {% trans "ago" %}</strong></td>
</tr>
{% endif %}
{% if view_user.website %}
<tr>
- <td>个人网站</td>
+ <td>{% trans "user website" %}</td>
<td><a rel="nofollow" target="_blank" href="{{view_user.website}}">{{view_user.website}}</a></td>
</tr>
{% endif %}
{% if view_user.location %}
<tr>
- <td>城市</td>
+ <td>{% trans "location" %}</td>
<td>{{view_user.location}}</td>
</tr>
{% endif %}
{% if view_user.date_of_birth%}
<tr>
- <td>年龄</td>
- <td>{% get_age view_user.date_of_birth %} 岁</td>
+ <!--todo - redo this with blocktrans -->
+ <td>{% trans "age" %}</td>
+ <td>{% get_age view_user.date_of_birth %} {% trans "age unit" %}</td>
</tr>
{% endif %}
{% if votes_today_left %}
<tr>
- <td>今日剩余投票数</td>
- <td><strong class="darkred">{{ votes_today_left }}</strong> 票</td>
+ <td>{% trans "todays unused votes" %}</td>
+ <td><strong class="darkred">{{ votes_today_left }}</strong> {% trans "votes left" %}</td>
</tr>
{% endif %}
</table>
@@ -83,4 +86,5 @@
</div>
</td>
</tr>
-</table> \ No newline at end of file
+</table>
+<!-- end user_info.html -->
diff --git a/templates/user_recent.html b/templates/user_recent.html
index bb2bc99d..70c074ad 100644
--- a/templates/user_recent.html
+++ b/templates/user_recent.html
@@ -1,3 +1,4 @@
+<!-- user_recent.html -->
{% extends "user.html" %}
{% load extra_tags %}
{% load humanize %}
@@ -22,4 +23,5 @@
</div>
{% endfor %}
</div>
-{% endblock %} \ No newline at end of file
+{% endblock %}
+<!-- end user_recent.html -->
diff --git a/templates/user_reputation.html b/templates/user_reputation.html
index aad8db44..7a1c7366 100644
--- a/templates/user_reputation.html
+++ b/templates/user_reputation.html
@@ -1,3 +1,4 @@
+<!-- user_reputation.html -->
{% extends "user.html" %}
{% load extra_tags %}
{% load humanize %}
@@ -37,4 +38,4 @@
{% endfor %}
</div>
</div>
-{% endblock %} \ No newline at end of file
+{% endblock %}<!-- end user_reputation.html -->
diff --git a/templates/user_responses.html b/templates/user_responses.html
index 0ada494c..45aab21b 100644
--- a/templates/user_responses.html
+++ b/templates/user_responses.html
@@ -1,3 +1,4 @@
+<!-- user_responses.html -->
{% extends "user.html" %}
{% load extra_tags %}
{% load humanize %}
@@ -9,7 +10,7 @@
<div style="width:150px;float:left">{% diff_date response.time 3 %}</div>
<div style="width:100px;float:left"><a href="{{ response.userlink }}">{{ response.username }}</a></div>
<div style="float:left;overflow:hidden;width:680px">
- <strong {% ifequal response.type "回答问题"%}class="user-action-2"{% endifequal %}{% ifequal response.type "最佳答案"%}class="user-action-8"{% endifequal %}>{{ response.type }}</strong>:
+ <strong {% ifequal response.type "question_answered" %}class="user-action-2"{% endifequal %}{% ifequal response.type "answer_accepted" %}class="user-action-8"{% endifequal %}>{{ response.type }}</strong>:
<a href="{{ response.titlelink }}">{{ response.title }}</a><br>
{{ response.content|safe }}
<div style="height:10px"></div>
@@ -18,4 +19,5 @@
</div>
{% endfor %}
</div>
-{% endblock %} \ No newline at end of file
+{% endblock %}
+<!-- end user_responses.html -->
diff --git a/templates/user_stats.html b/templates/user_stats.html
index f6f55246..a5be1a77 100644
--- a/templates/user_stats.html
+++ b/templates/user_stats.html
@@ -1,4 +1,6 @@
+<!-- user_stats.html -->
{% extends "user.html" %}
+{% load i18n %}
{% load extra_tags %}
{% load humanize %}
{% block usercontent %}
@@ -10,7 +12,7 @@
<div style="text-align: right;" class="count">{{questions|length}}</div>
</td>
<td>
- <h2>个问题</h2>
+ <h2>{% trans "User questions" %}</h2>
</td>
</tr>
</table>
@@ -23,7 +25,7 @@
<div style="text-align: right;" class="count">{{answered_questions|length}}</div>
</td>
<td >
- <h2>个回答</h2>
+ <h2>{% trans "Answers" %}</h2>
</td>
</tr>
</table>
@@ -31,12 +33,14 @@
{% for answered_question in answered_questions %}
<div class="answer-summary">
<a title="{{answered_question.summary}}" href="/questions/{{answered_question.id}}/{{answered_question.title}}#{{answered_question.answer_id}}">
- <div class="answer-votes {% if answered_question.accepted %}answered-accepted{% endif %}" title="该回答总共有{{ answered_question.vote_count }}个投票&#13;{% if answered_question.accepted %}该回答已被设为最佳答案{%endif%}">
+ <div class="answer-votes {% if answered_question.accepted %}answered-accepted{% endif %}"
+ title="{% blocktrans with answered_question.vote_count as vote_count %}the answer has been voted for {{ vote_count }} times{% endblocktrans %}&#13;{% if answered_question.accepted %}{% trans "this answer has been selected as correct" %}{%endif%}">
{{ answered_question.vote_count }}
</div>
</a>
<div class="answer-link">
- <a href="/questions/{{answered_question.id}}/{{answered_question.title}}#{{answered_question.answer_id}}">{{answered_question.title}}</a> {% if answered_question.comment_count %}<span title="该回答有{{ answered_question.comment_count }}条评论">({{answered_question.comment_count}})</span>{% endif %}
+ <a href="/questions/{{answered_question.id}}/{{answered_question.title}}#{{answered_question.answer_id}}">{{answered_question.title}}</a> {% if answered_question.comment_count %}<span
+ title="{% blocktrans %}the answer has been commented {{ answered_question.comment_count }} times{% endblocktrans %}">({{answered_question.comment_count}})</span>{% endif %}
</div>
</div>
{% endfor %}
@@ -49,7 +53,7 @@
<div style="text-align: right;" class="count">{{total_votes}}</div>
</td>
<td >
- <h2>个投票</h2>
+ <h2>{% trans "votes total" %}</h2>
</td>
</tr>
</table>
@@ -58,12 +62,12 @@
<tr>
<td width="60">
<img style="cursor: default;" align="absmiddle" src="/content/images/vote-arrow-up-on.png"/>
- <span title="该用户投的赞成票总数" class="vote-count">{{up_votes}}</span>
+ <span title="{% trans "user has voted up this many times" %}" class="vote-count">{{up_votes}}</span>
</td>
<td width="60">
<img style="cursor: default;" align="absmiddle" src="/content/images/vote-arrow-down-on.png"/>
- <span title="用户投的反对票总数" class="vote-count">{{down_votes}}</span>
+ <span title="{% trans "user voted down this many times" %}" class="vote-count">{{down_votes}}</span>
</td>
</tr>
@@ -77,7 +81,7 @@
<div style="text-align: right;" class="count">{{tags|length}}</div>
</td>
<td >
- <h2>个标签</h2>
+ <h2>{% trans "Tags" %}</h2>
</td>
</tr>
</table>
@@ -86,7 +90,9 @@
<tr>
<td width="180" valign="top">
{% for tag in tags%}
- <a rel="tag" title="查看有关'{{ tag }}'的问题" href="{% url forum.views.tag tag|urlencode %}">{{tag.name}}</a><span class="tag-number"> × {{ tag.used_count|intcomma }}</span><br>
+ <a rel="tag"
+ title="{% blocktrans %}see other questions tagged '{{ tag }}' {% endblocktrans %}"
+ href="{% url forum.views.tag tag|urlencode %}">{{tag.name}}</a><span class="tag-number"> × {{ tag.used_count|intcomma }}</span><br>
{% if forloop.counter|divisibleby:"10" %}
</td>
<td width="180" valign="top">
@@ -104,7 +110,7 @@
<div style="text-align: right;" class="count">{{total_awards}}</div>
</td>
<td >
- <h2>枚奖牌</h2>
+ <h2>{% trans "Badges" %}</h2>
</td>
</tr>
</table>
@@ -125,3 +131,4 @@
</div>
{% endblock %}
+<!-- end user_stats.html -->
diff --git a/templates/user_tabs.html b/templates/user_tabs.html
index 165b1b9f..03a9d111 100644
--- a/templates/user_tabs.html
+++ b/templates/user_tabs.html
@@ -1,20 +1,34 @@
+<!-- user_tabs.html -->
{% load extra_filters %}
+{% load i18n %}
<div class="tabBar">
<div class="tabsA">
- <a id="stats" {% ifequal tab_name "stats" %}class="on"{% endifequal %} title="用户概览" href="/users/{{view_user.id}}/{{view_user.username}}?sort=stats">概览</a>
- <a id="recent" {% ifequal tab_name "recent" %}class="on"{% endifequal %} title="最近活动" href="/users/{{view_user.id}}/{{view_user.username}}?sort=recent">最近活动</a>
+ <a id="stats" {% ifequal tab_name "stats" %}class="on"{% endifequal %}
+ title="{% trans "User profile" %}" href="/users/{{view_user.id}}/{{view_user.username}}?sort=stats">{% trans "overview" %}</a>
+ <a id="recent" {% ifequal tab_name "recent" %}class="on"{% endifequal %}
+ title="{% trans "recent activity" %}" href="/users/{{view_user.id}}/{{view_user.username}}?sort=recent">{% trans "recent activity" %}</a>
{% if request.user|is_user_self:view_user %}
- <a id="responses" {% ifequal tab_name "responses" %}class="on"{% endifequal %} title="其他用户的回复和评论" href="/users/{{view_user.id}}/{{view_user.username}}?sort=responses">回应</a>
+ <a id="responses" {% ifequal tab_name "responses" %}class="on"{% endifequal %}
+ title="{% trans "comments and answers to others questions" %}"
+ href="/users/{{view_user.id}}/{{view_user.username}}?sort=responses">{% trans "responses" %}</a>
{% endif %}
- <a id="reputation" {% ifequal tab_name "reputation" %}class="on"{% endifequal %} title="用户的社区积分历史" href="/users/{{view_user.id}}/{{view_user.username}}?sort=reputation">积分</a>
+ <a id="reputation" {% ifequal tab_name "reputation" %}class="on"{% endifequal %}
+ title="{% trans "graph of user reputation" %}"
+ href="/users/{{view_user.id}}/{{view_user.username}}?sort=reputation">{% trans "reputation history" %}</a>
{% if request.user|can_view_user_votes:view_user %}
- <a id="votes" {% ifequal tab_name "votes" %}class="on"{% endifequal %} title="用户所有投票" href="/users/{{view_user.id}}/{{view_user.username}}?sort=votes">投票</a>
+ <a id="votes" {% ifequal tab_name "votes" %}class="on"{% endifequal %}
+ title="{% trans "user vote record" %}" href="/users/{{view_user.id}}/{{view_user.username}}?sort=votes">{% trans "casted votes" %}</a>
{% endif %}
- <a id="favorites" {% ifequal tab_name "favorites" %}class="on"{% endifequal %} title="用户收藏的问题" href="/users/{{view_user.id}}/{{view_user.username}}?sort=favorites">收藏</a>
+ <a id="favorites" {% ifequal tab_name "favorites" %}class="on"{% endifequal %}
+ title="{% trans "questions that user selected as his/her favorite"
+ href="/users/{{view_user.id}}/{{view_user.username}}?sort=favorites">{% trans "favorites" %}</a>
<!--
{% if request.user|can_view_user_preferences:view_user %}
- <a id="preferences" {% ifequal tab_name "preferences" %}class="on"{% endifequal %} title="用户参数的设置" href="/users/{{view_user.id}}/{{view_user.username}}?sort=preferences">设置</a>
+ <a id="preferences" {% ifequal tab_name "preferences" %}class="on"{% endifequal %}
+ title="{% trans "user preference settings" %}"
+ href="/users/{{view_user.id}}/{{view_user.username}}?sort=preferences">{% trans "settings" %}</a>
{% endif %}
-->
</div>
-</div> \ No newline at end of file
+</div>
+<!-- end user_tabs.html -->
diff --git a/templates/user_votes.html b/templates/user_votes.html
index d50a3308..ec967704 100644
--- a/templates/user_votes.html
+++ b/templates/user_votes.html
@@ -1,6 +1,8 @@
+<!-- user_votes.html -->
{% extends "user.html" %}
{% load extra_tags %}
{% load humanize %}
+{% load i18n %}
{% block usercontent %}
<div style="padding-top:5px;font-size:13px;">
@@ -9,9 +11,9 @@
<div style="width:150px;float:left">{% diff_date vote.voted_at 3 %}</div>
<div style="width:30px;float:left">
{% ifequal vote.vote 1 %}
- <img src="/content/images/vote-arrow-up-on.png" title="赞成票">
+ <img src="/content/images/vote-arrow-up-on.png" title="{% trans "upvote" %}">
{% else %}
- <img src="/content/images/vote-arrow-down-on.png" title="反对票">
+ <img src="/content/images/vote-arrow-down-on.png" title="{% trans "downvote" %}">
{% endifequal %}
</div>
<div style="float:left;overflow:hidden;width:750px">
@@ -25,4 +27,5 @@
</div>
{% endfor %}
</div>
-{% endblock %} \ No newline at end of file
+{% endblock %}
+<!-- end user_votes.html -->
diff --git a/templates/users.html b/templates/users.html
index 16a83b21..c3c9f790 100644
--- a/templates/users.html
+++ b/templates/users.html
@@ -1,9 +1,11 @@
{% extends "base_content.html" %}
{% load extra_tags %}
{% load humanize %}
-{% block title %}{% spaceless %}用户列表{% endspaceless %}{% endblock %}
+{% load i18n %}
+{% block title %}{% spaceless %}{% trans "Users" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
+ //todo move javascript out
$().ready(function(){
$("#nav_users").attr('className',"on");
$("#type-user").attr('checked',true);
@@ -14,27 +16,26 @@
Hilite.elementid = "main-body";
Hilite.debug_referrer = location.href;
});
-
</script>
{% endblock %}
{% block content %}
<div class="tabBar">
- <div class="headUsers">用户列表</div>
+ <div class="headUsers">{% trans "Users" %}</div>
<div class="tabsA">
- <a id="sort_reputation" href="?sort=reputation" class="off" title="积分">积分</a>
- <a id="sort_newest" href="?sort=newest" class="off" title="最新加入">最新加入</a>
- <a id="sort_last" href="?sort=last" class="off" title="最先加入">最先加入</a>
- <a id="sort_user" href="?sort=user" class="off" title="用户名">用户名</a>
+ <a id="sort_reputation" href="?sort=reputation" class="off" title="{% trans "reputation" %}">{% trans "reputation" %}</a>
+ <a id="sort_newest" href="?sort=newest" class="off" title="{% trans "recent" %}">{% trans "recent" %}</a>
+ <a id="sort_last" href="?sort=last" class="off" title="{% trans "oldest" %}">{% trans "oldest" %}</a>
+ <a id="sort_user" href="?sort=user" class="off" title="{% trans "by username" %}">{% trans "by username" %}</a>
</div>
</div>
<div id="main-body" style="width:100%">
<p>
{% if suser %}
- 匹配查询 '<span class="darkred"><strong>{{ suser }}</strong></span>' 的所有用户名:
+ {% blocktrans %}users matching query {{suser}}:{% endblocktrans %}
{% endif %}
{% if not users.object_list %}
- <span >没有找到相关数据。</span>
+ <span>{% trans "Nothing found." %}</span>
{% endif %}
</p>
<div class="userList">
@@ -67,4 +68,5 @@
<div class="pager">
{% cnprog_paginator context %}
</div>
-{% endblock %} \ No newline at end of file
+{% endblock %}
+<!-- end users.html -->
diff --git a/templates/users_questions.html b/templates/users_questions.html
index f797a6b8..dfb87c8f 100644
--- a/templates/users_questions.html
+++ b/templates/users_questions.html
@@ -1,17 +1,21 @@
+<!-- users_questions.html -->
{% load extra_tags %}
{% load extra_filters %}
{% load humanize %}
+{% load i18n %}
<div class="user-stats-table">
{% for question in questions%}
{% if question.favourite_count %}
{% if question.favorited_myself %}
<div class="favorites-count">
- <img title="这个问题被 {{question.favourite_count}} 位用户收藏" src="/content/images/vote-favorite-on.png">
+ <img title="{% trans "this questions was selected as favorite" %} {{question.favourite_count}} {% trans "number of times" %}"
+ src="/content/images/vote-favorite-on.png">
<div><b>{{question.favourite_count|intcomma}}</b></div>
</div>
{% else %}
<div class="favorites-count-off">
- <img title="这个问题被 {{question.favourite_count}} 位用户收藏" src="/content/images/vote-favorite-off.png">
+ <img title="{% trans "this question was selected as favorite" %}{{question.favourite_count}} {% trans "number of times" %}"
+ src="/content/images/vote-favorite-off.png">
<div><b>{{question.favourite_count|intcomma}}</b></div>
</div>
{% endif %}
@@ -23,17 +27,17 @@
<div class="stats">
<div class="votes">
<div class="vote-count-post">{{question.vote_count|intcomma}}</div>
- 票
+ {% trans "votes" %}
</div>
- <div title="{% if question.answer_accepted %}有答案已被接受为正确答案{% endif %}" class="status {% if question.answer_accepted %}answered-accepted{% endif %} {% ifequal question.answer_count 0 %}unanswered{% endifequal %}{% ifnotequal question.answer_count 0 %}answered{% endifnotequal %}">
+ <div title="{% if question.answer_accepted %}{% trans "this answer has been accepted to be correct" %}{% endif %}" class="status {% if question.answer_accepted %}answered-accepted{% endif %} {% ifequal question.answer_count 0 %}unanswered{% endifequal %}{% ifnotequal question.answer_count 0 %}answered{% endifnotequal %}">
<div class="answer-count-post">{{question.answer_count|intcomma}}</div>
- 回答
+ {% trans "answers" %}
</div>
<div class="views">
<div class="views-count-post">{{question.view_count|cnprog_intword|safe}}</div>
- 浏览
+ {% trans "views" %}
</div>
</div>
</a>
@@ -44,7 +48,8 @@
<div class="tags">
{% convert2tagname_list question %}
{% for tag in question.tagnames %}
- <a href="{% url forum.views.tag tag|urlencode %}" title="查看有关'{{ tag }}'的问题" rel="tag">{{ tag }}</a>
+ <!--todo - move trans below to blocktrans -->
+ <a href="{% url forum.views.tag tag|urlencode %}" title="{% trans "see questions tagged" %} '{{ tag }}' {% trans "using tags" %}" rel="tag">{{ tag }}</a>
{% endfor %}
</div>
<div class="started">
@@ -57,4 +62,5 @@
</div>
<br clear="both"/>
{% endfor %}
-</div> \ No newline at end of file
+</div>
+<!-- end users_questions.html -->