mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-14 01:45:47 +01:00
Merge remote-tracking branch 'refs/remotes/origin/master' into develop
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"you-are-on": "Info - Tu estas en <strong>%1:%2</strong>",
|
||||
"nodes-responded": "%1 nodes responded within %2ms!",
|
||||
"you-are-on": "Info - Tú estás en <strong>%1:%2</strong>",
|
||||
"nodes-responded": "¡%1 nodos respondieron en %2ms!",
|
||||
"host": "host",
|
||||
"pid": "pid",
|
||||
"nodejs": "nodejs",
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"site-settings": "Site Settings",
|
||||
"title": "Site Title",
|
||||
"title.name": "Your Community Name",
|
||||
"title.show-in-header": "Show Site Title in Header",
|
||||
"browser-title": "Browser Title",
|
||||
"browser-title-help": "If no browser title is specified, the site title will be used",
|
||||
"title-layout": "Title Layout",
|
||||
"site-settings": "Ajustes del Sitio",
|
||||
"title": "Título del Sitio",
|
||||
"title.name": "Nombre de tu Comunidad",
|
||||
"title.show-in-header": "Mostrar Título del Sitio en el Encabezado",
|
||||
"browser-title": "Título del Navegador",
|
||||
"browser-title-help": "Si no se especifica el título del navegador, se utilizará el título del sitio",
|
||||
"title-layout": "Plantilla del Sitio",
|
||||
"title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}",
|
||||
"description.placeholder": "A short description about your community",
|
||||
"description": "Site Description",
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
"custom-header.description": "请输入自定义的 HTML 代码 (如 JavaScript,Meta Tags 等),这些代码会被添加到论坛的 <code><head></code> 部分。",
|
||||
"custom-header.enable": "启用自定义 Header",
|
||||
|
||||
"custom-css.livereload": "Enable Live Reload",
|
||||
"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": "启用实时重载",
|
||||
"custom-css.livereload.description": "启用此功能可以在您点击保存时强制您帐户下的每个设备上的所有会话进行刷新"
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"you-are-on": "信息 - 你正在 <strong>%1:%2</strong> 上",
|
||||
"nodes-responded": "%1 nodes responded within %2ms!",
|
||||
"nodes-responded": "%1个节点在%2ms内响应!",
|
||||
"host": "主机",
|
||||
"pid": "pid",
|
||||
"nodejs": "nodejs",
|
||||
"online": "在线",
|
||||
"git": "git",
|
||||
"memory": "memory",
|
||||
"memory": "内存",
|
||||
"load": "载入",
|
||||
"uptime": "正常运行时间",
|
||||
"uptime": "运行时间",
|
||||
|
||||
"registered": "已注册",
|
||||
"sockets": "接口",
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
"users": "用户",
|
||||
"posts": "发帖",
|
||||
"topics": "主题",
|
||||
"page-views-seven": "Last 7 Days",
|
||||
"page-views-thirty": "Last 30 Days",
|
||||
"page-views-last-day": "Last 24 hours",
|
||||
"page-views-custom": "Custom Date Range",
|
||||
"page-views-custom-start": "Range Start",
|
||||
"page-views-custom-end": "Range 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-error": "Please enter a valid date range in the format <code>YYYY-MM-DD</code>",
|
||||
"page-views-seven": "最近7天",
|
||||
"page-views-thirty": "最近30天",
|
||||
"page-views-last-day": "最近24小时",
|
||||
"page-views-custom": "自定义日期范围",
|
||||
"page-views-custom-start": "范围开始",
|
||||
"page-views-custom-end": "范围结束",
|
||||
"page-views-custom-help": "输入您要查看的网页浏览日期范围。 如果没有日期选择器可用,则接受的格式是 <code>YYYY-MM-DD</code>",
|
||||
"page-views-custom-error": "请输入 <code>YYYY-MM-DD</code>格式的有效日期范围 ",
|
||||
|
||||
"stats.day": "日",
|
||||
"stats.week": "周",
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
"language-settings": "语言设置",
|
||||
"description": "默认语言会决定所有用户的语言设定。 <br />单一用户可以各自在帐户设置中覆盖此项设定。",
|
||||
"default-language": "默认语言",
|
||||
"auto-detect": "Auto Detect Language Setting for Guests"
|
||||
"auto-detect": "自动检测游客的语言设置"
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "群组名",
|
||||
"description": "群组描述",
|
||||
"member-count": "Member Count",
|
||||
"member-count": "成员数",
|
||||
"system": "系统群组",
|
||||
"edit": "编辑",
|
||||
"search-placeholder": "搜索",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"headers.allow-from": "设置 ALLOW-FROM 来放置 NodeBB 于 iFrame 中",
|
||||
"headers.powered-by": "自定义由 NodeBB 发送的 \"Powered By\" 头部 ",
|
||||
"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.acah": "Access-Control-Allow-Headers",
|
||||
"traffic-management": "流量管理",
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
"unread": "未读设置",
|
||||
"unread.cutoff": "未读截止天数",
|
||||
"unread.min-track-last": "跟踪最后阅读之前的主题最小帖子",
|
||||
"recent": "Recent Settings",
|
||||
"recent.categoryFilter.disable": "Disable filtering of topics in ignored categories on the /recent page",
|
||||
"recent": "最近设置",
|
||||
"recent.categoryFilter.disable": "禁用对 /recent 页面上忽略类别中的主题进行过滤",
|
||||
"signature": "签名设置",
|
||||
"signature.disable": "禁用签名",
|
||||
"signature.no-links": "禁用签名中的链接",
|
||||
|
||||
@@ -34,12 +34,12 @@
|
||||
"registration.max-invites": "每个用户最大邀请数",
|
||||
"max-invites": "每个用户最大邀请数",
|
||||
"max-invites-help": "无限制填 0 。管理员没有邀请限制<br>仅在邀请制时可用",
|
||||
"invite-expiration": "Invite expiration",
|
||||
"invite-expiration-help": "# of days invitations expire in.",
|
||||
"invite-expiration": "邀请过期",
|
||||
"invite-expiration-help": "邀请在#日过期。",
|
||||
"min-username-length": "最小用户名长度",
|
||||
"max-username-length": "最大用户名长度",
|
||||
"min-password-length": "最小密码长度",
|
||||
"min-password-strength": "Minimum Password Strength",
|
||||
"min-password-strength": "最小密码强度",
|
||||
"max-about-me-length": "自我介绍的最大长度",
|
||||
"terms-of-use": "论坛使用条款 <small>(留空即可禁用)</small>",
|
||||
"user-search": "用户搜索",
|
||||
|
||||
@@ -32,9 +32,9 @@
|
||||
"notif.post.unsub.info": "根据您的订阅设置,为您发送此回帖提醒。",
|
||||
"test.text1": "这是一封测试邮件,用来验证 NodeBB 的邮件配置是否设置正确。",
|
||||
"unsub.cta": "点击这里修改这些设置",
|
||||
"banned.subject": "You have been banned from %1",
|
||||
"banned.text1": "The user %1 has been banned from %2.",
|
||||
"banned.text2": "This ban will last until %1.",
|
||||
"banned.text3": "This is the reason why you have been banned:",
|
||||
"banned.subject": "您已被封禁从 %1",
|
||||
"banned.text1": "用户 %1 已被封禁从 %2.",
|
||||
"banned.text2": "封禁将持续到 %1.",
|
||||
"banned.text3": "这是您被封禁的原因:",
|
||||
"closing": "谢谢!"
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"invalid-data": "无效数据",
|
||||
"invalid-json": "Invalid JSON",
|
||||
"invalid-json": "无效 JSON",
|
||||
"not-logged-in": "您还没有登录。",
|
||||
"account-locked": "您的帐号已被临时锁定",
|
||||
"search-requires-login": "搜索功能仅限会员使用 - 请先登录或者注册。",
|
||||
@@ -13,7 +13,7 @@
|
||||
"invalid-title": "无效标题!",
|
||||
"invalid-user-data": "无效用户数据",
|
||||
"invalid-password": "无效密码",
|
||||
"invalid-login-credentials": "Invalid login credentials",
|
||||
"invalid-login-credentials": "无效登录凭证",
|
||||
"invalid-username-or-password": "请确认用户名和密码",
|
||||
"invalid-search-term": "无效的搜索关键字",
|
||||
"csrf-invalid": "可能是由于会话过期,登录失败。请重试。",
|
||||
@@ -32,7 +32,7 @@
|
||||
"password-too-long": "密码太长",
|
||||
"user-banned": "用户已禁止",
|
||||
"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 秒后,才可以发帖!",
|
||||
"blacklisted-ip": "对不起,您的 IP 地址已被社区禁用。如果您认为这是一个错误,请与管理员联系。",
|
||||
"ban-expiry-missing": "请提供此次禁言结束日期",
|
||||
@@ -107,7 +107,7 @@
|
||||
"chat-disabled": "聊天系统已关闭",
|
||||
"too-many-messages": "您发送了太多消息,请稍等片刻。",
|
||||
"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-remove-last-user": "您不能移除这个用户",
|
||||
"cant-delete-chat-message": "您不允许删除这条消息",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"chat.three_months": "3个月",
|
||||
"chat.delete_message_confirm": "确认删除此消息吗?",
|
||||
"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.show_preview": "显示预览",
|
||||
"composer.hide_preview": "隐藏预览",
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
"notify_me": "此主题有新回复时通知我",
|
||||
"quote": "引用",
|
||||
"reply": "回复",
|
||||
"replies_to_this_post": "回复 %1",
|
||||
"one_reply_to_this_post": "1 Reply",
|
||||
"replies_to_this_post": "%1 条回复",
|
||||
"one_reply_to_this_post": "1 条回复",
|
||||
"last_reply_time": "最后回复",
|
||||
"reply-as-topic": "在新帖中回复",
|
||||
"guest-login-reply": "登录后回复",
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
"username_taken_workaround": "您申请的用户名已被占用,所以我们稍作更改。您现在的用户名是 <strong>%1</strong>",
|
||||
"password_same_as_username": "您的密码与用户名相同,请选择另外的密码。",
|
||||
"password_same_as_email": "您的密码与邮箱相同,请选择另外的密码。",
|
||||
"weak_password": "Weak password.",
|
||||
"weak_password": "密码强度低。",
|
||||
"upload_picture": "上传头像",
|
||||
"upload_a_picture": "上传头像",
|
||||
"remove_uploaded_picture": "删除已上传的头像",
|
||||
|
||||
@@ -15,8 +15,8 @@ define('forum/category', [
|
||||
], function (infinitescroll, share, navigator, categoryTools, sort, components, translator, topicSelect, pagination, storage) {
|
||||
var Category = {};
|
||||
|
||||
$(window).on('action:ajaxify.start', function (ev, data) {
|
||||
if (ajaxify.currentPage !== data.url) {
|
||||
$(window).on('action:ajaxify.end', function (ev, data) {
|
||||
if (data.tpl_url !== 'category') {
|
||||
navigator.disable();
|
||||
|
||||
removeListeners();
|
||||
@@ -113,11 +113,14 @@ define('forum/category', [
|
||||
return bottomIndex;
|
||||
};
|
||||
|
||||
$(window).on('action:ajaxify.contentLoaded', function () {
|
||||
$(window).on('action:popstate', function () {
|
||||
if (ajaxify.data.template.category && ajaxify.data.cid) {
|
||||
var bookmarkIndex = storage.getItem('category:' + ajaxify.data.cid + ':bookmark');
|
||||
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);
|
||||
clickedIndex = Math.max(0, parseInt(clickedIndex, 10) || 0);
|
||||
if (!parseInt(bookmarkIndex, 10)) {
|
||||
@@ -128,10 +131,10 @@ define('forum/category', [
|
||||
var page = Math.ceil((parseInt(bookmarkIndex, 10) + 1) / config.topicsPerPage);
|
||||
if (parseInt(page, 10) !== ajaxify.data.pagination.currentPage) {
|
||||
pagination.loadPage(page, function () {
|
||||
Category.scrollToTopic(bookmarkIndex, clickedIndex, 400);
|
||||
Category.scrollToTopic(bookmarkIndex, clickedIndex, 0);
|
||||
});
|
||||
} else {
|
||||
Category.scrollToTopic(bookmarkIndex, clickedIndex, 400);
|
||||
Category.scrollToTopic(bookmarkIndex, clickedIndex, 0);
|
||||
}
|
||||
} else {
|
||||
if (bookmarkIndex === 0) {
|
||||
|
||||
@@ -35,8 +35,14 @@ define('forum/login', [], function () {
|
||||
headers: {
|
||||
'x-csrf-token': config.csrf_token,
|
||||
},
|
||||
success: function (data) {
|
||||
window.location.href = data + '?loggedin';
|
||||
success: function (returnTo) {
|
||||
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) {
|
||||
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) {
|
||||
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');
|
||||
}
|
||||
next();
|
||||
|
||||
@@ -44,7 +44,7 @@ module.exports = function (middleware) {
|
||||
plugins.fireHook('filter:' + template + '.build', { req: req, res: res, templateData: options }, 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) {
|
||||
options = data.templateData;
|
||||
|
||||
@@ -57,11 +57,11 @@
|
||||
<div class="alert alert-danger hide" id="create-modal-error"></div>
|
||||
<form>
|
||||
<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]]" />
|
||||
</div>
|
||||
<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]]" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user