Merge remote-tracking branch 'refs/remotes/origin/master' into develop

v1.18.x
Barış Soner Uşaklı 8 years ago
commit a16aa33c8d

@ -1,6 +1,6 @@
{ {
"you-are-on": "Info - Tu estas en <strong>%1:%2</strong>", "you-are-on": "Info - Tú estás en <strong>%1:%2</strong>",
"nodes-responded": "%1 nodes responded within %2ms!", "nodes-responded": "¡%1 nodos respondieron en %2ms!",
"host": "host", "host": "host",
"pid": "pid", "pid": "pid",
"nodejs": "nodejs", "nodejs": "nodejs",

@ -1,11 +1,11 @@
{ {
"site-settings": "Site Settings", "site-settings": "Ajustes del Sitio",
"title": "Site Title", "title": "Título del Sitio",
"title.name": "Your Community Name", "title.name": "Nombre de tu Comunidad",
"title.show-in-header": "Show Site Title in Header", "title.show-in-header": "Mostrar Título del Sitio en el Encabezado",
"browser-title": "Browser Title", "browser-title": "Título del Navegador",
"browser-title-help": "If no browser title is specified, the site title will be used", "browser-title-help": "Si no se especifica el título del navegador, se utilizará el título del sitio",
"title-layout": "Title Layout", "title-layout": "Plantilla del Sitio",
"title-layout-help": "Define how the browser title will be structured ie. &#123;pageTitle&#125; | &#123;browserTitle&#125;", "title-layout-help": "Define how the browser title will be structured ie. &#123;pageTitle&#125; | &#123;browserTitle&#125;",
"description.placeholder": "A short description about your community", "description.placeholder": "A short description about your community",
"description": "Site Description", "description": "Site Description",

@ -7,6 +7,6 @@
"custom-header.description": "请输入自定义的 HTML 代码 (如 JavaScriptMeta Tags 等),这些代码会被添加到论坛的 <code>&lt;head&gt;</code> 部分。", "custom-header.description": "请输入自定义的 HTML 代码 (如 JavaScriptMeta Tags 等),这些代码会被添加到论坛的 <code>&lt;head&gt;</code> 部分。",
"custom-header.enable": "启用自定义 Header", "custom-header.enable": "启用自定义 Header",
"custom-css.livereload": "Enable Live Reload", "custom-css.livereload": "启用实时重载",
"custom-css.livereload.description": "Enable this to force all sessions on every device under your account to refresh whenever you click save" "custom-css.livereload.description": "启用此功能可以在您点击保存时强制您帐户下的每个设备上的所有会话进行刷新"
} }

@ -1,14 +1,14 @@
{ {
"you-are-on": "信息 - 你正在 <strong>%1:%2</strong> 上", "you-are-on": "信息 - 你正在 <strong>%1:%2</strong> 上",
"nodes-responded": "%1 nodes responded within %2ms!", "nodes-responded": "%1个节点在%2ms内响应",
"host": "主机", "host": "主机",
"pid": "pid", "pid": "pid",
"nodejs": "nodejs", "nodejs": "nodejs",
"online": "在线", "online": "在线",
"git": "git", "git": "git",
"memory": "memory", "memory": "内存",
"load": "载入", "load": "载入",
"uptime": "正常运行时间", "uptime": "运行时间",
"registered": "已注册", "registered": "已注册",
"sockets": "接口", "sockets": "接口",

@ -5,14 +5,14 @@
"users": "用户", "users": "用户",
"posts": "发帖", "posts": "发帖",
"topics": "主题", "topics": "主题",
"page-views-seven": "Last 7 Days", "page-views-seven": "最近7天",
"page-views-thirty": "Last 30 Days", "page-views-thirty": "最近30天",
"page-views-last-day": "Last 24 hours", "page-views-last-day": "最近24小时",
"page-views-custom": "Custom Date Range", "page-views-custom": "自定义日期范围",
"page-views-custom-start": "Range Start", "page-views-custom-start": "范围开始",
"page-views-custom-end": "Range End", "page-views-custom-end": "范围结束",
"page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is <code>YYYY-MM-DD</code>", "page-views-custom-help": "输入您要查看的网页浏览日期范围。 如果没有日期选择器可用,则接受的格式是 <code>YYYY-MM-DD</code>",
"page-views-custom-error": "Please enter a valid date range in the format <code>YYYY-MM-DD</code>", "page-views-custom-error": "请输入 <code>YYYY-MM-DD</code>格式的有效日期范围 ",
"stats.day": "日", "stats.day": "日",
"stats.week": "周", "stats.week": "周",

@ -2,5 +2,5 @@
"language-settings": "语言设置", "language-settings": "语言设置",
"description": "默认语言会决定所有用户的语言设定。 <br />单一用户可以各自在帐户设置中覆盖此项设定。", "description": "默认语言会决定所有用户的语言设定。 <br />单一用户可以各自在帐户设置中覆盖此项设定。",
"default-language": "默认语言", "default-language": "默认语言",
"auto-detect": "Auto Detect Language Setting for Guests" "auto-detect": "自动检测游客的语言设置"
} }

@ -1,7 +1,7 @@
{ {
"name": "群组名", "name": "群组名",
"description": "群组描述", "description": "群组描述",
"member-count": "Member Count", "member-count": "成员数",
"system": "系统群组", "system": "系统群组",
"edit": "编辑", "edit": "编辑",
"search-placeholder": "搜索", "search-placeholder": "搜索",

@ -6,7 +6,7 @@
"headers.allow-from": "设置 ALLOW-FROM 来放置 NodeBB 于 iFrame 中", "headers.allow-from": "设置 ALLOW-FROM 来放置 NodeBB 于 iFrame 中",
"headers.powered-by": "自定义由 NodeBB 发送的 \"Powered By\" 头部 ", "headers.powered-by": "自定义由 NodeBB 发送的 \"Powered By\" 头部 ",
"headers.acao": "Access-Control-Allow-Origin", "headers.acao": "Access-Control-Allow-Origin",
"headers.acao-help": "To deny access to all sites, leave empty", "headers.acao-help": "要拒绝所有网站,请留空",
"headers.acam": "Access-Control-Allow-Methods", "headers.acam": "Access-Control-Allow-Methods",
"headers.acah": "Access-Control-Allow-Headers", "headers.acah": "Access-Control-Allow-Headers",
"traffic-management": "流量管理", "traffic-management": "流量管理",

@ -29,8 +29,8 @@
"unread": "未读设置", "unread": "未读设置",
"unread.cutoff": "未读截止天数", "unread.cutoff": "未读截止天数",
"unread.min-track-last": "跟踪最后阅读之前的主题最小帖子", "unread.min-track-last": "跟踪最后阅读之前的主题最小帖子",
"recent": "Recent Settings", "recent": "最近设置",
"recent.categoryFilter.disable": "Disable filtering of topics in ignored categories on the /recent page", "recent.categoryFilter.disable": "禁用对 /recent 页面上忽略类别中的主题进行过滤",
"signature": "签名设置", "signature": "签名设置",
"signature.disable": "禁用签名", "signature.disable": "禁用签名",
"signature.no-links": "禁用签名中的链接", "signature.no-links": "禁用签名中的链接",

@ -34,12 +34,12 @@
"registration.max-invites": "每个用户最大邀请数", "registration.max-invites": "每个用户最大邀请数",
"max-invites": "每个用户最大邀请数", "max-invites": "每个用户最大邀请数",
"max-invites-help": "无限制填 0 。管理员没有邀请限制<br>仅在邀请制时可用", "max-invites-help": "无限制填 0 。管理员没有邀请限制<br>仅在邀请制时可用",
"invite-expiration": "Invite expiration", "invite-expiration": "邀请过期",
"invite-expiration-help": "# of days invitations expire in.", "invite-expiration-help": "邀请在#日过期。",
"min-username-length": "最小用户名长度", "min-username-length": "最小用户名长度",
"max-username-length": "最大用户名长度", "max-username-length": "最大用户名长度",
"min-password-length": "最小密码长度", "min-password-length": "最小密码长度",
"min-password-strength": "Minimum Password Strength", "min-password-strength": "最小密码强度",
"max-about-me-length": "自我介绍的最大长度", "max-about-me-length": "自我介绍的最大长度",
"terms-of-use": "论坛使用条款 <small>(留空即可禁用)</small>", "terms-of-use": "论坛使用条款 <small>(留空即可禁用)</small>",
"user-search": "用户搜索", "user-search": "用户搜索",

@ -32,9 +32,9 @@
"notif.post.unsub.info": "根据您的订阅设置,为您发送此回帖提醒。", "notif.post.unsub.info": "根据您的订阅设置,为您发送此回帖提醒。",
"test.text1": "这是一封测试邮件,用来验证 NodeBB 的邮件配置是否设置正确。", "test.text1": "这是一封测试邮件,用来验证 NodeBB 的邮件配置是否设置正确。",
"unsub.cta": "点击这里修改这些设置", "unsub.cta": "点击这里修改这些设置",
"banned.subject": "You have been banned from %1", "banned.subject": "您已被封禁从 %1",
"banned.text1": "The user %1 has been banned from %2.", "banned.text1": "用户 %1 已被封禁从 %2.",
"banned.text2": "This ban will last until %1.", "banned.text2": "封禁将持续到 %1.",
"banned.text3": "This is the reason why you have been banned:", "banned.text3": "这是您被封禁的原因:",
"closing": "谢谢!" "closing": "谢谢!"
} }

@ -1,6 +1,6 @@
{ {
"invalid-data": "无效数据", "invalid-data": "无效数据",
"invalid-json": "Invalid JSON", "invalid-json": "无效 JSON",
"not-logged-in": "您还没有登录。", "not-logged-in": "您还没有登录。",
"account-locked": "您的帐号已被临时锁定", "account-locked": "您的帐号已被临时锁定",
"search-requires-login": "搜索功能仅限会员使用 - 请先登录或者注册。", "search-requires-login": "搜索功能仅限会员使用 - 请先登录或者注册。",
@ -13,7 +13,7 @@
"invalid-title": "无效标题!", "invalid-title": "无效标题!",
"invalid-user-data": "无效用户数据", "invalid-user-data": "无效用户数据",
"invalid-password": "无效密码", "invalid-password": "无效密码",
"invalid-login-credentials": "Invalid login credentials", "invalid-login-credentials": "无效登录凭证",
"invalid-username-or-password": "请确认用户名和密码", "invalid-username-or-password": "请确认用户名和密码",
"invalid-search-term": "无效的搜索关键字", "invalid-search-term": "无效的搜索关键字",
"csrf-invalid": "可能是由于会话过期,登录失败。请重试。", "csrf-invalid": "可能是由于会话过期,登录失败。请重试。",
@ -32,7 +32,7 @@
"password-too-long": "密码太长", "password-too-long": "密码太长",
"user-banned": "用户已禁止", "user-banned": "用户已禁止",
"user-banned-reason": "抱歉,此帐号已经被封禁 (原因:%1)", "user-banned-reason": "抱歉,此帐号已经被封禁 (原因:%1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)", "user-banned-reason-until": "抱歉,此帐户已被封禁,直到%1原因%2",
"user-too-new": "抱歉,您需要等待 %1 秒后,才可以发帖!", "user-too-new": "抱歉,您需要等待 %1 秒后,才可以发帖!",
"blacklisted-ip": "对不起,您的 IP 地址已被社区禁用。如果您认为这是一个错误,请与管理员联系。", "blacklisted-ip": "对不起,您的 IP 地址已被社区禁用。如果您认为这是一个错误,请与管理员联系。",
"ban-expiry-missing": "请提供此次禁言结束日期", "ban-expiry-missing": "请提供此次禁言结束日期",
@ -107,7 +107,7 @@
"chat-disabled": "聊天系统已关闭", "chat-disabled": "聊天系统已关闭",
"too-many-messages": "您发送了太多消息,请稍等片刻。", "too-many-messages": "您发送了太多消息,请稍等片刻。",
"invalid-chat-message": "无效的聊天信息", "invalid-chat-message": "无效的聊天信息",
"chat-message-too-long": "Chat messages can not be longer than %1 characters.", "chat-message-too-long": "聊天消息不能超过 %1  个字符。",
"cant-edit-chat-message": "您不能编辑这条信息", "cant-edit-chat-message": "您不能编辑这条信息",
"cant-remove-last-user": "您不能移除这个用户", "cant-remove-last-user": "您不能移除这个用户",
"cant-delete-chat-message": "您不允许删除这条消息", "cant-delete-chat-message": "您不允许删除这条消息",

@ -20,7 +20,7 @@
"chat.three_months": "3个月", "chat.three_months": "3个月",
"chat.delete_message_confirm": "确认删除此消息吗?", "chat.delete_message_confirm": "确认删除此消息吗?",
"chat.add-users-to-room": "向此聊天室中添加成员", "chat.add-users-to-room": "向此聊天室中添加成员",
"chat.confirm-chat-with-dnd-user": "This user has set their status to DnD(Do not disturb). Do you still want to chat with them?", "chat.confirm-chat-with-dnd-user": "该用户将其状态设置为DnD请勿打扰。 你还想和他们聊天吗?",
"composer.compose": "编写帮助", "composer.compose": "编写帮助",
"composer.show_preview": "显示预览", "composer.show_preview": "显示预览",
"composer.hide_preview": "隐藏预览", "composer.hide_preview": "隐藏预览",

@ -13,8 +13,8 @@
"notify_me": "此主题有新回复时通知我", "notify_me": "此主题有新回复时通知我",
"quote": "引用", "quote": "引用",
"reply": "回复", "reply": "回复",
"replies_to_this_post": "回复 %1", "replies_to_this_post": "%1 条回复",
"one_reply_to_this_post": "1 Reply", "one_reply_to_this_post": "1 条回复",
"last_reply_time": "最后回复", "last_reply_time": "最后回复",
"reply-as-topic": "在新帖中回复", "reply-as-topic": "在新帖中回复",
"guest-login-reply": "登录后回复", "guest-login-reply": "登录后回复",

@ -60,7 +60,7 @@
"username_taken_workaround": "您申请的用户名已被占用,所以我们稍作更改。您现在的用户名是 <strong>%1</strong>", "username_taken_workaround": "您申请的用户名已被占用,所以我们稍作更改。您现在的用户名是 <strong>%1</strong>",
"password_same_as_username": "您的密码与用户名相同,请选择另外的密码。", "password_same_as_username": "您的密码与用户名相同,请选择另外的密码。",
"password_same_as_email": "您的密码与邮箱相同,请选择另外的密码。", "password_same_as_email": "您的密码与邮箱相同,请选择另外的密码。",
"weak_password": "Weak password.", "weak_password": "密码强度低。",
"upload_picture": "上传头像", "upload_picture": "上传头像",
"upload_a_picture": "上传头像", "upload_a_picture": "上传头像",
"remove_uploaded_picture": "删除已上传的头像", "remove_uploaded_picture": "删除已上传的头像",

@ -15,8 +15,8 @@ define('forum/category', [
], function (infinitescroll, share, navigator, categoryTools, sort, components, translator, topicSelect, pagination, storage) { ], function (infinitescroll, share, navigator, categoryTools, sort, components, translator, topicSelect, pagination, storage) {
var Category = {}; var Category = {};
$(window).on('action:ajaxify.start', function (ev, data) { $(window).on('action:ajaxify.end', function (ev, data) {
if (ajaxify.currentPage !== data.url) { if (data.tpl_url !== 'category') {
navigator.disable(); navigator.disable();
removeListeners(); removeListeners();
@ -113,11 +113,14 @@ define('forum/category', [
return bottomIndex; return bottomIndex;
}; };
$(window).on('action:ajaxify.contentLoaded', function () { $(window).on('action:popstate', function () {
if (ajaxify.data.template.category && ajaxify.data.cid) { if (ajaxify.data.template.category && ajaxify.data.cid) {
var bookmarkIndex = storage.getItem('category:' + ajaxify.data.cid + ':bookmark'); var bookmarkIndex = storage.getItem('category:' + ajaxify.data.cid + ':bookmark');
var clickedIndex = storage.getItem('category:' + ajaxify.data.cid + ':bookmark:clicked'); var clickedIndex = storage.getItem('category:' + ajaxify.data.cid + ':bookmark:clicked');
storage.removeItem('category:' + ajaxify.data.cid + ':bookmark');
storage.removeItem('category:' + ajaxify.data.cid + ':bookmark:clicked');
bookmarkIndex = Math.max(0, parseInt(bookmarkIndex, 10) || 0); bookmarkIndex = Math.max(0, parseInt(bookmarkIndex, 10) || 0);
clickedIndex = Math.max(0, parseInt(clickedIndex, 10) || 0); clickedIndex = Math.max(0, parseInt(clickedIndex, 10) || 0);
if (!parseInt(bookmarkIndex, 10)) { if (!parseInt(bookmarkIndex, 10)) {
@ -128,10 +131,10 @@ define('forum/category', [
var page = Math.ceil((parseInt(bookmarkIndex, 10) + 1) / config.topicsPerPage); var page = Math.ceil((parseInt(bookmarkIndex, 10) + 1) / config.topicsPerPage);
if (parseInt(page, 10) !== ajaxify.data.pagination.currentPage) { if (parseInt(page, 10) !== ajaxify.data.pagination.currentPage) {
pagination.loadPage(page, function () { pagination.loadPage(page, function () {
Category.scrollToTopic(bookmarkIndex, clickedIndex, 400); Category.scrollToTopic(bookmarkIndex, clickedIndex, 0);
}); });
} else { } else {
Category.scrollToTopic(bookmarkIndex, clickedIndex, 400); Category.scrollToTopic(bookmarkIndex, clickedIndex, 0);
} }
} else { } else {
if (bookmarkIndex === 0) { if (bookmarkIndex === 0) {

@ -35,8 +35,14 @@ define('forum/login', [], function () {
headers: { headers: {
'x-csrf-token': config.csrf_token, 'x-csrf-token': config.csrf_token,
}, },
success: function (data) { success: function (returnTo) {
window.location.href = data + '?loggedin'; var pathname = utils.urlToLocation(returnTo).pathname;
var params = utils.params({ url: returnTo });
params.loggedin = true;
var qs = decodeURIComponent($.param(params));
window.location.href = pathname + '?' + qs;
}, },
error: function (data) { error: function (data) {
if (data.status === 403 && data.responseText === 'Forbidden') { if (data.status === 403 && data.responseText === 'Forbidden') {

@ -123,7 +123,7 @@ middleware.privateUploads = function (req, res, next) {
if (req.user || parseInt(meta.config.privateUploads, 10) !== 1) { if (req.user || parseInt(meta.config.privateUploads, 10) !== 1) {
return next(); return next();
} }
if (req.path.startsWith('/assets/uploads/files')) { if (req.path.startsWith(nconf.get('relative_path') + '/assets/uploads/files')) {
return res.status(403).json('not-allowed'); return res.status(403).json('not-allowed');
} }
next(); next();

@ -44,7 +44,7 @@ module.exports = function (middleware) {
plugins.fireHook('filter:' + template + '.build', { req: req, res: res, templateData: options }, next); plugins.fireHook('filter:' + template + '.build', { req: req, res: res, templateData: options }, next);
}, },
function (data, next) { function (data, next) {
plugins.fireHook('filter:middleware.render', { req: res, res: res, templateData: data.templateData }, next); plugins.fireHook('filter:middleware.render', { req: req, res: res, templateData: data.templateData }, next);
}, },
function (data, next) { function (data, next) {
options = data.templateData; options = data.templateData;

@ -57,11 +57,11 @@
<div class="alert alert-danger hide" id="create-modal-error"></div> <div class="alert alert-danger hide" id="create-modal-error"></div>
<form> <form>
<div class="form-group"> <div class="form-group">
<label for="group-name">[[admin/manage/groups:name]]</label> <label for="create-group-name">[[admin/manage/groups:name]]</label>
<input type="text" class="form-control" id="create-group-name" placeholder="[[admin/manage/groups:name]]" /> <input type="text" class="form-control" id="create-group-name" placeholder="[[admin/manage/groups:name]]" />
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="group-name">[[admin/manage/groups:name]]</label> <label for="create-group-desc">[[admin/manage/groups:description]]</label>
<input type="text" class="form-control" id="create-group-desc" placeholder="[[admin/manage/groups:description-placeholder]]" /> <input type="text" class="form-control" id="create-group-desc" placeholder="[[admin/manage/groups:description-placeholder]]" />
</div> </div>
</form> </form>

Loading…
Cancel
Save