From c98331de820dbe8a86d374f85af63b189e4c79e9 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 29 Dec 2014 15:52:00 -0500 Subject: [PATCH 001/172] revamping categories management page in ACP, #2463 --- public/less/admin/admin.less | 1 - public/less/admin/manage/categories.less | 133 ------------- public/src/admin/manage/categories.js | 4 - src/controllers/admin.js | 25 +-- src/routes/admin.js | 4 +- src/views/admin/manage/categories.tpl | 201 ++++++++------------ src/views/admin/partials/categories/row.tpl | 16 ++ 7 files changed, 101 insertions(+), 283 deletions(-) delete mode 100644 public/less/admin/manage/categories.less create mode 100644 src/views/admin/partials/categories/row.tpl diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index d1626805ce..b7bebd8f98 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -2,7 +2,6 @@ @import "./mixins"; @import "./general/dashboard"; -@import "./manage/categories"; @import "./manage/groups"; @import "./manage/tags"; @import "./manage/flags"; diff --git a/public/less/admin/manage/categories.less b/public/less/admin/manage/categories.less deleted file mode 100644 index 5982a108dd..0000000000 --- a/public/less/admin/manage/categories.less +++ /dev/null @@ -1,133 +0,0 @@ -.categories { - .entry-row { - border-radius: 10px; - cursor: move; - list-style-type: none; - } - - .fa-icons .col-md-3 { - padding-left: 0; - padding-right: 0; - } - - .admin-categories { - margin-top: 20px; - - > ul > li { - - label { - font-size: 12px; - font-weight: none; - } - - form { - .btn-group { - display: block; - } - } - h3 { - margin-top: 0; - } - - h3, h4 { - cursor: text; - .fa-edit { - cursor: pointer; - } - } - - h3, h4, .toggle-settings { - padding-left: 8px; - } - - .preview-box { - width: 100%; - height: 100px; - text-align: center; - color: white; - margin-top: 0; - - .icon { - width: 30px; - height: 30px; - line-height: 40px; - display: inline-block; - margin: 35px 5px 0 5px; - } - } - - .dropdown { - hr { - margin: 5px auto; - } - } - } - } - - .permissions-modal { - .search-results { - padding: 0; - - > li { - .zebra; - clear: both; - list-style-type: none; - padding: 0.5em; - min-height: 46px; - - a { - &:before { - font-family: "FontAwesome"; - content: "\f096"; - display: inline-block; - min-width: 20px; - } - - &.active:before { - content: "\f046"; - } - } - - img { - width: 32px; - margin-right: 1em; - } - } - } - - .members { - li { - list-style-type: none; - .inline-block; - .pointer; - - img { - width: 32px; - } - - &.empty { - font-size: 12px; - cursor: auto; - min-height: 28px; - } - } - } - } - - .category-list { - padding: 0; - - li { - .inline-block; - .pointer; - padding: 0.5em; - margin: 0.25em; - .border-radius(3px); - - &.disabled { - -webkit-filter: grayscale(30%); - .opacity(0.5); - } - } - } -} \ No newline at end of file diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index 5bf1bfe945..8968549b91 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -40,10 +40,6 @@ define('admin/manage/categories', [ return false; } - function update_blockclass(el) { - el.parentNode.parentNode.className = 'entry-row ' + el.value; - } - function updateCategoryOrders() { var categories = $('.admin-categories #entry-container').children(); for(var i = 0; i +
Categories
- - -
-
    - -
  • -
    -
    -
    - -
    -
    -
    - -
    -
    -

    {categories.name}

    - -

    {categories.description}

    - - -
    -
    -
    - - -
    - - -
    - - - -
    -
    -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    - - -
    -
    -
    -
    -
  • - -
-
+
+ + + + + + + + + + + + + + + + + + + + + +
NameDescriptionTopicsPosts
+ + + + {active.name}{active.description}{active.topic_count}{active.post_count}
+
@@ -141,6 +49,47 @@
+ +
+
+
Categories
+
+
+ + + + + + + + + + + + + + + + + + + + + +
NameDescriptionTopicsPosts
+ + + + {disabled.name}{disabled.description}{disabled.topic_count}{disabled.post_count}
+
+
+
+
diff --git a/src/views/admin/partials/categories/row.tpl b/src/views/admin/partials/categories/row.tpl new file mode 100644 index 0000000000..0e4c15909b --- /dev/null +++ b/src/views/admin/partials/categories/row.tpl @@ -0,0 +1,16 @@ + + + + + + + {name} + {description} + {topic_count} + {post_count} + \ No newline at end of file From 9e63b5f9a01f2e6afa42e2d466b2a30f6cc18318 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 29 Dec 2014 15:52:32 -0500 Subject: [PATCH 002/172] moved ACP menu into a partial --- src/views/admin/header.tpl | 90 +------------------------------ src/views/admin/partials/menu.tpl | 89 ++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 89 deletions(-) create mode 100644 src/views/admin/partials/menu.tpl diff --git a/src/views/admin/header.tpl b/src/views/admin/header.tpl index 2b14ff8e1f..dfa2dc9c89 100644 --- a/src/views/admin/header.tpl +++ b/src/views/admin/header.tpl @@ -101,95 +101,7 @@
\ No newline at end of file diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl new file mode 100644 index 0000000000..af9acc8e12 --- /dev/null +++ b/src/views/admin/partials/menu.tpl @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + \ No newline at end of file From 6b95b28db7246a51889f881b33e873858baae31e Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 29 Dec 2014 21:20:43 -0500 Subject: [PATCH 003/172] drag/drop re-ordering fixed in ACP, #2463 --- public/less/admin/admin.less | 6 ++++++ public/src/admin/manage/categories.js | 21 ++++++++++++--------- src/controllers/admin.js | 4 ++++ src/routes/admin.js | 3 ++- src/views/admin/manage/categories.tpl | 8 ++++++-- src/views/admin/partials/categories/row.tpl | 16 ---------------- 6 files changed, 30 insertions(+), 28 deletions(-) delete mode 100644 src/views/admin/partials/categories/row.tpl diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index b7bebd8f98..220ea5ff6d 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -259,4 +259,10 @@ #taskbar { display: none; /* not sure why I have to do this, but it only seems to show up on prod */ } +} + +.table-reordering { + tr:hover { + cursor: move; + } } \ No newline at end of file diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index 8968549b91..4124cbf423 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -40,20 +40,23 @@ define('admin/manage/categories', [ return false; } - function updateCategoryOrders() { - var categories = $('.admin-categories #entry-container').children(); - for(var i = 0; i Categories
- +
@@ -12,6 +12,7 @@ + @@ -31,6 +32,7 @@ + @@ -55,7 +57,7 @@
Categories
-
Description Topics Posts
{active.description} {active.topic_count} {active.post_count}Edit
+
@@ -63,6 +65,7 @@ + @@ -82,6 +85,7 @@ + diff --git a/src/views/admin/partials/categories/row.tpl b/src/views/admin/partials/categories/row.tpl deleted file mode 100644 index 0e4c15909b..0000000000 --- a/src/views/admin/partials/categories/row.tpl +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - \ No newline at end of file From a091757aa010cf2bfe1b4b69f3f845dc2a3e9602 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 29 Dec 2014 21:37:55 -0500 Subject: [PATCH 004/172] adding dedicated category edit page for ACP #2463 --- src/controllers/admin.js | 8 ++++++++ src/views/admin/manage/category.tpl | 1 + src/views/config.json | 2 ++ 3 files changed, 11 insertions(+) create mode 100644 src/views/admin/manage/category.tpl diff --git a/src/controllers/admin.js b/src/controllers/admin.js index e3c0e615a7..365d4fa6b8 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -119,7 +119,15 @@ function getStatsForSet(set, field, callback) { } adminController.categories.get = function(req, res, next) { + categories.getCategoryData(req.params.category_id, function(err, category) { + if (err) { + return next(err); + } + res.render('admin/manage/category', { + category: category + }); + }); }; adminController.categories.getAll = function(req, res, next) { diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl new file mode 100644 index 0000000000..2fb9d362bb --- /dev/null +++ b/src/views/admin/manage/category.tpl @@ -0,0 +1 @@ +test {category.cid} \ No newline at end of file diff --git a/src/views/config.json b/src/views/config.json index 70ba11b3af..674719366d 100644 --- a/src/views/config.json +++ b/src/views/config.json @@ -2,6 +2,8 @@ "custom_mapping": { "^\/?$": "home", "^admin?$": "admin/general/dashboard", + "^admin/manage/categories/[\\d]+$": "admin/manage/category", + "^users/sort-posts": "users", "^users/latest": "users", "^users/sort-reputation": "users", From 84e90cd73d37686f81953ff91b5846be02a3dee2 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 30 Dec 2014 12:25:39 -0500 Subject: [PATCH 005/172] category enable/disabled #2463 --- public/src/admin/manage/categories.js | 44 ++++++++++++++++----------- src/views/admin/manage/categories.tpl | 18 ++++++++--- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index 4124cbf423..f28b9c52bf 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -9,6 +9,8 @@ define('admin/manage/categories', [ var Categories = {}; Categories.init = function() { + var bothEl = $('#active-categories, #disabled-categories'); + var modified_categories = {}; function modified(el) { @@ -55,9 +57,29 @@ define('admin/manage/categories', [ socket.emit('admin.categories.update', modified); } - $('#entry-container').sortable({ + bothEl.sortable({ stop: updateCategoryOrders, - distance: 10 + distance: 15 + }); + + // Category enable/disable + bothEl.on('click', '[data-action="toggle"]', function(ev) { + var btnEl = $(this), + cid = btnEl.parents('tr').attr('data-cid'), + disabled = btnEl.attr('data-disabled') === 'false' ? '1' : '0', + payload = {}; + + payload[cid] = { + disabled: disabled + }; + + socket.emit('admin.categories.update', payload, function(err, result) { + if (err) { + return app.alertError(err.message); + } else { + ajaxify.refresh(); + } + }); }); $('.blockclass, .admin-categories form select').each(function() { @@ -76,7 +98,7 @@ define('admin/manage/categories', [ icon: $('#new-category-modal i').attr('value'), bgColor: '#0059b2', color: '#fff', - order: $('.admin-categories #entry-container').children().length + 1 + order: $('#disabled-categories').children().length + 1 }; socket.emit('admin.categories.create', category, function(err, data) { @@ -145,7 +167,7 @@ define('admin/manage/categories', [ $('#addNew').on('click', showCreateCategoryModal); $('#create-category-btn').on('click', createNewCategory); - $('#entry-container, #new-category-modal').on('click', '.icon', function(ev) { + $('#active-categories, #disabled-categories, #new-category-modal').on('click', '.icon', function(ev) { iconSelect.init($(this).find('i'), modified); }); @@ -153,20 +175,6 @@ define('admin/manage/categories', [ modified(ev.target); }); - $('.dropdown').on('click', '[data-disabled]', function(ev) { - var btn = $(this), - categoryRow = btn.parents('li'), - cid = categoryRow.attr('data-cid'), - disabled = btn.attr('data-disabled') === 'false' ? '1' : '0'; - - categoryRow.remove(); - modified_categories[cid] = modified_categories[cid] || {}; - modified_categories[cid].disabled = disabled; - - save(); - return false; - }); - // Colour Picker $('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker); diff --git a/src/views/admin/manage/categories.tpl b/src/views/admin/manage/categories.tpl index 0bec4891a7..210e323204 100644 --- a/src/views/admin/manage/categories.tpl +++ b/src/views/admin/manage/categories.tpl @@ -15,7 +15,7 @@ - + - + @@ -68,7 +73,7 @@ - + - + From 1186bff8909f2cdcd5b50a483b300dbbaa11fd8f Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 30 Dec 2014 13:04:31 -0500 Subject: [PATCH 006/172] category edit page, #2463 --- public/src/admin/manage/category.js | 313 ++++++++++++++++++++++++++ src/views/admin/manage/categories.tpl | 9 - src/views/admin/manage/category.tpl | 110 ++++++++- 3 files changed, 422 insertions(+), 10 deletions(-) create mode 100644 public/src/admin/manage/category.js diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js new file mode 100644 index 0000000000..36f6867a1a --- /dev/null +++ b/public/src/admin/manage/category.js @@ -0,0 +1,313 @@ +"use strict"; +/*global define */ + +define('admin/manage/category', [ + 'uploader', + 'admin/modules/iconSelect', + 'admin/modules/colorpicker' +], function(uploader, iconSelect, colorpicker) { + var Category = {}; + + Category.init = function() { + var modified_categories = {}; + + function modified(el) { + var cid = $(el).parents('form').attr('data-cid'); + if(cid) { + modified_categories[cid] = modified_categories[cid] || {}; + modified_categories[cid][$(el).attr('data-name')] = $(el).val(); + } + } + + function save() { + if(Object.keys(modified_categories).length) { + socket.emit('admin.categories.update', modified_categories, function(err, result) { + if (err) { + return app.alertError(err.message); + } + + if (result && result.length) { + app.alert({ + title: 'Updated Categories', + message: 'Category IDs ' + result.join(', ') + ' was successfully updated.', + type: 'success', + timeout: 2000 + }); + } + }); + modified_categories = {}; + } + return false; + } + + $('.blockclass, form.category select').each(function() { + var $this = $(this); + $this.val($this.attr('data-value')); + }); + + function enableColorPicker(idx, inputEl) { + var $inputEl = $(inputEl), + previewEl = $inputEl.parents('[data-cid]').find('.preview-box'); + + colorpicker.enable($inputEl, function(hsb, hex) { + if ($inputEl.attr('data-name') === 'bgColor') { + previewEl.css('background', '#' + hex); + } else if ($inputEl.attr('data-name') === 'color') { + previewEl.css('color', '#' + hex); + } + + modified($inputEl[0]); + }); + } + + function setupEditTargets() { + $('[data-edit-target]').on('click', function() { + var $this = $(this), + target = $($this.attr('data-edit-target')); + + $this.addClass('hide'); + target.removeClass('hide').on('blur', function() { + $this.removeClass('hide').children('span').html(this.value); + $(this).addClass('hide'); + }).val($this.children('span').html()); + + target.focus(); + }); + } + + $(function() { + var url = window.location.href, + parts = url.split('/'), + active = parts[parts.length - 1], + optionsEl = $('.options'); + + $('#new-category-modal').on('click', '.icon', function(ev) { + iconSelect.init($(this).find('i'), modified); + }); + + $('form.category input, form.category select').on('change', function(ev) { + modified(ev.target); + }); + + // Colour Picker + $('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker); + + optionsEl.on('click', '.save', save); + optionsEl.on('click', '.revert', ajaxify.refresh); + optionsEl.on('click', '.purge', function() { + var categoryRow = $(this).parents('li[data-cid]'); + var cid = categoryRow.attr('data-cid'); + + bootbox.confirm('

Do you really want to purge this category "' + $('form.category').find('input[data-name="name"]').val() + '"?

Warning! All topics and posts in this category will be purged!

', function(confirm) { + if (!confirm) { + return; + } + socket.emit('admin.categories.purge', cid, function(err) { + if (err) { + return app.alertError(err.message); + } + app.alertSuccess('Category purged!'); + categoryRow.remove(); + }); + }); + }); + + // $('.admin-categories').on('click', '.permissions', function() { + // var cid = $(this).parents('li[data-cid]').attr('data-cid'); + // Categories.launchPermissionsModal(cid); + // return false; + // }); + + + $('.admin-categories').on('click', '.upload-button', function() { + var inputEl = $(this), + cid = inputEl.parents('li[data-cid]').attr('data-cid'); + + uploader.open(RELATIVE_PATH + '/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { + inputEl.val(imageUrlOnServer); + var previewBox = inputEl.parents('li[data-cid]').find('.preview-box'); + previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')') + .css('background-size', 'cover'); + modified(inputEl[0]); + }); + }); + + $('.admin-categories').on('click', '.delete-image', function() { + var parent = $(this).parents('li[data-cid]'), + inputEl = parent.find('.upload-button'), + preview = parent.find('.preview-box'), + bgColor = parent.find('.category_bgColor').val(); + + inputEl.val(''); + modified(inputEl[0]); + + preview.css('background', bgColor); + + $(this).addClass('hide').hide(); + }); + + setupEditTargets(); + + // $('button[data-action="setParent"]').on('click', function() { + // var cid = $(this).parents('[data-cid]').attr('data-cid'), + // modal = $('#setParent'); + + // modal.find('select').val($(this).attr('data-parentCid')); + // modal.attr('data-cid', cid).modal(); + // }); + + // $('button[data-action="removeParent"]').on('click', function() { + // var cid = $(this).parents('[data-cid]').attr('data-cid'); + // var payload= {}; + // payload[cid] = { + // parentCid: 0 + // }; + // socket.emit('admin.categories.update', payload, function(err) { + // if (err) { + // return app.alertError(err.message); + // } + // ajaxify.go('admin/manage/categories/active'); + // }); + // }); + + // $('#setParent [data-cid]').on('click', function() { + // var modalEl = $('#setParent'), + // parentCid = $(this).attr('data-cid'), + // payload = {}; + + // payload[modalEl.attr('data-cid')] = { + // parentCid: parentCid + // }; + + // socket.emit('admin.categories.update', payload, function(err) { + // modalEl.one('hidden.bs.modal', function() { + // ajaxify.go('admin/manage/categories/active'); + // }); + // modalEl.modal('hide'); + // }); + // }); + }); + }; + + // Category.launchPermissionsModal = function(cid) { + // var modal = $('#category-permissions-modal'), + // searchEl = modal.find('#permission-search'), + // resultsEl = modal.find('.search-results.users'), + // groupsResultsEl = modal.find('.search-results.groups'), + // searchDelay; + + // // Clear the search field and results + // searchEl.val(''); + // resultsEl.html(''); + + // searchEl.off().on('keyup', function() { + // var searchEl = this, + // liEl; + + // clearTimeout(searchDelay); + + // searchDelay = setTimeout(function() { + // socket.emit('admin.categories.search', { + // username: searchEl.value, + // cid: cid + // }, function(err, results) { + // if(err) { + // return app.alertError(err.message); + // } + + // templates.parse('admin/partials/categories/users', { + // users: results + // }, function(html) { + // resultsEl.html(html); + // }); + // }); + // }, 250); + // }); + + // Category.refreshPrivilegeList(cid); + + // resultsEl.off().on('click', '[data-priv]', function(e) { + // var anchorEl = $(this), + // uid = anchorEl.parents('li[data-uid]').attr('data-uid'), + // privilege = anchorEl.attr('data-priv'); + // e.preventDefault(); + // e.stopPropagation(); + + // socket.emit('admin.categories.setPrivilege', { + // cid: cid, + // uid: uid, + // privilege: privilege, + // set: !anchorEl.hasClass('active') + // }, function(err) { + // if (err) { + // return app.alertError(err.message); + // } + // anchorEl.toggleClass('active', !anchorEl.hasClass('active')); + // Category.refreshPrivilegeList(cid); + // }); + // }); + + // modal.off().on('click', '.members li > img', function() { + // searchEl.val($(this).attr('title')); + // searchEl.keyup(); + // }); + + // // User Groups and privileges + // socket.emit('admin.categories.groupsList', cid, function(err, results) { + // if(err) { + // return app.alertError(err.message); + // } + + // templates.parse('admin/partials/categories/groups', { + // groups: results + // }, function(html) { + // groupsResultsEl.html(html); + // }); + // }); + + // groupsResultsEl.off().on('click', '[data-priv]', function(e) { + // var anchorEl = $(this), + // name = anchorEl.parents('li[data-name]').attr('data-name'), + // privilege = anchorEl.attr('data-priv'); + // e.preventDefault(); + // e.stopPropagation(); + + // socket.emit('admin.categories.setGroupPrivilege', { + // cid: cid, + // name: name, + // privilege: privilege, + // set: !anchorEl.hasClass('active') + // }, function(err) { + // if (!err) { + // anchorEl.toggleClass('active'); + // } + // }); + // }); + + // modal.modal(); + // }; + + // Category.refreshPrivilegeList = function (cid) { + // var modalEl = $('#category-permissions-modal'), + // memberList = $('.members'); + + // socket.emit('admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) { + // var membersLength = privilegeList.length, + // liEl, x, userObj; + + // memberList.html(''); + // if (membersLength > 0) { + // for(x = 0; x < membersLength; x++) { + // userObj = privilegeList[x]; + // liEl = $('
  • ').attr('data-uid', userObj.uid).html(''); + // memberList.append(liEl); + // } + // } else { + // liEl = $('
  • ').addClass('empty').html('None.'); + // memberList.append(liEl); + // } + // }); + // }; + + return Category; +}); \ No newline at end of file diff --git a/src/views/admin/manage/categories.tpl b/src/views/admin/manage/categories.tpl index 210e323204..779c1ce624 100644 --- a/src/views/admin/manage/categories.tpl +++ b/src/views/admin/manage/categories.tpl @@ -107,13 +107,4 @@ - - \ No newline at end of file diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index 2fb9d362bb..00d6ab64ed 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -1 +1,109 @@ -test {category.cid} \ No newline at end of file +
    +
    +
    +
    Categories
    +
    +
    +
    + +
    +
    +
    +

    {category.name}

    + +

    {category.description}

    + + +
    +
    +
    + + +
    + + +
    + + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    Categories Control Panel
    +
    +
    + + +
    +
    + +
    +
    +
    + + + +
    \ No newline at end of file From dfe8e8de701fa594604298d3dd05be59a6ec19b8 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 1 Jan 2015 15:35:22 -0500 Subject: [PATCH 007/172] image uploading for categories, #2463 --- public/less/admin/admin.less | 16 ++ public/src/admin/manage/categories.js | 321 +------------------------- public/src/admin/manage/category.js | 112 ++++----- src/views/admin/manage/categories.tpl | 11 - src/views/admin/manage/category.tpl | 26 ++- 5 files changed, 99 insertions(+), 387 deletions(-) diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 220ea5ff6d..867434fe46 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -265,4 +265,20 @@ tr:hover { cursor: move; } +} + +.category-preview { + width: 100%; + height: 100px; + text-align: center; + color: white; + margin-top: 0; + + .icon { + width: 30px; + height: 30px; + line-height: 40px; + display: inline-block; + margin: 35px 5px 0 5px; + } } \ No newline at end of file diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index f28b9c52bf..fd6658fe9c 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -1,47 +1,12 @@ "use strict"; /*global define, socket, app, bootbox, templates, ajaxify, RELATIVE_PATH*/ -define('admin/manage/categories', [ - 'uploader', - 'admin/modules/iconSelect', - 'admin/modules/colorpicker' -], function(uploader, iconSelect, colorpicker) { +define('admin/manage/categories', function() { var Categories = {}; Categories.init = function() { var bothEl = $('#active-categories, #disabled-categories'); - var modified_categories = {}; - - function modified(el) { - var cid = $(el).parents('li').attr('data-cid'); - if(cid) { - modified_categories[cid] = modified_categories[cid] || {}; - modified_categories[cid][$(el).attr('data-name')] = $(el).val(); - } - } - - function save() { - if(Object.keys(modified_categories).length) { - socket.emit('admin.categories.update', modified_categories, function(err, result) { - if (err) { - return app.alertError(err.message); - } - - if (result && result.length) { - app.alert({ - title: 'Updated Categories', - message: 'Category IDs ' + result.join(', ') + ' was successfully updated.', - type: 'success', - timeout: 2000 - }); - } - }); - modified_categories = {}; - } - return false; - } - function updateCategoryOrders(evt, ui) { var categories = $(evt.target).children(), modified = {}, @@ -82,11 +47,6 @@ define('admin/manage/categories', [ }); }); - $('.blockclass, .admin-categories form select').each(function() { - var $this = $(this); - $this.val($this.attr('data-value')); - }); - function showCreateCategoryModal() { $('#new-category-modal').modal(); } @@ -119,283 +79,8 @@ define('admin/manage/categories', [ }); } - function enableColorPicker(idx, inputEl) { - var $inputEl = $(inputEl), - previewEl = $inputEl.parents('[data-cid]').find('.preview-box'); - - colorpicker.enable($inputEl, function(hsb, hex) { - if ($inputEl.attr('data-name') === 'bgColor') { - previewEl.css('background', '#' + hex); - } else if ($inputEl.attr('data-name') === 'color') { - previewEl.css('color', '#' + hex); - } - - modified($inputEl[0]); - }); - } - - function setupEditTargets() { - $('[data-edit-target]').on('click', function() { - var $this = $(this), - target = $($this.attr('data-edit-target')); - - $this.addClass('hide'); - target.removeClass('hide').on('blur', function() { - $this.removeClass('hide').children('span').html(this.value); - $(this).addClass('hide'); - }).val($this.children('span').html()); - - target.focus(); - }); - } - - $(function() { - var url = window.location.href, - parts = url.split('/'), - active = parts[parts.length - 1]; - - $('.nav-pills li').removeClass('active'); - $('.nav-pills li a').each(function() { - var $this = $(this); - if ($this.attr('href').match(active)) { - $this.parent().addClass('active'); - return false; - } - }); - - - $('#addNew').on('click', showCreateCategoryModal); - $('#create-category-btn').on('click', createNewCategory); - - $('#active-categories, #disabled-categories, #new-category-modal').on('click', '.icon', function(ev) { - iconSelect.init($(this).find('i'), modified); - }); - - $('.admin-categories form input, .admin-categories form select').on('change', function(ev) { - modified(ev.target); - }); - - // Colour Picker - $('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker); - - $('.admin-categories').on('click', '.save', save); - $('.admin-categories').on('click', '.purge', function() { - var categoryRow = $(this).parents('li[data-cid]'); - var cid = categoryRow.attr('data-cid'); - - bootbox.confirm('Do you really want to purge this category "' + categoryRow.find('#cid-' + cid + '-name').val() + '"?
    Warning! All topics and posts in this category will be purged!', function(confirm) { - if (!confirm) { - return; - } - socket.emit('admin.categories.purge', cid, function(err) { - if (err) { - return app.alertError(err.message); - } - app.alertSuccess('Category purged!'); - categoryRow.remove(); - }); - }); - }); - - $('.admin-categories').on('click', '.permissions', function() { - var cid = $(this).parents('li[data-cid]').attr('data-cid'); - Categories.launchPermissionsModal(cid); - return false; - }); - - - $('.admin-categories').on('click', '.upload-button', function() { - var inputEl = $(this), - cid = inputEl.parents('li[data-cid]').attr('data-cid'); - - uploader.open(RELATIVE_PATH + '/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { - inputEl.val(imageUrlOnServer); - var previewBox = inputEl.parents('li[data-cid]').find('.preview-box'); - previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')') - .css('background-size', 'cover'); - modified(inputEl[0]); - }); - }); - - $('.admin-categories').on('click', '.delete-image', function() { - var parent = $(this).parents('li[data-cid]'), - inputEl = parent.find('.upload-button'), - preview = parent.find('.preview-box'), - bgColor = parent.find('.category_bgColor').val(); - - inputEl.val(''); - modified(inputEl[0]); - - preview.css('background', bgColor); - - $(this).addClass('hide').hide(); - }); - - $('#revertChanges').on('click', function() { - ajaxify.refresh(); - }); - - setupEditTargets(); - - $('button[data-action="setParent"]').on('click', function() { - var cid = $(this).parents('[data-cid]').attr('data-cid'), - modal = $('#setParent'); - - modal.find('select').val($(this).attr('data-parentCid')); - modal.attr('data-cid', cid).modal(); - }); - - $('button[data-action="removeParent"]').on('click', function() { - var cid = $(this).parents('[data-cid]').attr('data-cid'); - var payload= {}; - payload[cid] = { - parentCid: 0 - }; - socket.emit('admin.categories.update', payload, function(err) { - if (err) { - return app.alertError(err.message); - } - ajaxify.go('admin/manage/categories/active'); - }); - }); - - $('#setParent [data-cid]').on('click', function() { - var modalEl = $('#setParent'), - parentCid = $(this).attr('data-cid'), - payload = {}; - - payload[modalEl.attr('data-cid')] = { - parentCid: parentCid - }; - - socket.emit('admin.categories.update', payload, function(err) { - modalEl.one('hidden.bs.modal', function() { - ajaxify.go('admin/manage/categories/active'); - }); - modalEl.modal('hide'); - }); - }); - }); - }; - - Categories.launchPermissionsModal = function(cid) { - var modal = $('#category-permissions-modal'), - searchEl = modal.find('#permission-search'), - resultsEl = modal.find('.search-results.users'), - groupsResultsEl = modal.find('.search-results.groups'), - searchDelay; - - // Clear the search field and results - searchEl.val(''); - resultsEl.html(''); - - searchEl.off().on('keyup', function() { - var searchEl = this, - liEl; - - clearTimeout(searchDelay); - - searchDelay = setTimeout(function() { - socket.emit('admin.categories.search', { - username: searchEl.value, - cid: cid - }, function(err, results) { - if(err) { - return app.alertError(err.message); - } - - templates.parse('admin/partials/categories/users', { - users: results - }, function(html) { - resultsEl.html(html); - }); - }); - }, 250); - }); - - Categories.refreshPrivilegeList(cid); - - resultsEl.off().on('click', '[data-priv]', function(e) { - var anchorEl = $(this), - uid = anchorEl.parents('li[data-uid]').attr('data-uid'), - privilege = anchorEl.attr('data-priv'); - e.preventDefault(); - e.stopPropagation(); - - socket.emit('admin.categories.setPrivilege', { - cid: cid, - uid: uid, - privilege: privilege, - set: !anchorEl.hasClass('active') - }, function(err) { - if (err) { - return app.alertError(err.message); - } - anchorEl.toggleClass('active', !anchorEl.hasClass('active')); - Categories.refreshPrivilegeList(cid); - }); - }); - - modal.off().on('click', '.members li > img', function() { - searchEl.val($(this).attr('title')); - searchEl.keyup(); - }); - - // User Groups and privileges - socket.emit('admin.categories.groupsList', cid, function(err, results) { - if(err) { - return app.alertError(err.message); - } - - templates.parse('admin/partials/categories/groups', { - groups: results - }, function(html) { - groupsResultsEl.html(html); - }); - }); - - groupsResultsEl.off().on('click', '[data-priv]', function(e) { - var anchorEl = $(this), - name = anchorEl.parents('li[data-name]').attr('data-name'), - privilege = anchorEl.attr('data-priv'); - e.preventDefault(); - e.stopPropagation(); - - socket.emit('admin.categories.setGroupPrivilege', { - cid: cid, - name: name, - privilege: privilege, - set: !anchorEl.hasClass('active') - }, function(err) { - if (!err) { - anchorEl.toggleClass('active'); - } - }); - }); - - modal.modal(); - }; - - Categories.refreshPrivilegeList = function (cid) { - var modalEl = $('#category-permissions-modal'), - memberList = $('.members'); - - socket.emit('admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) { - var membersLength = privilegeList.length, - liEl, x, userObj; - - memberList.html(''); - if (membersLength > 0) { - for(x = 0; x < membersLength; x++) { - userObj = privilegeList[x]; - liEl = $('
  • ').attr('data-uid', userObj.uid).html(''); - memberList.append(liEl); - } - } else { - liEl = $('
  • ').addClass('empty').html('None.'); - memberList.append(liEl); - } - }); + $('#addNew').on('click', showCreateCategoryModal); + $('#create-category-btn').on('click', createNewCategory); }; return Categories; diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 36f6867a1a..9ba5d28e7b 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -11,9 +11,12 @@ define('admin/manage/category', [ Category.init = function() { var modified_categories = {}; - function modified(el) { - var cid = $(el).parents('form').attr('data-cid'); - if(cid) { + function modified(el, cid) { + if (!cid) { + cid = $(el).parents('form').attr('data-cid'); + } + + if (cid) { modified_categories[cid] = modified_categories[cid] || {}; modified_categories[cid][$(el).attr('data-name')] = $(el).val(); } @@ -75,42 +78,52 @@ define('admin/manage/category', [ }); } - $(function() { - var url = window.location.href, - parts = url.split('/'), - active = parts[parts.length - 1], - optionsEl = $('.options'); + // If any inputs have changed, prepare it for saving + $('form.category input, form.category select').on('change', function(ev) { + modified(ev.target); + }); - $('#new-category-modal').on('click', '.icon', function(ev) { - iconSelect.init($(this).find('i'), modified); - }); + // Colour Picker + $('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker); - $('form.category input, form.category select').on('change', function(ev) { - modified(ev.target); - }); + // Options menu events + var optionsEl = $('.options'); + optionsEl.on('click', '.save', save); + optionsEl.on('click', '.revert', ajaxify.refresh); + optionsEl.on('click', '.purge', function() { + var categoryRow = $(this).parents('li[data-cid]'); + var cid = categoryRow.attr('data-cid'); - // Colour Picker - $('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker); - - optionsEl.on('click', '.save', save); - optionsEl.on('click', '.revert', ajaxify.refresh); - optionsEl.on('click', '.purge', function() { - var categoryRow = $(this).parents('li[data-cid]'); - var cid = categoryRow.attr('data-cid'); - - bootbox.confirm('

    Do you really want to purge this category "' + $('form.category').find('input[data-name="name"]').val() + '"?

    Warning! All topics and posts in this category will be purged!

    ', function(confirm) { - if (!confirm) { - return; + bootbox.confirm('

    Do you really want to purge this category "' + $('form.category').find('input[data-name="name"]').val() + '"?

    Warning! All topics and posts in this category will be purged!

    ', function(confirm) { + if (!confirm) { + return; + } + socket.emit('admin.categories.purge', cid, function(err) { + if (err) { + return app.alertError(err.message); } - socket.emit('admin.categories.purge', cid, function(err) { - if (err) { - return app.alertError(err.message); - } - app.alertSuccess('Category purged!'); - categoryRow.remove(); - }); + app.alertSuccess('Category purged!'); + categoryRow.remove(); }); }); + }); + + // Image Uploader + $('.upload-button').on('click', function() { + var inputEl = $(this), + cid = inputEl.attr('data-cid'); + + uploader.open(RELATIVE_PATH + '/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { + inputEl.val(imageUrlOnServer); + var previewBox = inputEl.siblings('.category-preview'); + previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')') + .css('background-size', 'cover'); + modified(inputEl[0], cid); + }); + }); + + $(function() { + // $('.admin-categories').on('click', '.permissions', function() { // var cid = $(this).parents('li[data-cid]').attr('data-cid'); @@ -119,32 +132,19 @@ define('admin/manage/category', [ // }); - $('.admin-categories').on('click', '.upload-button', function() { - var inputEl = $(this), - cid = inputEl.parents('li[data-cid]').attr('data-cid'); + // $('.admin-categories').on('click', '.delete-image', function() { + // var parent = $(this).parents('li[data-cid]'), + // inputEl = parent.find('.upload-button'), + // preview = parent.find('.preview-box'), + // bgColor = parent.find('.category_bgColor').val(); - uploader.open(RELATIVE_PATH + '/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { - inputEl.val(imageUrlOnServer); - var previewBox = inputEl.parents('li[data-cid]').find('.preview-box'); - previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')') - .css('background-size', 'cover'); - modified(inputEl[0]); - }); - }); + // inputEl.val(''); + // modified(inputEl[0]); - $('.admin-categories').on('click', '.delete-image', function() { - var parent = $(this).parents('li[data-cid]'), - inputEl = parent.find('.upload-button'), - preview = parent.find('.preview-box'), - bgColor = parent.find('.category_bgColor').val(); + // preview.css('background', bgColor); - inputEl.val(''); - modified(inputEl[0]); - - preview.css('background', bgColor); - - $(this).addClass('hide').hide(); - }); + // $(this).addClass('hide').hide(); + // }); setupEditTargets(); diff --git a/src/views/admin/manage/categories.tpl b/src/views/admin/manage/categories.tpl index 779c1ce624..ebdeaad6bd 100644 --- a/src/views/admin/manage/categories.tpl +++ b/src/views/admin/manage/categories.tpl @@ -47,16 +47,6 @@ -
    -
    -
    Categories Control Panel
    -
    - - -
    -
    -
    -
    Categories
    @@ -106,5 +96,4 @@
    -
    \ No newline at end of file diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index 00d6ab64ed..36e424f241 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -1,5 +1,5 @@
    -
    +
    Categories
    @@ -81,9 +81,31 @@
    + +
    -
    +
    + +
    Categories Control Panel
    From 02e0d4635b8361a7ccb799ac89b384cc093eaa11 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 1 Jan 2015 16:24:47 -0500 Subject: [PATCH 008/172] icon mgmt for #2463 --- public/src/admin/manage/category.js | 17 ++-- public/src/admin/modules/iconSelect.js | 3 +- src/views/admin/manage/category.tpl | 105 +++++++++++++------------ 3 files changed, 65 insertions(+), 60 deletions(-) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 9ba5d28e7b..5794084f61 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -1,5 +1,5 @@ "use strict"; -/*global define */ +/*global define, app, socket, ajaxify, RELATIVE_PATH, bootbox */ define('admin/manage/category', [ 'uploader', @@ -11,10 +11,8 @@ define('admin/manage/category', [ Category.init = function() { var modified_categories = {}; - function modified(el, cid) { - if (!cid) { - cid = $(el).parents('form').attr('data-cid'); - } + function modified(el) { + var cid = $(el).parents('form').attr('data-cid'); if (cid) { modified_categories[cid] = modified_categories[cid] || {}; @@ -115,13 +113,18 @@ define('admin/manage/category', [ uploader.open(RELATIVE_PATH + '/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { inputEl.val(imageUrlOnServer); - var previewBox = inputEl.siblings('.category-preview'); + var previewBox = inputEl.parent().siblings('.category-preview'); previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')') .css('background-size', 'cover'); - modified(inputEl[0], cid); + modified(inputEl[0]); }); }); + // Icon selection + $('.category-preview').on('click', function(ev) { + iconSelect.init($(this).find('i'), modified); + }); + $(function() { diff --git a/public/src/admin/modules/iconSelect.js b/public/src/admin/modules/iconSelect.js index 286009bf0f..065521de20 100644 --- a/public/src/admin/modules/iconSelect.js +++ b/public/src/admin/modules/iconSelect.js @@ -14,7 +14,7 @@ define(function() { selected = 'fa-doesnt-exist'; } if (selected) { - $('#icons .fa-icons .fa.' + selected).parent().addClass('selected'); + $('#icons .fa-icons .fa.' + selected).addClass('selected'); } bootbox.confirm('

    Select an icon.

    ' + $('#icons').html(), function(confirm) { @@ -29,6 +29,7 @@ define(function() { el.val(categoryIconClass); el.attr('value', categoryIconClass); + console.log(el); onModified(el); } }); diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index 36e424f241..bfae5700a8 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -1,21 +1,22 @@
    -
    -
    -
    Categories
    -
    -
    -
    -
    - -
    - -
    -
  • Description Topics Posts
    {disabled.description} {disabled.topic_count} {disabled.post_count}Edit
    - - - - {name}{description}{topic_count}{post_count}
    @@ -32,7 +32,12 @@ {active.description} {active.topic_count} {active.post_count}Edit +
    + Edit + +
    +
    @@ -85,7 +90,12 @@ {disabled.description} {disabled.topic_count} {disabled.post_count}Edit +
    + Edit + +
    +
    - - - - - - - - - - - - - - - - - - - - - - -
    NameDescriptionTopicsPosts
    - - - - {active.name}{active.description}{active.topic_count}{active.post_count} -
    - Edit - -
    -
    -
    + + + + + + + + + + + + + + + + + + + + + + + +
    NameDescriptionTopicsPosts
    + + + + {active.name}{active.description}{active.topic_count}{active.post_count} +
    + Edit + +
    +
    @@ -51,46 +49,44 @@
    Categories
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    NameDescriptionTopicsPosts
    - - - - {disabled.name}{disabled.description}{disabled.topic_count}{disabled.post_count} -
    - Edit - -
    -
    -
    + + + + + + + + + + + + + + + + + + + + + + + +
    NameDescriptionTopicsPosts
    + + + + {disabled.name}{disabled.description}{disabled.topic_count}{disabled.post_count} +
    + Edit + +
    +
    From 815ea88fa5aaa7d07f0f73446aa006ca2530f974 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 11:58:21 -0400 Subject: [PATCH 131/172] readded some missing classes, fixed some styling on category.tpl, fixed image uploading code --- public/less/admin/admin.less | 22 ++++++++++++++++++++++ public/src/admin/manage/category.js | 2 +- src/views/admin/manage/categories.tpl | 20 ++++++++++++++++++++ src/views/admin/manage/category.tpl | 12 ++++++++---- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 57e46db038..6331c3b1e2 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -295,3 +295,25 @@ max-width: calc( ~"(100% - 200px)/4" ); } } + +.category-preview { + width: 100%; + height: 100px; + text-align: center; + color: white; + margin-top: 0; + + .icon { + width: 30px; + height: 30px; + line-height: 40px; + display: inline-block; + margin: 35px 5px 0 5px; + } +} + +.table-reordering { + tr:hover { + cursor: move; + } +} diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 5794084f61..d6057e2663 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -111,7 +111,7 @@ define('admin/manage/category', [ var inputEl = $(this), cid = inputEl.attr('data-cid'); - uploader.open(RELATIVE_PATH + '/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { + uploader.open(RELATIVE_PATH + '/api/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { inputEl.val(imageUrlOnServer); var previewBox = inputEl.parent().siblings('.category-preview'); previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')') diff --git a/src/views/admin/manage/categories.tpl b/src/views/admin/manage/categories.tpl index 6c1dd413e1..3f94ff125e 100644 --- a/src/views/admin/manage/categories.tpl +++ b/src/views/admin/manage/categories.tpl @@ -15,6 +15,7 @@ + @@ -39,6 +40,15 @@ + + + +
    + You have no active categories. +
    + + + @@ -61,6 +71,7 @@ + @@ -85,6 +96,15 @@ + + + +
    + You have no disabled categories. +
    + + + diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index bfae5700a8..dcb045adf6 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -83,7 +83,7 @@ -
    +
    -
    - +
    +
    + +
    - +
    + +
    From 9b84a887d31374ea25fa2bc67de3d6e2a01ec516 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 15:42:15 -0400 Subject: [PATCH 132/172] a huge frickin' number of changes for #2887. This is part of #2463 --- public/less/admin/admin.less | 11 ++ public/src/admin/manage/category.js | 72 +++++++++++- public/src/modules/autocomplete.js | 12 +- public/src/modules/helpers.js | 15 +++ src/controllers/admin.js | 9 +- src/groups.js | 16 ++- src/privileges/categories.js | 102 +++++++++++++++++ src/socket.io/admin/categories.js | 104 +++++++----------- src/views/admin/manage/category.tpl | 55 +++++---- .../admin/partials/categories/permissions.tpl | 32 ------ 10 files changed, 299 insertions(+), 129 deletions(-) delete mode 100644 src/views/admin/partials/categories/permissions.tpl diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 6331c3b1e2..0e35f3a6df 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -317,3 +317,14 @@ cursor: move; } } + +.privilege-table { + th { + font-size: 10px; + } + + img { + max-width: 24px; + max-height: 24px; + } +} diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index d6057e2663..c0344604e8 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -4,8 +4,9 @@ define('admin/manage/category', [ 'uploader', 'admin/modules/iconSelect', - 'admin/modules/colorpicker' -], function(uploader, iconSelect, colorpicker) { + 'admin/modules/colorpicker', + 'autocomplete' +], function(uploader, iconSelect, colorpicker, autocomplete) { var Category = {}; Category.init = function() { @@ -113,7 +114,7 @@ define('admin/manage/category', [ uploader.open(RELATIVE_PATH + '/api/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { inputEl.val(imageUrlOnServer); - var previewBox = inputEl.parent().siblings('.category-preview'); + var previewBox = inputEl.parent().parent().siblings('.category-preview'); previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')') .css('background-size', 'cover'); modified(inputEl[0]); @@ -125,6 +126,8 @@ define('admin/manage/category', [ iconSelect.init($(this).find('i'), modified); }); + Category.setupPrivilegeTable(); + $(function() { @@ -312,5 +315,68 @@ define('admin/manage/category', [ // }); // }; + Category.setupPrivilegeTable = function() { + var searchEl = $('.privilege-search'), + searchObj = autocomplete.user(searchEl); + + // User search + addition to table + searchObj.on('autocompleteselect', function(ev, ui) { + socket.emit('admin.categories.setPrivilege', { + cid: ajaxify.variables.get('cid'), + privilege: 'read', + set: true, + member: ui.item.user.uid + }, function(err) { + if (err) { + return app.alertError(err.message); + } + + Category.refreshPrivilegeTable(); + searchEl.val(''); + }); + }); + + // Checkbox event capture + $('.privilege-table-container').on('change', 'input[type="checkbox"]', function() { + var checkboxEl = $(this), + privilege = checkboxEl.parent().attr('data-privilege'), + state = checkboxEl.prop('checked'), + rowEl = checkboxEl.parents('tr'), + member = rowEl.attr('data-group-slug') || rowEl.attr('data-uid'); + + if (member) { + socket.emit('admin.categories.setPrivilege', { + cid: ajaxify.variables.get('cid'), + privilege: privilege, + set: state, + member: member + }, function(err) { + if (err) { + return app.alertError(err.message); + } + + checkboxEl.replaceWith(''); + Category.refreshPrivilegeTable(); + }); + } else { + app.alertError('No member or group was selected'); + } + }) + }; + + Category.refreshPrivilegeTable = function() { + socket.emit('admin.categories.getPrivilegeSettings', 2, function(err, privileges) { + if (err) { + return app.alertError(err.message); + } + + templates.parse('admin/partials/categories/privileges', { + privileges: privileges + }, function(html) { + $('.privilege-table-container').html(html); + }); + }); + }; + return Category; }); \ No newline at end of file diff --git a/public/src/modules/autocomplete.js b/public/src/modules/autocomplete.js index d8b2311b98..55c15b8686 100644 --- a/public/src/modules/autocomplete.js +++ b/public/src/modules/autocomplete.js @@ -7,7 +7,7 @@ define('autocomplete', function() { var module = {}; module.user = function (input) { - input.autocomplete({ + return input.autocomplete({ delay: 100, source: function(request, response) { socket.emit('user.search', {query: request.term}, function(err, result) { @@ -17,7 +17,15 @@ define('autocomplete', function() { if (result && result.users) { var names = result.users.map(function(user) { - return user && user.username; + return user && { + label: user.username, + value: user.username, + user: { + uid: user.uid, + name: user.username, + slug: user.userslug + } + }; }); response(names); } diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index 5361099476..dfecb7e78b 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -98,6 +98,21 @@ } }; + helpers.spawnPrivilegeStates = function(privileges) { + var states = []; + for(var priv in privileges) { + if (privileges.hasOwnProperty(priv)) { + states.push({ + name: priv, + state: privileges[priv] + }); + } + } + return states.map(function(priv) { + return ''; + }).join(''); + }; + exports.register = function() { var templates; diff --git a/src/controllers/admin.js b/src/controllers/admin.js index 77a1ff143b..6e58915038 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -6,6 +6,7 @@ var async = require('async'), user = require('../user'), categories = require('../categories'), + privileges = require('../privileges'), posts = require('../posts'), topics = require('../topics'), meta = require('../meta'), @@ -127,13 +128,17 @@ function getGlobalField(field, callback) { } adminController.categories.get = function(req, res, next) { - categories.getCategoryData(req.params.category_id, function(err, category) { + async.parallel({ + category: async.apply(categories.getCategoryData, req.params.category_id), + privileges: async.apply(privileges.categories.list, req.params.category_id) + }, function(err, data) { if (err) { return next(err); } res.render('admin/manage/category', { - category: category + category: data.category, + privileges: data.privileges }); }); }; diff --git a/src/groups.js b/src/groups.js index 43a376106f..a4369a6785 100644 --- a/src/groups.js +++ b/src/groups.js @@ -271,7 +271,15 @@ var async = require('async'), }; Groups.getGroupFields = function(groupName, fields, callback) { - db.getObjectFields('group:' + groupName, fields, callback); + Groups.getMultipleGroupFields([groupName], fields, function(err, groups) { + callback(err, groups ? groups[0] : null); + }); + }; + + Groups.getMultipleGroupFields = function(groups, fields, callback) { + db.getObjectsFields(groups.map(function(group) { + return 'group:' + group; + }), fields, callback); }; Groups.setGroupField = function(groupName, field, value, callback) { @@ -306,6 +314,12 @@ var async = require('async'), db.getSortedSetRevRange('group:' + groupName + ':members', start, end, callback); }; + Groups.getMembersOfGroups = function(groupNames, callback) { + db.getSortedSetsMembers(groupNames.map(function(name) { + return 'group:' + name + ':members'; + }), callback); + }; + Groups.isMember = function(uid, groupName, callback) { if (!uid || parseInt(uid, 10) <= 0) { return callback(null, false); diff --git a/src/privileges/categories.js b/src/privileges/categories.js index d2f4938a7b..92cf9b2a56 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -13,6 +13,108 @@ module.exports = function(privileges) { privileges.categories = {}; + privileges.categories.list = function(cid, callback) { + // Method used in admin/category controller to show all users with privs in that given cid + async.parallel({ + labels: function(next) { + async.parallel({ + users: async.apply(plugins.fireHook, 'filter:privileges.list_human', + ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics', 'Moderator'].map(function(name) { + return { + name: name + }; + }) + ), + groups: async.apply(plugins.fireHook, 'filter:privileges.groups.list_human', + ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics'].map(function(name) { + return { + name: name + }; + }) + ) + }, next); + }, + users: function(next) { + var privileges; + async.waterfall([ + async.apply(plugins.fireHook, 'filter:privileges.list', [ + 'find', 'read', 'topics:create', 'topics:reply', 'mods' + ]), + function(privs, next) { + privileges = privs; + groups.getMembersOfGroups(privs.map(function(privilege) { + return 'cid:' + cid + ':privileges:' + privilege; + }), next); + }, + function(memberSets, next) { + // Reduce into a single array + var members = memberSets.reduce(function(combined, curMembers) { + return combined.concat(curMembers); + }).filter(function(member, index, combined) { + return combined.indexOf(member) === index; + }); + + user.getMultipleUserFields(members, ['picture', 'username'], function(err, memberData) { + memberData = memberData.map(function(member) { + member.privileges = {}; + for(var x=0,numPrivs=privileges.length;x
    -
    Categories
    +
    Category Settings
    -
    -
    - -
    -
    -

    {category.name}

    {category.description}

    @@ -68,7 +55,7 @@
    - +
    @@ -81,6 +68,24 @@
    + +
    +
    Privileges / Access Control
    +
    +

    + You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or + a per-group basis. You can add a new user or group to this table by searching for them in the form below. +

    +

    + Note: Privilege settings take effect immediately. It is not necessary to save the category after adjusting + these settings. +

    +
    + +
    + +
    +
    @@ -99,11 +104,11 @@
    - +
    - +
    @@ -113,12 +118,16 @@
    Categories Control Panel
    -
    - - +
    +
    + +
    +
    + +

    - +
    @@ -133,4 +142,6 @@
    - \ No newline at end of file + + + \ No newline at end of file diff --git a/src/views/admin/partials/categories/permissions.tpl b/src/views/admin/partials/categories/permissions.tpl deleted file mode 100644 index a8077e2aa4..0000000000 --- a/src/views/admin/partials/categories/permissions.tpl +++ /dev/null @@ -1,32 +0,0 @@ - \ No newline at end of file From 36942125e629ae633e3e268a1cf708910e88a702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 25 Mar 2015 15:51:11 -0400 Subject: [PATCH 133/172] closes #2894 also mark user online if they post a reply --- public/src/client/topic/posts.js | 31 ++++++++++++++++++++++++++++--- src/socket.io/posts.js | 2 ++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index c2ea3940ff..85dfbbb6bb 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -56,9 +56,34 @@ define('forum/topic/posts', [ } function removeAlreadyAddedPosts() { - data.posts = data.posts.filter(function(post) { - return components.get('post', 'pid', post.pid).length === 0; - }); + var newPosts = components.get('topic').find('[data-index][data-index!="0"].new'); + + if (newPosts.length === data.posts.length) { + var allSamePids = true; + newPosts.each(function(index, el) { + if (parseInt($(el).attr('data-pid'), 10) !== parseInt(data.posts[index].pid, 10)) { + allSamePids = false; + } + }); + + if (allSamePids) { + newPosts.each(function() { + $(this).removeClass('new'); + }); + data.posts.length = 0; + return; + } + } + + if (data.posts.length > 1) { + data.posts.forEach(function(post) { + components.get('post', 'pid', post.pid).remove(); + }); + } else { + data.posts = data.posts.filter(function(post) { + return components.get('post', 'pid', post.pid).length === 0; + }); + } } var after = null, diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index 94f6be7a37..2fdf4425b5 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -49,6 +49,8 @@ SocketPosts.reply = function(socket, data, callback) { socket.emit('event:new_post', result); + user.updateOnlineUsers(socket.uid); + SocketPosts.notifyOnlineUsers(socket.uid, result); if (data.lock) { From d3af2781238f682504b296a428d315bfdb0d16f0 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 16:09:38 -0400 Subject: [PATCH 134/172] removed old code that was no longer necessary, updated privilege table to show all groups (similar to previous behaviour), fixes #2887 --- src/groups.js | 1 + src/privileges/categories.js | 34 +++++++++++-------------- src/socket.io/admin/categories.js | 42 ------------------------------- 3 files changed, 16 insertions(+), 61 deletions(-) diff --git a/src/groups.js b/src/groups.js index a4369a6785..89c3eba9b8 100644 --- a/src/groups.js +++ b/src/groups.js @@ -47,6 +47,7 @@ var async = require('async'), getEphemeralGroup: function(groupName) { return { name: groupName, + slug: utils.slugify(groupName), description: '', deleted: '0', hidden: '0', diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 92cf9b2a56..f1dd6f6898 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -82,29 +82,25 @@ module.exports = function(privileges) { }), next); }, function(memberSets, next) { - // Reduce into a single array - var members = memberSets.reduce(function(combined, curMembers) { - return combined.concat(curMembers); - }).filter(function(member, index, combined) { - return combined.indexOf(member) === index; - }); - - // Special handling for "guests" group - members.splice(members.indexOf('guests'), 1); - - groups.getMultipleGroupFields(members, ['name', 'slug', 'memberCount'], function(err, memberData) { - memberData.push({ - name: 'guests', - slug: 'guests' - }); - - memberData = memberData.map(function(member) { + groups.list({ + expand: false, + isAdmin: true, + showSystemGroups: true + }, function(err, memberData) { + memberData = memberData.filter(function(member) { + return member.name.indexOf(':privileges:') === -1; + }).map(function(member) { member.privileges = {}; for(var x=0,numPrivs=privileges.length;x Date: Wed, 25 Mar 2015 16:20:27 -0400 Subject: [PATCH 135/172] #2894 no need to remove if there are no new posts --- public/src/client/topic/posts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 85dfbbb6bb..1e907bfca5 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -75,7 +75,7 @@ define('forum/topic/posts', [ } } - if (data.posts.length > 1) { + if (newPosts.length && data.posts.length > 1) { data.posts.forEach(function(post) { components.get('post', 'pid', post.pid).remove(); }); From 9dece4a1db35f7f63c7ec21924adf27516493276 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 17:21:38 -0400 Subject: [PATCH 136/172] added some missing files from previous commits, fixed setParent mechanic which broke after I refactored, #2463 --- public/less/admin/admin.less | 11 + public/less/generics.less | 16 ++ public/src/admin/manage/category.js | 207 +++++------------- src/controllers/admin.js | 4 +- src/meta/css.js | 2 + src/views/admin/manage/category.tpl | 19 +- .../admin/partials/categories/privileges.tpl | 32 +++ 7 files changed, 124 insertions(+), 167 deletions(-) create mode 100644 public/less/generics.less create mode 100644 src/views/admin/partials/categories/privileges.tpl diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 0e35f3a6df..61462cef49 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -296,6 +296,17 @@ } } +.category-settings-form { + h3 { + margin-top: 0; + .pointer; + } + + h4 { + .pointer; + } +} + .category-preview { width: 100%; height: 100px; diff --git a/public/less/generics.less b/public/less/generics.less new file mode 100644 index 0000000000..e44d5f0d72 --- /dev/null +++ b/public/less/generics.less @@ -0,0 +1,16 @@ +.category-list { + padding: 0; + + li { + .inline-block; + .pointer; + padding: 0.5em; + margin: 0.25em; + .border-radius(3px); + + &.disabled { + -webkit-filter: grayscale(30%); + .opacity(0.5); + } + } +} \ No newline at end of file diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index c0344604e8..8a77c8747e 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -126,6 +126,23 @@ define('admin/manage/category', [ iconSelect.init($(this).find('i'), modified); }); + // Parent Category Selector + $('button[data-action="setParent"]').on('click', Category.launchParentSelector); + $('button[data-action="removeParent"]').on('click', function() { + var payload= {}; + payload[ajaxify.variables.get('cid')] = { + parentCid: 0 + }; + + socket.emit('admin.categories.update', payload, function(err) { + if (err) { + return app.alertError(err.message); + } + ajaxify.refresh(); + }); + }); + + setupEditTargets(); Category.setupPrivilegeTable(); $(function() { @@ -152,169 +169,12 @@ define('admin/manage/category', [ // $(this).addClass('hide').hide(); // }); - setupEditTargets(); + - // $('button[data-action="setParent"]').on('click', function() { - // var cid = $(this).parents('[data-cid]').attr('data-cid'), - // modal = $('#setParent'); - // modal.find('select').val($(this).attr('data-parentCid')); - // modal.attr('data-cid', cid).modal(); - // }); - - // $('button[data-action="removeParent"]').on('click', function() { - // var cid = $(this).parents('[data-cid]').attr('data-cid'); - // var payload= {}; - // payload[cid] = { - // parentCid: 0 - // }; - // socket.emit('admin.categories.update', payload, function(err) { - // if (err) { - // return app.alertError(err.message); - // } - // ajaxify.go('admin/manage/categories/active'); - // }); - // }); - - // $('#setParent [data-cid]').on('click', function() { - // var modalEl = $('#setParent'), - // parentCid = $(this).attr('data-cid'), - // payload = {}; - - // payload[modalEl.attr('data-cid')] = { - // parentCid: parentCid - // }; - - // socket.emit('admin.categories.update', payload, function(err) { - // modalEl.one('hidden.bs.modal', function() { - // ajaxify.go('admin/manage/categories/active'); - // }); - // modalEl.modal('hide'); - // }); - // }); }); }; - // Category.launchPermissionsModal = function(cid) { - // var modal = $('#category-permissions-modal'), - // searchEl = modal.find('#permission-search'), - // resultsEl = modal.find('.search-results.users'), - // groupsResultsEl = modal.find('.search-results.groups'), - // searchDelay; - - // // Clear the search field and results - // searchEl.val(''); - // resultsEl.html(''); - - // searchEl.off().on('keyup', function() { - // var searchEl = this, - // liEl; - - // clearTimeout(searchDelay); - - // searchDelay = setTimeout(function() { - // socket.emit('admin.categories.search', { - // username: searchEl.value, - // cid: cid - // }, function(err, results) { - // if(err) { - // return app.alertError(err.message); - // } - - // templates.parse('admin/partials/categories/users', { - // users: results - // }, function(html) { - // resultsEl.html(html); - // }); - // }); - // }, 250); - // }); - - // Category.refreshPrivilegeList(cid); - - // resultsEl.off().on('click', '[data-priv]', function(e) { - // var anchorEl = $(this), - // uid = anchorEl.parents('li[data-uid]').attr('data-uid'), - // privilege = anchorEl.attr('data-priv'); - // e.preventDefault(); - // e.stopPropagation(); - - // socket.emit('admin.categories.setPrivilege', { - // cid: cid, - // uid: uid, - // privilege: privilege, - // set: !anchorEl.hasClass('active') - // }, function(err) { - // if (err) { - // return app.alertError(err.message); - // } - // anchorEl.toggleClass('active', !anchorEl.hasClass('active')); - // Category.refreshPrivilegeList(cid); - // }); - // }); - - // modal.off().on('click', '.members li > img', function() { - // searchEl.val($(this).attr('title')); - // searchEl.keyup(); - // }); - - // // User Groups and privileges - // socket.emit('admin.categories.groupsList', cid, function(err, results) { - // if(err) { - // return app.alertError(err.message); - // } - - // templates.parse('admin/partials/categories/groups', { - // groups: results - // }, function(html) { - // groupsResultsEl.html(html); - // }); - // }); - - // groupsResultsEl.off().on('click', '[data-priv]', function(e) { - // var anchorEl = $(this), - // name = anchorEl.parents('li[data-name]').attr('data-name'), - // privilege = anchorEl.attr('data-priv'); - // e.preventDefault(); - // e.stopPropagation(); - - // socket.emit('admin.categories.setGroupPrivilege', { - // cid: cid, - // name: name, - // privilege: privilege, - // set: !anchorEl.hasClass('active') - // }, function(err) { - // if (!err) { - // anchorEl.toggleClass('active'); - // } - // }); - // }); - - // modal.modal(); - // }; - - // Category.refreshPrivilegeList = function (cid) { - // var modalEl = $('#category-permissions-modal'), - // memberList = $('.members'); - - // socket.emit('admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) { - // var membersLength = privilegeList.length, - // liEl, x, userObj; - - // memberList.html(''); - // if (membersLength > 0) { - // for(x = 0; x < membersLength; x++) { - // userObj = privilegeList[x]; - // liEl = $('
  • ').attr('data-uid', userObj.uid).html(''); - // memberList.append(liEl); - // } - // } else { - // liEl = $('
  • ').addClass('empty').html('None.'); - // memberList.append(liEl); - // } - // }); - // }; - Category.setupPrivilegeTable = function() { var searchEl = $('.privilege-search'), searchObj = autocomplete.user(searchEl); @@ -378,5 +238,36 @@ define('admin/manage/category', [ }); }; + Category.launchParentSelector = function() { + socket.emit('categories.get', function(err, categories) { + templates.parse('partials/category_list', { + categories: categories + }, function(html) { + var modal = bootbox.dialog({ + message: html, + title: 'Set Parent Category' + }); + + modal.find('li[data-cid]').on('click', function() { + var parentCid = $(this).attr('data-cid'), + payload = {}; + + payload[ajaxify.variables.get('cid')] = { + parentCid: parentCid + }; + + socket.emit('admin.categories.update', payload, function(err) { + if (err) { + return app.alertError(err.message); + } + + modal.modal('hide'); + ajaxify.refresh(); + }); + }); + }); + }); + }; + return Category; }); \ No newline at end of file diff --git a/src/controllers/admin.js b/src/controllers/admin.js index 6e58915038..24332866f9 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -129,7 +129,7 @@ function getGlobalField(field, callback) { adminController.categories.get = function(req, res, next) { async.parallel({ - category: async.apply(categories.getCategoryData, req.params.category_id), + category: async.apply(categories.getCategories, [req.params.category_id], req.user.uid), privileges: async.apply(privileges.categories.list, req.params.category_id) }, function(err, data) { if (err) { @@ -137,7 +137,7 @@ adminController.categories.get = function(req, res, next) { } res.render('admin/manage/category', { - category: data.category, + category: data.category[0], privileges: data.privileges }); }); diff --git a/src/meta/css.js b/src/meta/css.js index a8682b1038..50369f89fb 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -68,8 +68,10 @@ module.exports = function(Meta) { source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.css";'; source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/textcomplete/jquery.textcomplete.css";'; source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";'; + source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/generics.less";'; var acpSource = '\n@import "..' + path.sep + 'public/less/admin/admin";\n' + source; + acpSource += '\n@import "..' + path.sep + 'public/less/generics.less";'; acpSource += '\n@import (inline) "..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";'; source = '@import "./theme";\n' + source; diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index d51680bc93..4b3b01c66f 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -3,24 +3,29 @@
    Category Settings
    -
    -

    {category.name}

    - -

    {category.description}

    - +
    +
    +
    +

    {category.name}

    + +

    {category.description}

    + +
    +
    - + +
    - +
    diff --git a/src/views/admin/partials/categories/privileges.tpl b/src/views/admin/partials/categories/privileges.tpl new file mode 100644 index 0000000000..e0c65c3e1d --- /dev/null +++ b/src/views/admin/partials/categories/privileges.tpl @@ -0,0 +1,32 @@ +
    + + + + + + + + + + + + {function.spawnPrivilegeStates, privileges} + + +
    User{privileges.labels.users.name}
    {username}
    + + + + + + + + + + + + {function.spawnPrivilegeStates, privileges} + + +
    Group{privileges.labels.groups.name}
    {privileges.groups.name}
    +
    \ No newline at end of file From 4f2c7382c5651a4e5678afd8b7d92ba2bc65a096 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 17:34:16 -0400 Subject: [PATCH 137/172] passing in the column count so a message can be displayed to users when no users have privs in a category, #2887 --- src/controllers/admin.js | 2 ++ src/views/admin/partials/categories/privileges.tpl | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/controllers/admin.js b/src/controllers/admin.js index 24332866f9..6dc344a9b0 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -136,6 +136,8 @@ adminController.categories.get = function(req, res, next) { return next(err); } + data.privileges.columnCount = data.privileges.labels.users.length + 2; + res.render('admin/manage/category', { category: data.category[0], privileges: data.privileges diff --git a/src/views/admin/partials/categories/privileges.tpl b/src/views/admin/partials/categories/privileges.tpl index e0c65c3e1d..6e809f819c 100644 --- a/src/views/admin/partials/categories/privileges.tpl +++ b/src/views/admin/partials/categories/privileges.tpl @@ -6,6 +6,7 @@ {privileges.labels.users.name} + @@ -13,6 +14,13 @@ {function.spawnPrivilegeStates, privileges} + + + +
    No user-specific privileges in this category.
    + + + From 7cdfe143ab965153437141357764e8c0c0ead1db Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 17:41:54 -0400 Subject: [PATCH 138/172] fixed bug where cid was hardcoded, and switched format back to storing group names, not slugs, #2887 --- public/src/admin/manage/category.js | 4 ++-- src/privileges/categories.js | 3 +-- src/views/admin/partials/categories/privileges.tpl | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 8a77c8747e..4b27ccbb90 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -202,7 +202,7 @@ define('admin/manage/category', [ privilege = checkboxEl.parent().attr('data-privilege'), state = checkboxEl.prop('checked'), rowEl = checkboxEl.parents('tr'), - member = rowEl.attr('data-group-slug') || rowEl.attr('data-uid'); + member = rowEl.attr('data-group-name') || rowEl.attr('data-uid'); if (member) { socket.emit('admin.categories.setPrivilege', { @@ -225,7 +225,7 @@ define('admin/manage/category', [ }; Category.refreshPrivilegeTable = function() { - socket.emit('admin.categories.getPrivilegeSettings', 2, function(err, privileges) { + socket.emit('admin.categories.getPrivilegeSettings', ajaxify.variables.get('cid'), function(err, privileges) { if (err) { return app.alertError(err.message); } diff --git a/src/privileges/categories.js b/src/privileges/categories.js index f1dd6f6898..d0a78e5438 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -92,12 +92,11 @@ module.exports = function(privileges) { }).map(function(member) { member.privileges = {}; for(var x=0,numPrivs=privileges.length;x - + {function.spawnPrivilegeStates, privileges} From e340b9fffeecb5a7ae6ee3698358e1e12554fa65 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 17:51:46 -0400 Subject: [PATCH 139/172] fixed save/delete/purge in category ACP, #2463 --- public/src/admin/manage/category.js | 49 ++++++----------------------- public/src/ajaxify.js | 6 +++- 2 files changed, 14 insertions(+), 41 deletions(-) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 4b27ccbb90..81db954432 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -21,7 +21,9 @@ define('admin/manage/category', [ } } - function save() { + function save(e) { + e.preventDefault(); + if(Object.keys(modified_categories).length) { socket.emit('admin.categories.update', modified_categories, function(err, result) { if (err) { @@ -39,7 +41,6 @@ define('admin/manage/category', [ }); modified_categories = {}; } - return false; } $('.blockclass, form.category select').each(function() { @@ -85,24 +86,21 @@ define('admin/manage/category', [ // Colour Picker $('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker); - // Options menu events - var optionsEl = $('.options'); - optionsEl.on('click', '.save', save); - optionsEl.on('click', '.revert', ajaxify.refresh); - optionsEl.on('click', '.purge', function() { - var categoryRow = $(this).parents('li[data-cid]'); - var cid = categoryRow.attr('data-cid'); + $('.save').on('click', save); + $('.revert').on('click', ajaxify.refresh); + $('.purge').on('click', function(e) { + e.preventDefault(); bootbox.confirm('

    Do you really want to purge this category "' + $('form.category').find('input[data-name="name"]').val() + '"?

    Warning! All topics and posts in this category will be purged!

    ', function(confirm) { if (!confirm) { return; } - socket.emit('admin.categories.purge', cid, function(err) { + socket.emit('admin.categories.purge', ajaxify.variables.get('cid'), function(err) { if (err) { return app.alertError(err.message); } app.alertSuccess('Category purged!'); - categoryRow.remove(); + ajaxify.go('admin/manage/categories'); }); }); }); @@ -144,35 +142,6 @@ define('admin/manage/category', [ setupEditTargets(); Category.setupPrivilegeTable(); - - $(function() { - - - // $('.admin-categories').on('click', '.permissions', function() { - // var cid = $(this).parents('li[data-cid]').attr('data-cid'); - // Categories.launchPermissionsModal(cid); - // return false; - // }); - - - // $('.admin-categories').on('click', '.delete-image', function() { - // var parent = $(this).parents('li[data-cid]'), - // inputEl = parent.find('.upload-button'), - // preview = parent.find('.preview-box'), - // bgColor = parent.find('.category_bgColor').val(); - - // inputEl.val(''); - // modified(inputEl[0]); - - // preview.css('background', bgColor); - - // $(this).addClass('hide').hide(); - // }); - - - - - }); }; Category.setupPrivilegeTable = function() { diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index f5cca44ccf..ed5d3e8b69 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -168,7 +168,11 @@ $(document).ready(function() { return url; }; - ajaxify.refresh = function() { + ajaxify.refresh = function(e) { + if (e && e instanceof jQuery.Event) { + e.preventDefault(); + } + ajaxify.go(ajaxify.currentPage); }; From 202789fa8dd661e77e652d3da60f72998e4a3610 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 18:08:11 -0400 Subject: [PATCH 140/172] added back category creation, #2463 --- public/src/admin/manage/categories.js | 35 +++++++----------- src/views/admin/manage/categories.tpl | 15 +++++--- src/views/admin/partials/categories/new.tpl | 41 --------------------- 3 files changed, 24 insertions(+), 67 deletions(-) delete mode 100644 src/views/admin/partials/categories/new.tpl diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index a5f206ec9b..535d902dfe 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -47,23 +47,20 @@ define('admin/manage/categories', function() { }); }); - function showCreateCategoryModal() { - $('#new-category-modal').modal(); - } + $('button[data-action="create"]').on('click', Categories.create); + }; - function createNewCategory() { - var category = { - name: $('#inputName').val(), - description: $('#inputDescription').val(), - icon: $('#new-category-modal i').attr('value'), - order: $('#active-categories').children().length + 1 - }; + Categories.create = function() { + bootbox.prompt('Category Name', function(name) { + if (!name) { + return; + } - saveNew(category); - } - - function saveNew(category) { - socket.emit('admin.categories.create', category, function(err, data) { + socket.emit('admin.categories.create', { + name: name, + description: '', + icon: 'fa-comments' + }, function(err, data) { if(err) { return app.alertError(err.message); } @@ -76,13 +73,9 @@ define('admin/manage/categories', function() { timeout: 2000 }); - $('#new-category-modal').modal('hide'); - ajaxify.refresh(); + ajaxify.go('admin/manage/categories/' + data.cid); }); - } - - $('#addNew').on('click', showCreateCategoryModal); - $('#create-category-btn').on('click', createNewCategory); + }); }; return Categories; diff --git a/src/views/admin/manage/categories.tpl b/src/views/admin/manage/categories.tpl index 3f94ff125e..69526e86b4 100644 --- a/src/views/admin/manage/categories.tpl +++ b/src/views/admin/manage/categories.tpl @@ -1,5 +1,5 @@
    -
    +
    Categories
    @@ -53,9 +53,7 @@
    {privileges.groups.name}
    -
    -
    Categories
    @@ -110,6 +108,13 @@
    - - + +
    +
    +
    Categories Control Panel
    +
    + +
    +
    +
    diff --git a/src/views/admin/partials/categories/new.tpl b/src/views/admin/partials/categories/new.tpl deleted file mode 100644 index e45d87f3bf..0000000000 --- a/src/views/admin/partials/categories/new.tpl +++ /dev/null @@ -1,41 +0,0 @@ - \ No newline at end of file From d95f5a9ae0006f4eb100d464322456f4d37232ed Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 19:29:24 -0400 Subject: [PATCH 141/172] added help block to category purge button, updated iconSelect library to use templates in a better way, hooked up iconSelect for category mgmt, #2463 --- public/less/admin/admin.less | 1 + public/src/admin/manage/category.js | 2 +- public/src/modules/iconSelect.js | 47 +++++++++++++++++------------ src/views/admin/manage/category.tpl | 4 +++ 4 files changed, 34 insertions(+), 20 deletions(-) diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 61462cef49..6d4dce3e43 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -308,6 +308,7 @@ } .category-preview { + .pointer; width: 100%; height: 100px; text-align: center; diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 81db954432..e969b6e6d2 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -3,7 +3,7 @@ define('admin/manage/category', [ 'uploader', - 'admin/modules/iconSelect', + 'iconSelect', 'admin/modules/colorpicker', 'autocomplete' ], function(uploader, iconSelect, colorpicker, autocomplete) { diff --git a/public/src/modules/iconSelect.js b/public/src/modules/iconSelect.js index 6871948a6e..5dea30c189 100644 --- a/public/src/modules/iconSelect.js +++ b/public/src/modules/iconSelect.js @@ -19,29 +19,38 @@ define('iconSelect', function() { $('#icons .fa-icons .fa.' + selected).addClass('selected'); } - bootbox.confirm('

    Select an icon.

    ' + $('#icons').html(), function(confirm) { - if (confirm) { - var iconClass = $('.bootbox .selected').attr('class'); - var categoryIconClass = $('
    ').addClass(iconClass).removeClass('fa').removeClass('selected').attr('class'); - if (categoryIconClass === 'fa-doesnt-exist') { - categoryIconClass = ''; - } + templates.parse('partials/fontawesome', {}, function(html) { + var picker = bootbox.dialog({ + message: html, + title: 'Select an Icon', + buttons: { + success: { + label: 'Save', + callback: function(confirm) { + var iconClass = $('.bootbox .selected').attr('class'); + var categoryIconClass = $('
    ').addClass(iconClass).removeClass('fa').removeClass('selected').attr('class'); + if (categoryIconClass === 'fa-doesnt-exist') { + categoryIconClass = ''; + } - el.attr('class', 'fa ' + (doubleSize ? 'fa-2x ' : '') + categoryIconClass); - el.val(categoryIconClass); - el.attr('value', categoryIconClass); + el.attr('class', 'fa ' + (doubleSize ? 'fa-2x ' : '') + categoryIconClass); + el.val(categoryIconClass); + el.attr('value', categoryIconClass); - console.log(el); - onModified(el); - } - }); + onModified(el); + } + } + } + }); - setTimeout(function() { - $('.bootbox .fa-icons i').on('click', function() { - $('.bootbox .selected').removeClass('selected'); - $(this).addClass('selected'); + picker.on('shown.bs.modal', function() { + var modalEl = $(this); + modalEl.find('.icon-container').on('click', 'i', function() { + modalEl.find('.icon-container i').removeClass('selected'); + $(this).addClass('selected'); + }); }); - }, 500); + }); }; return iconSelect; diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index 4b3b01c66f..3b5cd4df0c 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -133,6 +133,10 @@

    +

    + Purging a category will remove all topics and posts, and delete the category from the database. If you want to + remove a category temporarily, you'll want to "disable" the category instead. +

    From 1a58ea6520ca89932b2b1280396cb99dd4eee94e Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 25 Mar 2015 20:04:45 -0400 Subject: [PATCH 142/172] closed #2695 --- src/privileges/categories.js | 6 +++--- src/user.js | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/privileges/categories.js b/src/privileges/categories.js index d0a78e5438..96404af6f7 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -19,14 +19,14 @@ module.exports = function(privileges) { labels: function(next) { async.parallel({ users: async.apply(plugins.fireHook, 'filter:privileges.list_human', - ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics', 'Moderator'].map(function(name) { + ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics', 'Moderate'].map(function(name) { return { name: name }; }) ), groups: async.apply(plugins.fireHook, 'filter:privileges.groups.list_human', - ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics'].map(function(name) { + ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics', 'Moderate'].map(function(name) { return { name: name }; @@ -73,7 +73,7 @@ module.exports = function(privileges) { var privileges; async.waterfall([ async.apply(plugins.fireHook, 'filter:privileges.groups.list', [ - 'groups:find', 'groups:read', 'groups:topics:create', 'groups:topics:reply' + 'groups:find', 'groups:read', 'groups:topics:create', 'groups:topics:reply', 'groups:moderate' ]), function(privs, next) { privileges = privs; diff --git a/src/user.js b/src/user.js index 2b9c411ab8..86e0d904be 100644 --- a/src/user.js +++ b/src/user.js @@ -415,15 +415,25 @@ var async = require('async'), }); var groupNames = uniqueCids.map(function(cid) { - return 'cid:' + cid + ':privileges:mods'; - }); + return 'cid:' + cid + ':privileges:mods'; // At some point we should *probably* change this to "moderate" as well + }), + groupListNames = uniqueCids.map(function(cid) { + return 'cid:' + cid + ':privileges:groups:moderate'; + }); - groups.isMemberOfGroups(uid, groupNames, function(err, isMembers) { + async.parallel({ + user: async.apply(groups.isMemberOfGroups, uid, groupNames), + group: async.apply(groups.isMemberOfGroupsList, uid, groupListNames) + }, function(err, checks) { if (err) { return callback(err); } - var map = {}; + var isMembers = checks.user.map(function(isMember, idx) { + return isMember || checks.group[idx] + }), + map = {}; + uniqueCids.forEach(function(cid, index) { map[cid] = isMembers[index]; }); @@ -434,9 +444,23 @@ var async = require('async'), }); } else { if (Array.isArray(uid)) { - groups.isMembers(uid, 'cid:' + cid + ':privileges:mods', filterIsModerator); + async.parallel([ + async.apply(groups.isMembers, uid, 'cid:' + cid + ':privileges:mods'), + async.apply(groups.isMembers, uid, 'cid:' + cid + ':privileges:groups:moderate') + ], function(err, checks) { + var isModerator = checks[0].map(function(isMember, idx) { + return isMember || checks[1][idx] + }); + filterIsModerator(null, isModerator); + }); } else { - groups.isMember(uid, 'cid:' + cid + ':privileges:mods', filterIsModerator); + async.parallel([ + async.apply(groups.isMember, uid, 'cid:' + cid + ':privileges:mods'), + async.apply(groups.isMember, uid, 'cid:' + cid + ':privileges:groups:moderate') + ], function(err, checks) { + var isModerator = checks[0] || checks[1]; + filterIsModerator(null, isModerator); + }); } } }; From 77e956861ae9f1650defdce2d88228f4cf8a1a9f Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 25 Mar 2015 22:33:14 -0400 Subject: [PATCH 143/172] #2486 various fixes for socket.io cluster display user presence correctly --- public/less/admin/general/dashboard.less | 4 +- public/src/admin/general/dashboard.js | 13 ++- public/src/app.js | 4 +- src/socket.io/index.js | 55 +++++------ src/socket.io/meta.js | 114 +++++++++++------------ src/socket.io/rooms.js | 95 +++++++++++++++++++ src/views/admin/general/dashboard.tpl | 9 +- 7 files changed, 194 insertions(+), 100 deletions(-) create mode 100644 src/socket.io/rooms.js diff --git a/public/less/admin/general/dashboard.less b/public/less/admin/general/dashboard.less index 1001893ed7..ebf65e9fd0 100644 --- a/public/less/admin/general/dashboard.less +++ b/public/less/admin/general/dashboard.less @@ -38,7 +38,7 @@ li { float: left; - width: 48%; + width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -90,7 +90,7 @@ border-color: #46BFBD; background-color: #5AD3D1; } - &.on-homepage { + &.on-categories { border-color: #F7464A; background-color: #FF5A5E; } diff --git a/public/src/admin/general/dashboard.js b/public/src/admin/general/dashboard.js index 7a2243465d..40ace1ecc1 100644 --- a/public/src/admin/general/dashboard.js +++ b/public/src/admin/general/dashboard.js @@ -141,10 +141,10 @@ define('admin/general/dashboard', ['semver'], function(semver) { '
    Connections
    ' + ''; - var idle = data.socketCount - (data.users.home + data.users.topics + data.users.category); + var idle = data.socketCount - (data.users.categories + data.users.topics + data.users.category); updateRegisteredGraph(data.onlineRegisteredCount, data.onlineGuestCount); - updatePresenceGraph(data.users.home, data.users.topics, data.users.category, idle); + updatePresenceGraph(data.users.categories, data.users.topics, data.users.category, idle); updateTopicsGraph(data.topics); $('#active-users').html(html); @@ -266,7 +266,7 @@ define('admin/general/dashboard', ['semver'], function(semver) { value: 1, color:"#F7464A", highlight: "#FF5A5E", - label: "On homepage" + label: "On categories list" }, { value: 1, @@ -345,8 +345,8 @@ define('admin/general/dashboard', ['semver'], function(semver) { graphs.registered.update(); } - function updatePresenceGraph(homepage, posts, topics, idle) { - graphs.presence.segments[0].value = homepage; + function updatePresenceGraph(categories, posts, topics, idle) { + graphs.presence.segments[0].value = categories; graphs.presence.segments[1].value = posts; graphs.presence.segments[2].value = topics; graphs.presence.segments[3].value = idle; @@ -424,6 +424,9 @@ define('admin/general/dashboard', ['semver'], function(semver) { function buildTopicsLegend() { var legend = $('#topics-legend').html(''); + segments.sort(function(a, b) { + return b.value - a.value; + }); for (var i = 0, ii = segments.length; i < ii; i++) { var topic = segments[i], label = topic.tid === '0' ? topic.label : ' ' + topic.label + ''; diff --git a/public/src/app.js b/public/src/app.js index 8974d2316a..dadf141702 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -105,8 +105,8 @@ app.cacheBuster = null; case 'admin': room = 'admin'; break; - case 'home': - room = 'home'; + case 'categories': + room = 'categories'; break; } app.currentRoom = ''; diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 337320e226..e0fd83f7b7 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -12,6 +12,7 @@ var SocketIO = require('socket.io'), user = require('../user'), logger = require('../logger'), ratelimit = require('../middleware/ratelimit'), + rooms = require('./rooms'), Sockets = {}, Namespaces = {}; @@ -63,8 +64,8 @@ function onConnection(socket) { function onConnect(socket) { if (socket.uid) { - socket.join('uid_' + socket.uid); - socket.join('online_users'); + rooms.enter(socket, 'uid_' + socket.uid); + rooms.enter(socket, 'online_users'); user.getUserFields(socket.uid, ['status'], function(err, userData) { if (err || !userData) { @@ -77,7 +78,7 @@ function onConnect(socket) { } }); } else { - socket.join('online_guests'); + rooms.enter(socket, 'online_guests'); socket.emit('event:connect'); } } @@ -85,7 +86,7 @@ function onConnect(socket) { function onDisconnect(socket, data) { if (socket.uid) { var socketCount = Sockets.getUserSocketCount(socket.uid); - if (socketCount <= 0) { + if (socketCount <= 1) { socket.broadcast.emit('event:user_status_change', {uid: socket.uid, status: 'offline'}); } @@ -96,6 +97,7 @@ function onDisconnect(socket, data) { } }); } + rooms.leaveAll(socket, data.rooms); } function onMessage(socket, payload) { @@ -183,7 +185,7 @@ function authorize(socket, callback) { socket.uid = parseInt(sessionData.passport.user, 10); } else { socket.uid = 0; - } + } next(); }); } @@ -218,27 +220,25 @@ Sockets.in = function(room) { }; Sockets.getSocketCount = function() { - // TODO: io.sockets.adapter.sids is local to this worker - // use redis-adapter - - var clients = Object.keys(io.sockets.adapter.sids || {}); - return Array.isArray(clients) ? clients.length : 0; + return rooms.socketCount(); }; Sockets.getUserSocketCount = function(uid) { - // TODO: io.sockets.adapter.rooms is local to this worker - // use .clients('uid_' + uid, fn) + return rooms.clients('uid_' + uid).length; +}; - var roomClients = Object.keys(io.sockets.adapter.rooms['uid_' + uid] || {}); - return Array.isArray(roomClients) ? roomClients.length : 0; +Sockets.getOnlineUserCount = function() { + var count = 0; + Object.keys(rooms.roomClients()).forEach(function(roomName) { + if (roomName.startsWith('uid_')) { + ++ count; + } + }); + return count; }; Sockets.getOnlineAnonCount = function () { - // TODO: io.sockets.adapter.rooms is local to this worker - // use .clients() - - var guestSocketIds = Object.keys(io.sockets.adapter.rooms.online_guests || {}); - return Array.isArray(guestSocketIds) ? guestSocketIds.length : 0; + return rooms.clients('online_guests').length; }; Sockets.reqFromSocket = function(socket) { @@ -258,9 +258,7 @@ Sockets.reqFromSocket = function(socket) { }; Sockets.isUserOnline = function(uid) { - // TODO: io.sockets.adapter.rooms is local to this worker - // use .clients('uid_' + uid, fn) - return io ? !!io.sockets.adapter.rooms['uid_' + uid] : false; + return !!rooms.clients('uid_' + uid).length; }; Sockets.isUsersOnline = function(uids, callback) { @@ -301,26 +299,29 @@ Sockets.getUsersInRoom = function (uid, roomName, callback) { Sockets.getUidsInRoom = function(roomName, callback) { callback = callback || function() {}; - // TODO : doesnt work in cluster var uids = []; - var socketids = Object.keys(io.sockets.adapter.rooms[roomName] || {}); + var socketids = rooms.clients(roomName); if (!Array.isArray(socketids) || !socketids.length) { callback(null, []); return []; } for(var i=0; i 0) { + topTenTopics = topTenTopics.concat(scores[mostActive.pop()]); + } + + topTenTopics = topTenTopics.slice(0, 10); + + topics.getTopicsFields(topTenTopics, ['title'], function(err, titles) { if (err) { return callback(err); } - - var rooms = {}; // TODO: websockets.server.sockets.manager.rooms; doesnt work in socket.io 1.x - var socketData = { - onlineGuestCount: websockets.getOnlineAnonCount(), - onlineRegisteredCount: onlineRegisteredCount, - socketCount: websockets.getSocketCount(), - users: { - home: rooms['/home'] ? rooms['/home'].length : 0, - topics: 0, - category: 0 - }, - topics: {} + topTenTopics.forEach(function(tid, id) { + socketData.topics[tid] = { + value: Array.isArray(roomClients['topic_' + tid]) ? roomClients['topic_' + tid].length : 0, + title: validator.escape(titles[id].title) }; - - var scores = {}, - topTenTopics = [], - tid; - - for (var room in rooms) { - if (rooms.hasOwnProperty(room)) { - if (tid = room.match(/^\/topic_(\d+)/)) { - var length = rooms[room].length; - socketData.users.topics += length; - - if (scores[length]) { - scores[length].push(tid[1]); - } else { - scores[length] = [tid[1]]; - } - } else if (room.match(/^\/category/)) { - socketData.users.category += rooms[room].length; - } - } - } - - var scoreKeys = Object.keys(scores), - mostActive = scoreKeys.sort(); - - while(topTenTopics.length < 10 && mostActive.length > 0) { - topTenTopics = topTenTopics.concat(scores[mostActive.pop()]); - } - - topTenTopics = topTenTopics.slice(0, 10); - - topics.getTopicsFields(topTenTopics, ['title'], function(err, titles) { - if (err) { - return callback(err); - } - topTenTopics.forEach(function(tid, id) { - socketData.topics[tid] = { - value: rooms['/topic_' + tid].length, - title: validator.escape(titles[id].title) - }; - }); - - callback(null, socketData); }); + + callback(null, socketData); }); + }; /* Exports */ diff --git a/src/socket.io/rooms.js b/src/socket.io/rooms.js new file mode 100644 index 0000000000..e392abf3f9 --- /dev/null +++ b/src/socket.io/rooms.js @@ -0,0 +1,95 @@ +'use strict'; + + +// Temp solution until +// https://github.com/NodeBB/NodeBB/issues/2486 +// and +// https://github.com/Automattic/socket.io/issues/1945 +// are closed. +// Once they are closed switch to .clients() and async calls + + +var pubsub = require('../pubsub'); + +var rooms = {}; + +var clientRooms = {}; +var roomClients = {}; + +rooms.enter = function(socket, room) { + socket.join(room); + pubsub.publish('socket:join', {id: socket.id, room: room}); +}; + +rooms.leave = function(socket, room) { + socket.leave(room); + pubsub.publish('socket:leave', {id: socket.id, room: room}); +}; + +rooms.leaveAll = function(socket, roomsToLeave) { + roomsToLeave.forEach(function(room) { + rooms.leave(socket, room); + }); +}; + +pubsub.on('socket:join', onSocketJoin); +pubsub.on('socket:leave', onSocketLeave); + +function onSocketJoin(data) { + clientRooms[data.id] = clientRooms[data.id] || []; + if (clientRooms[data.id].indexOf(data.room) === -1) { + clientRooms[data.id].push(data.room); + } + + roomClients[data.room] = roomClients[data.room] || []; + if (roomClients[data.room].indexOf(data.id) === -1) { + roomClients[data.room].push(data.id); + } +} + + +function onSocketLeave(data) { + var index; + if (Array.isArray(clientRooms[data.id])) { + index = clientRooms[data.id].indexOf(data.room); + if (index !== -1) { + clientRooms[data.id].splice(index, 1); + if (!clientRooms[data.id].length) { + delete clientRooms[data.id]; + } + } + } + + if (Array.isArray(roomClients[data.room])) { + index = roomClients[data.room].indexOf(data.id); + if (index !== -1) { + roomClients[data.room].splice(index, 1); + if (!roomClients[data.room].length) { + delete roomClients[data.room]; + } + } + } +} + + +rooms.clients = function(room) { + return Array.isArray(roomClients[room]) ? roomClients[room] : []; +}; + +rooms.clientRooms = function(id) { + return Array.isArray(clientRooms[id]) ? clientRooms[id] : []; +}; + +rooms.socketCount = function() { + return Object.keys(clientRooms || {}).length; +}; + +rooms.roomClients = function() { + return roomClients; +}; + + + + +module.exports = rooms; + diff --git a/src/views/admin/general/dashboard.tpl b/src/views/admin/general/dashboard.tpl index 759144152d..94f9125fab 100644 --- a/src/views/admin/general/dashboard.tpl +++ b/src/views/admin/general/dashboard.tpl @@ -1,6 +1,5 @@
    - -
    +
    Forum Traffic
    @@ -88,8 +87,8 @@
    - -
    + +
    Anonymous vs Registered Users
    @@ -108,7 +107,7 @@
      -
    • On Homepage
    • +
    • On categories list
    • Reading posts
    • Browsing topics
    • Idle
    • From e528f52cfbc303732e8f3239ede86f691d59c82e Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 25 Mar 2015 23:06:56 -0400 Subject: [PATCH 144/172] closes #2757 --- src/controllers/search.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/search.js b/src/controllers/search.js index 775d430783..7c1d20262b 100644 --- a/src/controllers/search.js +++ b/src/controllers/search.js @@ -56,7 +56,7 @@ searchController.search = function(req, res, next) { results.showAsTopics = req.query.showAs === 'topics'; results.breadcrumbs = breadcrumbs; results.categories = categories; - results.expandSearch = false; + results.expandSearch = !req.params.term; plugins.fireHook('filter:search.build', {data: data, results: results}, function(err, data) { if (err) { From 30104b898cea7c1772e8f522d73226b1e3b90937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 26 Mar 2015 12:22:27 -0400 Subject: [PATCH 145/172] dont allow vote spam --- src/favourites.js | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/favourites.js b/src/favourites.js index 0c9c81dc46..cbcb080a49 100644 --- a/src/favourites.js +++ b/src/favourites.js @@ -10,6 +10,8 @@ var async = require('async'), (function (Favourites) { + var votesInProgress = {}; + function vote(type, unvote, pid, uid, callback) { uid = parseInt(uid, 10); @@ -127,13 +129,41 @@ var async = require('async'), }); }; + function voteInProgress(pid, uid) { + return Array.isArray(votesInProgress[uid]) && votesInProgress[uid].indexOf(parseInt(pid, 10)) !== -1; + } + + function putVoteInProgress(pid, uid) { + votesInProgress[uid] = votesInProgress[uid] || []; + votesInProgress[uid].push(parseInt(pid, 10)); + } + + function clearVoteProgress(pid, uid) { + if (Array.isArray(votesInProgress[uid])) { + var index = votesInProgress[uid].indexOf(parseInt(pid, 10)); + if (index !== -1) { + votesInProgress[uid].splice(index, 1); + } + } + } + function toggleVote(type, pid, uid, callback) { + function done(err, data) { + clearVoteProgress(pid, uid); + callback(err, data); + } + + if (voteInProgress(pid, uid)) { + return callback(new Error('[[error:already-voting-for-this-post]]')); + } + putVoteInProgress(pid, uid); + unvote(pid, uid, type, function(err) { if (err) { - return callback(err); + return done(err); } - vote(type, false, pid, uid, callback); + vote(type, false, pid, uid, done); }); } From c9b98306e0833d10c9b5e7623a5afb494472dcd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 26 Mar 2015 12:42:25 -0400 Subject: [PATCH 146/172] dont require everything in folder dont want rooms.js to be public --- src/socket.io/index.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/socket.io/index.js b/src/socket.io/index.js index e0fd83f7b7..a2cc3a241e 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -151,17 +151,12 @@ function onMessage(socket, payload) { } function requireModules() { - fs.readdir(__dirname, function(err, files) { - files.splice(files.indexOf('index.js'), 1); + var modules = ['admin', 'categories', 'groups', 'meta', 'modules', + 'notifications', 'plugins', 'posts', 'topics', 'user' + ]; - async.each(files, function(lib, next) { - if (lib.substr(lib.length - 3) === '.js') { - lib = lib.slice(0, -3); - Namespaces[lib] = require('./' + lib); - } - - next(); - }); + modules.forEach(function(module) { + Namespaces[module] = require('./' + module); }); } From e0b4a35a25bdfd9ab652b84fdb1984a0f90f851e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 26 Mar 2015 13:00:26 -0400 Subject: [PATCH 147/172] dont add guests to users:postcount zset --- src/user/posts.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/user/posts.js b/src/user/posts.js index 10b6a581ba..c7d8e230be 100644 --- a/src/user/posts.js +++ b/src/user/posts.js @@ -84,6 +84,9 @@ module.exports = function(User) { if (err) { return callback(err); } + if (!parseInt(uid, 10)) { + return callback(); + } db.sortedSetAdd('users:postcount', newpostcount, uid, callback); }); }; From 5ce72f4920ead9368fcfbbc4e784e6ba1ecca586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 26 Mar 2015 13:03:23 -0400 Subject: [PATCH 148/172] dont add guests to users:repuration zset --- src/favourites.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/favourites.js b/src/favourites.js index cbcb080a49..e38e11298e 100644 --- a/src/favourites.js +++ b/src/favourites.js @@ -43,7 +43,9 @@ var async = require('async'), return callback(err); } - db.sortedSetAdd('users:reputation', newreputation, postData.uid); + if (parseInt(postData.uid, 10)) { + db.sortedSetAdd('users:reputation', newreputation, postData.uid); + } adjustPostVotes(pid, uid, type, unvote, function(err, votes) { postData.votes = votes; From f4803c21ac8b0747ad9d27ead8b1307b829a00fc Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 26 Mar 2015 13:12:16 -0400 Subject: [PATCH 149/172] added missing partial --- src/views/partials/fontawesome.tpl | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/views/partials/fontawesome.tpl diff --git a/src/views/partials/fontawesome.tpl b/src/views/partials/fontawesome.tpl new file mode 100644 index 0000000000..c5c768fc42 --- /dev/null +++ b/src/views/partials/fontawesome.tpl @@ -0,0 +1,6 @@ +
      +
      + + +
      +
      \ No newline at end of file From 0d044c34c13d502355f0bf95185146aca312124a Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 26 Mar 2015 13:14:20 -0400 Subject: [PATCH 150/172] removed old code that was adding unneeded html to the template --- src/views/admin/manage/category.tpl | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index 3b5cd4df0c..358e05609c 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -140,16 +140,6 @@
    - - -
    From 41db2dcd1485134c76e69090ed7afc8f1a4bfabd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 26 Mar 2015 16:32:17 -0400 Subject: [PATCH 151/172] removed idle added recent tags presence info --- public/less/admin/general/dashboard.less | 6 +- public/src/admin/general/dashboard.js | 98 +++++++++++++----------- src/socket.io/meta.js | 2 + src/views/admin/general/dashboard.tpl | 3 +- 4 files changed, 61 insertions(+), 48 deletions(-) diff --git a/public/less/admin/general/dashboard.less b/public/less/admin/general/dashboard.less index ebf65e9fd0..71c2298d31 100644 --- a/public/less/admin/general/dashboard.less +++ b/public/less/admin/general/dashboard.less @@ -98,10 +98,14 @@ border-color: #FDB45C; background-color: #FFC870; } - &.idle { + &.recent { border-color: #949FB1; background-color: #A8B3C5; } + &.tags { + border-color: #FDB45C; + background-color: #8FA633; + } } } } diff --git a/public/src/admin/general/dashboard.js b/public/src/admin/general/dashboard.js index 40ace1ecc1..a842c0d2af 100644 --- a/public/src/admin/general/dashboard.js +++ b/public/src/admin/general/dashboard.js @@ -141,10 +141,8 @@ define('admin/general/dashboard', ['semver'], function(semver) { '
    Connections
    ' + '
    '; - var idle = data.socketCount - (data.users.categories + data.users.topics + data.users.category); - updateRegisteredGraph(data.onlineRegisteredCount, data.onlineGuestCount); - updatePresenceGraph(data.users.categories, data.users.topics, data.users.category, idle); + updatePresenceGraph(data.users); updateTopicsGraph(data.topics); $('#active-users').html(html); @@ -248,46 +246,52 @@ define('admin/general/dashboard', ['semver'], function(semver) { }); graphs.registered = new Chart(registeredCtx).Doughnut([{ - value: 1, - color:"#F7464A", - highlight: "#FF5A5E", - label: "Registered Users" - }, - { - value: 1, - color: "#46BFBD", - highlight: "#5AD3D1", - label: "Anonymous Users" - }], { - responsive: true - }); + value: 1, + color:"#F7464A", + highlight: "#FF5A5E", + label: "Registered Users" + }, + { + value: 1, + color: "#46BFBD", + highlight: "#5AD3D1", + label: "Anonymous Users" + }], { + responsive: true + }); graphs.presence = new Chart(presenceCtx).Doughnut([{ - value: 1, - color:"#F7464A", - highlight: "#FF5A5E", - label: "On categories list" - }, - { - value: 1, - color: "#46BFBD", - highlight: "#5AD3D1", - label: "Reading posts" - }, - { - value: 1, - color: "#FDB45C", - highlight: "#FFC870", - label: "Browsing topics" - }, - { - value: 1, - color: "#949FB1", - highlight: "#A8B3C5", - label: "Idle" - }], { - responsive: true - }); + value: 1, + color:"#F7464A", + highlight: "#FF5A5E", + label: "On categories list" + }, + { + value: 1, + color: "#46BFBD", + highlight: "#5AD3D1", + label: "Reading posts" + }, + { + value: 1, + color: "#FDB45C", + highlight: "#FFC870", + label: "Browsing topics" + }, + { + value: 1, + color: "#949FB1", + highlight: "#A8B3C5", + label: "Recent/Unread" + }, + { + value: 1, + color: "#8FA633", + highlight: "#3FA7B8", + label: "Tags" + }], { + responsive: true + }); graphs.topics = new Chart(topicsCtx).Doughnut([], {responsive: true}); topicsCanvas.onclick = function(evt){ @@ -345,11 +349,13 @@ define('admin/general/dashboard', ['semver'], function(semver) { graphs.registered.update(); } - function updatePresenceGraph(categories, posts, topics, idle) { - graphs.presence.segments[0].value = categories; - graphs.presence.segments[1].value = posts; - graphs.presence.segments[2].value = topics; - graphs.presence.segments[3].value = idle; + function updatePresenceGraph(users) { + graphs.presence.segments[0].value = users.categories; + graphs.presence.segments[1].value = users.topics; + graphs.presence.segments[2].value = users.category; + graphs.presence.segments[3].value = users.recent; + graphs.presence.segments[4].value = users.tags; + graphs.presence.update(); } diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index 669d3533a3..60bb51bd4e 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -88,6 +88,8 @@ SocketMeta.rooms.getAll = function(socket, data, callback) { socketCount: websockets.getSocketCount(), users: { categories: roomClients.categories ? roomClients.categories.length : 0, + recent: roomClients.recent_posts ? roomClients.recent_posts.length : 0, + tags: roomClients.tags ? roomClients.tags.length : 0, topics: 0, category: 0 }, diff --git a/src/views/admin/general/dashboard.tpl b/src/views/admin/general/dashboard.tpl index 94f9125fab..db18b7cf02 100644 --- a/src/views/admin/general/dashboard.tpl +++ b/src/views/admin/general/dashboard.tpl @@ -110,7 +110,8 @@
  • On categories list
  • Reading posts
  • Browsing topics
  • -
  • Idle
  • +
  • Recent / Unread
  • +
  • Tags
  • From 789418f987cd3d98e35bc2c08da178443c0e8b43 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 26 Mar 2015 17:27:50 -0400 Subject: [PATCH 152/172] stripTags and escape template helpers use it like so {function.stripTags, title} see vanilla or persona topics_list.tpl for more info --- public/src/modules/helpers.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index dfecb7e78b..4aaef00a61 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -1,6 +1,6 @@ ;(function(exports) { "use strict"; - /* globals define */ + /* globals define, utils */ // export the class if we are in a Node-like system. if (typeof module === 'object' && module.exports === exports) { @@ -9,6 +9,9 @@ var helpers = {}; + var utils = utils || require('../utils'), + S = S || require('string'); + helpers.displayMenuItem = function(data, index) { var item = data.navigation[index], properties = item.properties; @@ -43,6 +46,14 @@ return JSON.stringify(obj).replace(/&/gm,"&").replace(//gm,">").replace(/"/g, '"'); }; + helpers.escape = function(str) { + return utils.escapeHTML(str); + }; + + helpers.stripTags = function(str) { + return S(str).stripTags().s; + } + helpers.generateCategoryBackground = function(category) { var style = []; From 7c7b43d295a61d81249f840e2d69d3de9ad004bb Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 26 Mar 2015 17:36:15 -0400 Subject: [PATCH 153/172] semicolon --- public/src/modules/helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index 4aaef00a61..a0201ed6cc 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -52,7 +52,7 @@ helpers.stripTags = function(str) { return S(str).stripTags().s; - } + }; helpers.generateCategoryBackground = function(category) { var style = []; From ed8d60b76bf77b2bc6508a6ecb1f9547557db4ce Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 26 Mar 2015 18:33:01 -0400 Subject: [PATCH 154/172] move registered-users/guests to top remove admins from priv settings --- src/groups.js | 4 ++++ src/privileges/categories.js | 29 ++++++++++++++++------------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/groups.js b/src/groups.js index 89c3eba9b8..809ce68089 100644 --- a/src/groups.js +++ b/src/groups.js @@ -67,6 +67,10 @@ var async = require('async'), isPrivilegeGroup: /^cid:\d+:privileges:[\w:]+$/ }; + Groups.getEphemeralGroups = function() { + return ephemeralGroups; + }; + Groups.list = function(options, callback) { db.getSortedSetRevRange('groups:createtime', 0, -1, function (err, groupNames) { if (err) { diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 96404af6f7..ff92f2b4d1 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -58,7 +58,7 @@ module.exports = function(privileges) { memberData = memberData.map(function(member) { member.privileges = {}; for(var x=0,numPrivs=privileges.length;x Date: Fri, 27 Mar 2015 15:43:37 +0300 Subject: [PATCH 155/172] fix:removing category images via ACP --- public/src/admin/manage/category.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index e969b6e6d2..6e7cdb8b16 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -119,6 +119,18 @@ define('admin/manage/category', [ }); }); + // Image Remover + $('.delete-image').on('click', function(e) { + e.preventDefault(); + + var inputEl = $('.upload-button'), + previewBox = inputEl.parent().parent().siblings('.category-preview'); + + inputEl.val(''); + previewBox.css('background-image', ''); + modified(inputEl[0]); + }); + // Icon selection $('.category-preview').on('click', function(ev) { iconSelect.init($(this).find('i'), modified); From 30ad24caa61058d7a889023c0e9aa2bbfe8b8061 Mon Sep 17 00:00:00 2001 From: Mega Date: Fri, 27 Mar 2015 15:58:13 +0300 Subject: [PATCH 156/172] Hide "Remove" buttun as well --- public/src/admin/manage/category.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 6e7cdb8b16..743fc2e1a4 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -129,6 +129,7 @@ define('admin/manage/category', [ inputEl.val(''); previewBox.css('background-image', ''); modified(inputEl[0]); + $(this).parent().addClass('hide').hide(); }); // Icon selection From 2d5f6873738355fbecfe91e2dfabf8a5c195c290 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 27 Mar 2015 08:58:55 -0400 Subject: [PATCH 157/172] latest translations --- public/language/de/email.json | 6 +- public/language/hu/category.json | 4 +- public/language/hu/email.json | 16 ++--- public/language/hu/error.json | 72 +++++++++++------------ public/language/hu/global.json | 50 ++++++++-------- public/language/hu/tags.json | 2 +- public/language/hu/user.json | 34 +++++------ public/language/pt_BR/category.json | 2 +- public/language/pt_BR/error.json | 16 ++--- public/language/pt_BR/groups.json | 26 ++++----- public/language/pt_BR/login.json | 4 +- public/language/pt_BR/notifications.json | 2 +- public/language/pt_BR/recent.json | 2 +- public/language/pt_BR/search.json | 10 ++-- public/language/pt_BR/tags.json | 2 +- public/language/pt_BR/topic.json | 2 +- public/language/ru/groups.json | 6 +- public/language/ru/search.json | 4 +- public/language/zh_CN/email.json | 12 ++-- public/language/zh_CN/groups.json | 16 ++--- public/language/zh_CN/login.json | 2 +- public/language/zh_CN/recent.json | 18 +++--- public/language/zh_CN/search.json | 12 ++-- public/language/zh_CN/tags.json | 2 +- public/language/zh_CN/topic.json | 2 +- public/language/zh_TW/email.json | 10 ++-- public/language/zh_TW/global.json | 12 ++-- public/language/zh_TW/notifications.json | 14 ++--- public/language/zh_TW/pages.json | 2 +- public/language/zh_TW/search.json | 74 ++++++++++++------------ public/language/zh_TW/topic.json | 6 +- public/language/zh_TW/user.json | 6 +- 32 files changed, 224 insertions(+), 224 deletions(-) diff --git a/public/language/de/email.json b/public/language/de/email.json index b60e620dd8..62c835cefd 100644 --- a/public/language/de/email.json +++ b/public/language/de/email.json @@ -1,9 +1,9 @@ { "password-reset-requested": "Zurücksetzung des Passworts beantragt - %1!", - "welcome-to": "Willkommen zu %1", + "welcome-to": "Willkommen bei %1", "greeting_no_name": "Hallo", "greeting_with_name": "Hallo %1", - "welcome.text1": "Vielen Dank für die Registrierung mit %1!", + "welcome.text1": "Vielen Dank für die Registrierung bei %1!", "welcome.text2": "Um dein Konto vollständig zu aktivieren, müssen wir überprüfen, ob du Besitzer der E-Mail-Adresse bist, mit der du dich registriert hast.", "welcome.cta": "Klicke hier, um deine E-Mail-Adresse zu bestätigen.", "reset.text1": "Wir haben eine Anfrage auf Zurücksetzung deines Passworts erhalten, wahrscheinlich, weil du es vergessen hast. Falls dies nicht der Fall ist, ignoriere bitte diese E-Mail.", @@ -13,7 +13,7 @@ "reset.notify.text1": "Wir benachrichtigen dich das am %1, dein Passwort erfolgreich geändert wurde.", "reset.notify.text2": "Wenn du das nicht autorisiert hast, bitte benachrichtige umgehend einen Administrator.", "digest.notifications": "Du hast ungelesene Benachrichtigungen von %1:", - "digest.latest_topics": "Aktuellste Themen vom %1", + "digest.latest_topics": "Neueste Themen vom %1", "digest.cta": "Klicke hier, um %1 zu besuchen", "digest.unsub.info": "Diese Zusammenfassung wurde dir aufgrund deiner Abonnement-Einstellungen gesendet.", "digest.no_topics": "Es gab keine aktiven Themen in den letzten %1", diff --git a/public/language/hu/category.json b/public/language/hu/category.json index b36e9fc37a..2815eaab43 100644 --- a/public/language/hu/category.json +++ b/public/language/hu/category.json @@ -1,9 +1,9 @@ { "new_topic_button": "Új témakör", - "guest-login-post": "Log in to post", + "guest-login-post": "A hozzászóláshoz be kell lépni", "no_topics": "Nincs nyitva egy téma sem ebben a kategóriában.Hozzunk létre egyet.", "browsing": "böngészés", "no_replies": "Nem érkezett válasz", "share_this_category": "Kategória megosztása", - "ignore": "Figyelmen kívül hagyás" + "ignore": "Ignorálás" } \ No newline at end of file diff --git a/public/language/hu/email.json b/public/language/hu/email.json index 8430b8ff27..45c6be2630 100644 --- a/public/language/hu/email.json +++ b/public/language/hu/email.json @@ -9,20 +9,20 @@ "reset.text1": "Kaptunk egy kérést jelszava visszaállításához, valószínűleg azért, mert elfelejtette azt. Ha ez nem így van, hagyja figyelmen kívül ezt a levelet.", "reset.text2": "Ha szeretné, hogy továbbra alaphelyzetbe a jelszavát, kérjük kattintson az alábbi linkre:", "reset.cta": "Kattints ide a jelszavad visszaállításához", - "reset.notify.subject": "Password successfully changed", - "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", - "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "reset.notify.subject": "Jelszó sikeresen megváltoztatva", + "reset.notify.text1": "Értesítünk, hogy %1 névhez tartozó jelszavad sikeresen megváltozott.", + "reset.notify.text2": "Ha nem te voltál az, kérlek értesíts egy adminisztrátort azonnal.", "digest.notifications": "Olvasatlan értesítéseid vannak a következőtől: %1", "digest.latest_topics": "Legutóbbi témák a következőből: %1", "digest.cta": "Kattints ide, hogy meglátogasd a következőt: %1", - "digest.unsub.info": "This digest was sent to you due to your subscription settings.", + "digest.unsub.info": "Ez a hírlevél a feliratkozási beállításaid miatt lett kiküldve.", "digest.no_topics": "Nem volt aktív témakör az elmúlt %1", "notif.chat.subject": "Új chat üzenet érkezett a következőtől: %1", "notif.chat.cta": "Kattints ide a beszélgetés folytatásához", - "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", - "notif.post.cta": "Click here to read the full topic", - "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", - "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", + "notif.chat.unsub.info": "Ez a chat-értesítés a feliratkozási beállításaid miatt lett kiküldve.", + "notif.post.cta": "Kattints ide a teljes téma olvasásához", + "notif.post.unsub.info": "Ez a hozzászólás-értesítés a feliratkozási beállításaid miatt lett kiküldve.", + "test.text1": "Ez egy teszt levél, ami által ellenőrizzük, hogy a levelező helyesen lett beállítva a fórumodon.", "unsub.cta": "Kattintson ide megváltoztatni ezeket a beállításokat", "closing": "Köszönjük!" } \ No newline at end of file diff --git a/public/language/hu/error.json b/public/language/hu/error.json index e03041b557..289ad3a918 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -1,7 +1,7 @@ { "invalid-data": "Érvénytelen adat", "not-logged-in": "Úgy tűnik, nem vagy bejelentkezve.", - "account-locked": "A fiókod ideiglenesen le lett zárva.", + "account-locked": "A fiókod ideiglenesen zárolva lett.", "search-requires-login": "A kereső használatához szükséges egy fiók! Kérlek jelenltkezz be vagy regisztrálj!", "invalid-cid": "Érvénytelen kategória azonosító", "invalid-tid": "Érvénytelen téma azonosító", @@ -18,9 +18,9 @@ "username-taken": "Foglalt felhasználónév", "email-taken": "Foglalt e-mail", "email-not-confirmed": "Az e-mail címed még nem lett ellenőrizve, kérlek kattints ide az e-mail címed ellenőrzéséhez!", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", - "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", - "email-confirm-failed": "We could not confirm your email, please try again later.", + "email-not-confirmed-chat": "Addig nem cseveghetsz, amíg az e-mail címed nincs megerősítve.", + "no-email-to-confirm": "Ez a fórum e-mail megerősítést kíván, kérlek kattints ide egy cím beírásához", + "email-confirm-failed": "Nem tudtuk ellenőrizni az e-mail címedet, kérlek próbálkozz később.", "username-too-short": "Túl rövid felhasználónév", "username-too-long": "Túl hosszú felhasználónév", "user-banned": "Kitiltott felhasználó", @@ -32,32 +32,32 @@ "no-user": "Nem létező felhasználó", "no-teaser": "Teaser does not exist", "no-privileges": "Nincs elég jogod ehhez a művelethez.", - "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", + "no-emailers-configured": "Nincs levelező beállítva, ezért a teszt e-mail nem került kiküldésre.", "category-disabled": "Kategória kikapcsolva", "topic-locked": "Téma lezárva", - "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", - "still-uploading": "Please wait for uploads to complete.", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", - "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 characters.", - "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", - "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", - "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", - "cant-vote-self-post": "You cannot vote for your own post", - "already-favourited": "You have already favourited this post", - "already-unfavourited": "You have already unfavourited this post", - "cant-ban-other-admins": "You can't ban other admins!", - "invalid-image-type": "Invalid image type. Allowed types are: %1", - "invalid-image-extension": "Invalid image extension", - "invalid-file-type": "Invalid file type. Allowed types are: %1", + "post-edit-duration-expired": "A hozzászólásaidat %1 másodpercig szerkesztheted, miután beküldted azt", + "still-uploading": "Kérlek várj, amíg a feltöltés befejeződik.", + "content-too-short": "Kérlek hosszabb hozzászólást írj be. Legalább %1 karakternek kell lennie.", + "content-too-long": "Kérlek rövidebb hozzászólást írj be. Legfeljebb %1 karakter lehet.", + "title-too-short": "Kérlek hosszabb címet válassz. Legalább %1 karakternek kell lennie.", + "title-too-long": "Kérlek rövidebb címet válassz. Legfeljebb %1 karakter lehet.", + "too-many-posts": "%1 másodpercenként csak egy hozzászólást írhatsz - kérlek várj mielőtt újból hozzászólnál", + "too-many-posts-newbie": "Mint friss tag, csak egy hozzászólást küldhetsz be %1 másodpercenként, míg nem kapsz %2 jó hírnevet - kérlek várj mielőtt újból hozzászólnál", + "tag-too-short": "Kérlek hosszabb címkét válassz. Legalább %1 karakter hosszúnak kell lennie", + "tag-too-long": "Kérlek rövidebb címkét válassz. Legfeljebb %1 karakter lehet", + "file-too-big": "Maximális engedélyezett fájlméret %1 kbs - kérlek kisebb fájlt tölts fel", + "cant-vote-self-post": "Nem szavazhatsz a saját hozzászólásodra", + "already-favourited": "Már bejelölted Kedvencnek ezt a hozzászólást", + "already-unfavourited": "Már kivetted a Kedvenceid közül ezt a hozzászólást", + "cant-ban-other-admins": "Nem tilthatsz ki másik adminisztrátort!", + "invalid-image-type": "Érvénytelen a kép típusa. Engedett kiterjesztések: %1", + "invalid-image-extension": "Érvénytelen a kép kiterjesztése", + "invalid-file-type": "Érvénytelen a fájl típusa. Engedélyezett kiterjesztések: %1", "group-name-too-short": "A csoport név túl rövid", "group-already-exists": "A csoport nem létezik", "group-name-change-not-allowed": "A csoport névváltoztatás nem engedélyezett", - "group-already-member": "You are already part of this group", - "group-needs-owner": "This group requires at least one owner", + "group-already-member": "Már a tagja vagy ennek a csoportnak", + "group-needs-owner": "Ennek a csoportnak lennie kell legalább egy tulajdonosnak.", "post-already-deleted": "Ez a bejegyzés mát törlésre került", "post-already-restored": "Ez a bejegyzés már visszaállításra került", "topic-already-deleted": "Ezt a témakör már törlésre került", @@ -66,16 +66,16 @@ "invalid-file": "Érvénytelen fájl", "uploads-are-disabled": "A feltöltés nem engedélyezett", "signature-too-long": "Sajnáljuk, az aláírás nem lehet hosszabb %1 karakternél.", - "cant-chat-with-yourself": "You can't chat with yourself!", - "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", - "too-many-messages": "You have sent too many messages, please wait awhile.", - "reputation-system-disabled": "Reputation system is disabled.", - "downvoting-disabled": "Downvoting is disabled", - "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", - "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", - "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", + "cant-chat-with-yourself": "Nem cseveghetsz magaddal!", + "chat-restricted": "Ez a felhasználó korlátozta a chat beállításait. Csak akkor cseveghetsz vele, miután felvett a követettek közé téged", + "too-many-messages": "Túl sok üzenetet küldtél, kérlek várj egy picit.", + "reputation-system-disabled": "Hírnév funkció kikapcsolva.", + "downvoting-disabled": "Leszavazás funkció kikapcsolva", + "not-enough-reputation-to-downvote": "Nem rendelkezel elég Hírnév ponttal, hogy leszavazhasd ezt a hozzászólást", + "not-enough-reputation-to-flag": "Nem rendelkezel elég Hírnév ponttal, hogy jelentsd ezt a hozzászólást", + "reload-failed": "NodeBB egy hibát észlelt újratöltés közben: \"% 1\". A fórum továbbra is kiszolgálja a kliens-oldali eszközöket, bár vissza kellene csinálnod amit az újratöltés előtt elállítottál.", "registration-error": "Regisztrációs hiba", - "parse-error": "Something went wrong while parsing server response", - "wrong-login-type-email": "Please use your email to login", - "wrong-login-type-username": "Please use your username to login" + "parse-error": "Hiba történt a szerver válaszának feldolgozása közben", + "wrong-login-type-email": "Kérlek az e-mail címedet használd a belépéshez", + "wrong-login-type-username": "Kérlek a felhasználónevedet használd a belépéshez" } \ No newline at end of file diff --git a/public/language/hu/global.json b/public/language/hu/global.json index 6f3926d6a5..ef775f0510 100644 --- a/public/language/hu/global.json +++ b/public/language/hu/global.json @@ -3,53 +3,53 @@ "search": "Keresés", "buttons.close": "Mégsem", "403.title": "Hozzáférés megtagadva", - "403.message": "You seem to have stumbled upon a page that you do not have access to.", - "403.login": "Perhaps you should try logging in?", + "403.message": "Úgy tűnik, hogy rábukkantál egy olyan oldalra, amihez nincs hozzáférésed.", + "403.login": "Talán meg kellene próbálnod belépni?", "404.title": "Nincs találat", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "Úgy tűnik, hogy rábukkantál egy olyan oldalra ami nem létezik. Visszatérés a kezdőlapra", "500.title": "Belső hiba.", "500.message": "Hoppá! Úgy tűnik valami hiba történt!", "register": "Regisztráció", "login": "Belépés", "please_log_in": "Jelentkezzünk be", "logout": "Kijelentkezés", - "posting_restriction_info": "Posting is currently restricted to registered members only, click here to log in.", + "posting_restriction_info": "A hozzászólás regisztrációhoz kötött, kérlek kattints ide a bejelentkezéshez.", "welcome_back": "Üdvözlet", "you_have_successfully_logged_in": "Sikeres bejelentkezés", "save_changes": "Változások mentése", "close": "Bezárás", "pagination": "Lapozás", "pagination.out_of": "%1 - %2", - "pagination.enter_index": "Enter index", + "pagination.enter_index": "Írj be egy számot", "header.admin": "Admin", "header.recent": "Friss", "header.unread": "Olvasatlan", - "header.tags": "Tags", + "header.tags": "Címkék", "header.popular": "Népszerű", "header.users": "Felhasználók", - "header.groups": "Groups", + "header.groups": "Csoportok", "header.chats": "Chat", "header.notifications": "Értesítések", "header.search": "Keresés", "header.profile": "Profil", "notifications.loading": "Értesítések Betöltése", - "chats.loading": "Chat-ek Betöltése", + "chats.loading": "Chat Betöltése", "motd.welcome": "Üdvözlet a NodeBB-n, a jövő fórum platformján.", "previouspage": "Előző Oldal", "nextpage": "Következő Oldal", "alert.success": "Sikeres", "alert.error": "Hiba", "alert.banned": "Tiltva", - "alert.banned.message": "You have just been banned, you will now be logged out.", + "alert.banned.message": "Kitiltottak, ezért most ki leszel léptetve.", "alert.unfollow": "Nem követed tovább: %1!", "alert.follow": "Mostantól követed: %1!", "online": "Online", - "users": "Users", - "topics": "Topics", - "posts": "Hozzászólás", - "views": "Megtekintés", - "reputation": "Reputation", - "read_more": "read more", + "users": "Felhasználók", + "topics": "Témák", + "posts": "Hozzászólások", + "views": "Megtekintések", + "reputation": "Hírnév", + "read_more": "tovább olvas", "posted_ago_by_guest": "posted %1 by Guest", "posted_ago_by": "posted %1 by %2", "posted_ago": "posted %1", @@ -63,19 +63,19 @@ "norecentposts": "Nincs legutóbbi hozzászólás", "norecenttopics": "Nincs friss téma", "recentposts": "Friss hozzászólások", - "recentips": "Utoljára bejelentkezett IP", + "recentips": "Utoljára bejelentkezett IP címek", "away": "Távol van", "dnd": "Elfoglalt", "invisible": "Láthatatlan", "offline": "Offline", "email": "Email", - "language": "Language", - "guest": "Guest", - "guests": "Guests", - "updated.title": "Forum Updated", - "updated.message": "This forum has just been updated to the latest version. Click here to refresh the page.", - "privacy": "Privacy", - "follow": "Follow", - "unfollow": "Unfollow", - "delete_all": "Delete All" + "language": "Nyelv", + "guest": "Vendég", + "guests": "Vendég", + "updated.title": "Fórum frissítve", + "updated.message": "A fórum frissítve lett a legutolsó verzióra. Kattints ide az oldal újratöltéséhez.", + "privacy": "Titoktartás", + "follow": "Követés", + "unfollow": "Nem követem", + "delete_all": "Összes törlése" } \ No newline at end of file diff --git a/public/language/hu/tags.json b/public/language/hu/tags.json index aa7a02a772..020edfe34c 100644 --- a/public/language/hu/tags.json +++ b/public/language/hu/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Nem létezik témakör ezzel a címkével.", "tags": "Címkék", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Írj be címkéket itt. %1-%2 karakterig. Üsd le az enter-t mindegyik után.", "enter_tags_here_short": "Címke megadása...", "no_tags": "Nincs címke." } \ No newline at end of file diff --git a/public/language/hu/user.json b/public/language/hu/user.json index bacce74415..d4ab3ff21f 100644 --- a/public/language/hu/user.json +++ b/public/language/hu/user.json @@ -18,7 +18,7 @@ "profile_views": "Megtekintések", "reputation": "Hírnév", "favourites": "Kedvencek", - "watched": "Megtekintve", + "watched": "Megfigyeli", "followers": "Követők", "following": "Követve", "signature": "Aláírás", @@ -33,17 +33,17 @@ "uploaded_picture": "Feltöltött kép", "upload_new_picture": "Új kép feltöltése", "upload_new_picture_from_url": "Új kép feltöltése adott URL-ről", - "current_password": "Current Password", + "current_password": "Jelenlegi jelszó", "change_password": "Jelszó megváltoztatása", "change_password_error": "Helytelen jelszó!", - "change_password_error_wrong_current": "Your current password is not correct!", + "change_password_error_wrong_current": "A jelenlegi jelszavad nem megfelelő!", "change_password_error_length": "A jelszó túl rövid!", "change_password_error_match": "A jelszavak nem egyeznek!", - "change_password_error_privileges": "You do not have the rights to change this password.", + "change_password_error_privileges": "Nincs jogod megváltoztatni ezt a jelszót.", "change_password_success": "A jelszavad frissítve!", "confirm_password": "Jelszó megerősítése", "password": "Jelszó", - "username_taken_workaround": "The username you requested was already taken, so we have altered it slightly. You are now known as %1", + "username_taken_workaround": "A kívánt felhasználónév már foglalt, így változtatnunk kellett rajta egy kicsit. Mostantól %1 nicknév alatt vagy ismert.", "upload_picture": "Kép feltöltése", "upload_a_picture": "Egy kép feltöltése", "image_spec": "Csak PNG, JPG vagy GIF kiterjesztésű fájlokat tölthetsz fel", @@ -52,19 +52,19 @@ "show_email": "E-mail címem mutatása", "show_fullname": "A teljes nevem mutatása", "restrict_chats": "Csak olyanok tudjanak chat üzeneteket írni nekem, akiket követek", - "digest_label": "Subscribe to Digest", - "digest_description": "Subscribe to email updates for this forum (new notifications and topics) according to a set schedule", - "digest_off": "Off", - "digest_daily": "Daily", - "digest_weekly": "Weekly", - "digest_monthly": "Monthly", + "digest_label": "Feliratkozás a hírlevélre", + "digest_description": "E-mailben kapott frissítésekre (új értesítések, témák esetében) való feliratkozás, a beállított időintervallum szerint", + "digest_off": "Kikapcsolva", + "digest_daily": "Napi", + "digest_weekly": "Heti", + "digest_monthly": "Havi", "send_chat_notifications": "E-mail küldése, amennyiben chat üzenetem érkezett és nem vagyok aktív", - "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "send_post_notifications": "E-mail küldése, amikor válasz érkezik azokhoz a témákhoz, amelyekre feliratkoztam", "has_no_follower": "Ezt a felhasználót nem követi senki :(", "follows_no_one": "Ez a felhasználó nem követ senkit :(", "has_no_posts": "Ennek a felhasználónak még nincsen hozzászólása.", - "has_no_topics": "This user didn't post any topics yet.", - "has_no_watched_topics": "This user didn't watch any topics yet.", + "has_no_topics": "Ez a felhasználó nem nyitott egyetlen témát sem még.", + "has_no_watched_topics": "Ez a felhasználó nem figyel egyetlen témát sem még.", "email_hidden": "E-mail rejtett", "hidden": "rejtett", "paginate_description": "Oldalszámok használata a témáknál és hozzászólásoknál a végtelen görgetés helyett.", @@ -72,9 +72,9 @@ "posts_per_page": "Hozzászólás oldalanként", "notification_sounds": "Hang lejátszása ha értesítés érkezett.", "browsing": "Browsing Settings", - "open_links_in_new_tab": "Open outgoing links in new tab?", + "open_links_in_new_tab": "Kívülre mutató linkek megnyitása új fülön?", "enable_topic_searching": "Témán belüli keresés bekapcsolása", - "topic_search_help": "Amennyiben be van kapcsolva, a témán belüli keresés fellül fogja írni a böngésző alapértelmezett oldalon belüli keresőjét és engedélyezni fogja neked, hogy a teljes témában kereshess, ne csak abban, ami jelenleg is megjelenik a képernyőn.", - "follow_topics_you_reply_to": "Minden olyan téma követése, amire válaszolsz.", + "topic_search_help": "Amennyiben be van kapcsolva, a témán belüli keresés felül fogja írni a böngésző alapértelmezett oldalon belüli keresőjét és engedélyezni fogja neked, hogy a teljes témában kereshess, ne csak abban, ami jelenleg is megjelenik a képernyőn.", + "follow_topics_you_reply_to": "Minden olyan téma követése, amihez hozzászóltál.", "follow_topics_you_create": "Minden általad létrehozott téma követése." } \ No newline at end of file diff --git a/public/language/pt_BR/category.json b/public/language/pt_BR/category.json index a781984e16..7dc608219f 100644 --- a/public/language/pt_BR/category.json +++ b/public/language/pt_BR/category.json @@ -1,6 +1,6 @@ { "new_topic_button": "Novo Tópico", - "guest-login-post": "Log in to post", + "guest-login-post": "Logue-se para postar", "no_topics": "Não tem nenhum tópico nesta categoria.
    Por que você não tenta postar o algum?", "browsing": "navegando", "no_replies": "Ninguém respondeu", diff --git a/public/language/pt_BR/error.json b/public/language/pt_BR/error.json index 359f3c654a..eba774d7af 100644 --- a/public/language/pt_BR/error.json +++ b/public/language/pt_BR/error.json @@ -19,8 +19,8 @@ "email-taken": "Email já cadastrado", "email-not-confirmed": "O seu email ainda não foi confirmado, por favor clique aqui para confirmar seu email.", "email-not-confirmed-chat": "Você não pode usar o chat até que seu email seja confirmado", - "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", - "email-confirm-failed": "We could not confirm your email, please try again later.", + "no-email-to-confirm": "Este fórum exige confirmação de email, por gentileza clique aqui para digitar um email", + "email-confirm-failed": "Nós não pudemos confirmar seu email, por gentileza tente novamente mais tarde.", "username-too-short": "Nome de usuário muito curto", "username-too-long": "Nome de usuário muito longo", "user-banned": "Usuário banido", @@ -35,7 +35,7 @@ "no-emailers-configured": "Nenhum plugin de email foi carregado, por isso um email de teste não pôde ser enviado", "category-disabled": "Categoria desativada", "topic-locked": "Tópico Trancado", - "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", + "post-edit-duration-expired": "Você pode editar posts por %1 segundos após postar", "still-uploading": "Aguarde a conclusão dos uploads.", "content-too-short": "Por favor digite um post mais longo. Posts devem conter no mínimo %1 caracteres.", "content-too-long": "Por favor entre com um post mais curto. Posts não podem ser maiores do que %1 caracteres.", @@ -43,8 +43,8 @@ "title-too-long": "Por favor entre com um título mais curto; Títulos não podem ser maiores que %1 caracteres.", "too-many-posts": "Você pode postar apenas uma vez a cada %1 segundos - por favor aguarde antes de postar novamente", "too-many-posts-newbie": "Como novo usuário, você pode postar apenas uma vez a cada %1 segundos até que você tenha recebido reputação de %2 - por favor aguarde antes de postar novamente", - "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", + "tag-too-short": "Por favor digite uma tag mais longa. Tags devem conter pelo menos %1 caracteres", + "tag-too-long": "Por favor digite uma tag mais curta. Tags não podem ter mais do que %1 caracteres", "file-too-big": "O tamanho máximo permitido de arquivo é %1 kbs - por favor faça upload de um arquivo menor", "cant-vote-self-post": "Você não pode votar no seu próprio post", "already-favourited": "Você já adicionou este post aos favoritos", @@ -52,7 +52,7 @@ "cant-ban-other-admins": "Você não pode banir outros administradores!", "invalid-image-type": "Tipo inválido de imagem. Os tipos permitidos são: %1", "invalid-image-extension": "Extensão de imagem inválida", - "invalid-file-type": "Invalid file type. Allowed types are: %1", + "invalid-file-type": "Tipo de arquivo inválido. Os tipos permitidos são: %1", "group-name-too-short": "Nome do grupo é muito curto", "group-already-exists": "O grupo já existe", "group-name-change-not-allowed": "Sem permissão para alterar nome do grupo", @@ -76,6 +76,6 @@ "reload-failed": "O NodeBB encontrou um problema ao recarregar: \"%1\". O NodeBB continuará a servir os assets existentes no lado do cliente, apesar de que você deve desfazer o que você fez antes de recarregar.", "registration-error": "Erro de Cadastro", "parse-error": "Algo deu errado ao conseguir resposta do servidor", - "wrong-login-type-email": "Please use your email to login", - "wrong-login-type-username": "Please use your username to login" + "wrong-login-type-email": "Por favor use seu email para se logar", + "wrong-login-type-username": "Por favor use o seu nome de usuário para se logar" } \ No newline at end of file diff --git a/public/language/pt_BR/groups.json b/public/language/pt_BR/groups.json index a9e9efa321..2246818345 100644 --- a/public/language/pt_BR/groups.json +++ b/public/language/pt_BR/groups.json @@ -4,8 +4,8 @@ "owner": "Dono do Grupo", "new_group": "Criar Novo Grupo", "no_groups_found": "Não há grupos para ver", - "pending.accept": "Accept", - "pending.reject": "Reject", + "pending.accept": "Aceitar", + "pending.reject": "Rejeitar", "cover-instructions": "Arraste uma foto, arraste para a posição correta e clique em Salvar", "cover-change": "Alterar", "cover-save": "Salvar", @@ -15,20 +15,20 @@ "details.pending": "Membros Pendentes", "details.has_no_posts": "Os membros deste grupo não fizeram quaisquer posts.", "details.latest_posts": "Últimos Posts", - "details.private": "Private", + "details.private": "Particular", "details.grant": "Conceder/Retomar a Posse", "details.kick": "Chutar", "details.owner_options": "Administração do Grupo", - "details.group_name": "Group Name", - "details.description": "Description", - "details.badge_preview": "Badge Preview", - "details.change_icon": "Change Icon", - "details.change_colour": "Change Colour", - "details.badge_text": "Badge Text", - "details.userTitleEnabled": "Show Badge", - "details.private_help": "If enabled, joining of groups requires approval from a group owner", - "details.hidden": "Hidden", - "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "details.group_name": "Nome do Grupo", + "details.description": "Descrição", + "details.badge_preview": "Visualização do Distintivo", + "details.change_icon": "Mudar Ícone", + "details.change_colour": "Mudar Cor", + "details.badge_text": "Texto do Distintivo", + "details.userTitleEnabled": "Mostrar Distintivo", + "details.private_help": "Se habilitado, a entrada nos grupos requer aprovação de um dos donos do grupo", + "details.hidden": "Oculto", + "details.hidden_help": "Se habilitado, este grupo não se encontrará na listagem de grupos e os usuários terão de ser convivados manualmente", "event.updated": "Os detalhes do grupo foram atualizados", "event.deleted": "O grupo \"%1\" foi deletado" } \ No newline at end of file diff --git a/public/language/pt_BR/login.json b/public/language/pt_BR/login.json index 9b267d8d9c..7b8299af75 100644 --- a/public/language/pt_BR/login.json +++ b/public/language/pt_BR/login.json @@ -1,6 +1,6 @@ { - "username-email": "Username / Email", - "username": "Username", + "username-email": "Nome de usuário / Email", + "username": "Nome de usuário", "email": "Email", "remember_me": "Lembrar de Mim?", "forgot_password": "Esqueceu a Senha?", diff --git a/public/language/pt_BR/notifications.json b/public/language/pt_BR/notifications.json index 72b406d47b..cb3f217b47 100644 --- a/public/language/pt_BR/notifications.json +++ b/public/language/pt_BR/notifications.json @@ -2,7 +2,7 @@ "title": "Notificações", "no_notifs": "Você não tem nenhuma notificação nova", "see_all": "Ver todas as Notificações", - "mark_all_read": "Mark all notifications read", + "mark_all_read": "Marcas todas as notificações como lidas", "back_to_home": "Voltar para %1", "outgoing_link": "Link Externo", "outgoing_link_message": "Você deixou de seguir %1.", diff --git a/public/language/pt_BR/recent.json b/public/language/pt_BR/recent.json index 2af16e248a..322ab84c1f 100644 --- a/public/language/pt_BR/recent.json +++ b/public/language/pt_BR/recent.json @@ -6,7 +6,7 @@ "year": "Ano", "alltime": "Todos os Tempos", "no_recent_topics": "Não há tópicos recentes.", - "no_popular_topics": "There are no popular topics.", + "no_popular_topics": "Não há tópicos populares.", "there-is-a-new-topic": "Há um novo tópico.", "there-is-a-new-topic-and-a-new-post": "Há um novo tópico e um novo post.", "there-is-a-new-topic-and-new-posts": "Há um novo tópico e %1 novos posts.", diff --git a/public/language/pt_BR/search.json b/public/language/pt_BR/search.json index 695d7795ce..9c48e1dfc0 100644 --- a/public/language/pt_BR/search.json +++ b/public/language/pt_BR/search.json @@ -32,9 +32,9 @@ "category": "Categoria", "descending": "Em ordem descendente", "ascending": "Em ordem ascendente", - "save-preferences": "Save preferences", - "clear-preferences": "Clear preferences", - "search-preferences-saved": "Search preferences saved", - "search-preferences-cleared": "Search preferences cleared", - "show-results-as": "Show results as" + "save-preferences": "Salvar preferências", + "clear-preferences": "Limpar preferências", + "search-preferences-saved": "Preferências de busca salvas", + "search-preferences-cleared": "Preferências de busca limpas", + "show-results-as": "Mostrar resultados como" } \ No newline at end of file diff --git a/public/language/pt_BR/tags.json b/public/language/pt_BR/tags.json index 267888cbfa..5bba0fcd7a 100644 --- a/public/language/pt_BR/tags.json +++ b/public/language/pt_BR/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Não há tópicos com esta tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Digite as tags aqui. De %1 a %2 caracteres. Aperte enter após cada tag.", "enter_tags_here_short": "Digite tags...", "no_tags": "Ainda não há tags." } \ No newline at end of file diff --git a/public/language/pt_BR/topic.json b/public/language/pt_BR/topic.json index a99468a79f..2c15fac095 100644 --- a/public/language/pt_BR/topic.json +++ b/public/language/pt_BR/topic.json @@ -12,7 +12,7 @@ "notify_me": "Seja notificado de novas respostas nesse tópico", "quote": "Citar", "reply": "Responder", - "guest-login-reply": "Log in to reply", + "guest-login-reply": "Logue-se para responder", "edit": "Editar", "delete": "Deletar", "purge": "Expurgar", diff --git a/public/language/ru/groups.json b/public/language/ru/groups.json index 8ef4e59089..87d1f1c98e 100644 --- a/public/language/ru/groups.json +++ b/public/language/ru/groups.json @@ -21,11 +21,11 @@ "details.owner_options": "Настройки группы", "details.group_name": "Имя группы", "details.description": "Описание", - "details.badge_preview": "Предпросмотр Бейджа", + "details.badge_preview": "Предпросмотр бейджа", "details.change_icon": "Сменить иконку", "details.change_colour": "Изменить цвет", - "details.badge_text": "Текст на Бейдже", - "details.userTitleEnabled": "Показать Бейдж", + "details.badge_text": "Текст на бейдже", + "details.userTitleEnabled": "Показать бейдж", "details.private_help": "Если включено, вступление в группы будет подтверждаться владельцем группы", "details.hidden": "Скрыто", "details.hidden_help": "Если включено, группа не будет показываться в списках, а пользователи должны приглашаться вручную", diff --git a/public/language/ru/search.json b/public/language/ru/search.json index 8fa2f31ebd..54886ccf15 100644 --- a/public/language/ru/search.json +++ b/public/language/ru/search.json @@ -34,7 +34,7 @@ "ascending": "В порядке убывания", "save-preferences": "Сохранить настройки", "clear-preferences": "Очистить настройки", - "search-preferences-saved": "Искать сохраненные настройки", - "search-preferences-cleared": "Search preferences cleared", + "search-preferences-saved": "Настройки поиска сохранены", + "search-preferences-cleared": "Настройки поиска очищены", "show-results-as": "Показать результаты как" } \ No newline at end of file diff --git a/public/language/zh_CN/email.json b/public/language/zh_CN/email.json index 9f0316ce3b..f25a53cd83 100644 --- a/public/language/zh_CN/email.json +++ b/public/language/zh_CN/email.json @@ -1,24 +1,24 @@ { - "password-reset-requested": "密码重置申请 - %1!", + "password-reset-requested": "密码重置申请 - %1!", "welcome-to": "欢迎来到 %1", "greeting_no_name": "您好", "greeting_with_name": "%1,您好", - "welcome.text1": "谢谢您注册 %1 帐户!", + "welcome.text1": "感谢您注册 %1 帐户!", "welcome.text2": "需要在校验您注册时填写的电子邮箱地址后,才能全面激活您的帐户。", "welcome.cta": "点击这里确认您的电子邮箱地址", - "reset.text1": "我们收到了重置您帐户密码的申请,可能是因为您遗忘了密码。如果不是,请忽略这封邮件。", + "reset.text1": "可能由于您忘记了密码,我们收到了重置您帐户密码的申请。 如果您没有提交密码重置的请求,请忽略这封邮件。", "reset.text2": "如需继续重置密码,请点击下面的链接:", "reset.cta": "点击这里重置您的密码", "reset.notify.subject": "更改密码成功", - "reset.notify.text1": "我们注意到你在 %1 上,成功修改了你的密码。", + "reset.notify.text1": "您在 %1 上的密码被成功修改。", "reset.notify.text2": "如果你没有授权此操作,请立即联系管理员。", "digest.notifications": "您有来自 %1 的未读通知:", "digest.latest_topics": "来自 %1 的最新主题", "digest.cta": "点击这里访问 %1", "digest.unsub.info": "根据您的订阅设置,为您发送此摘要。", - "digest.no_topics": "最近 %1,有一些未激活的主题", + "digest.no_topics": "最近 %1 没有活跃的主题", "notif.chat.subject": "收到来自 %1 的新聊天消息", - "notif.chat.cta": "点击这里恢复会话", + "notif.chat.cta": "点击这里继续会话", "notif.chat.unsub.info": "根据您的订阅设置,为您发送此聊天提醒。", "notif.post.cta": "点击这里阅读全主题。", "notif.post.unsub.info": "根据您的订阅设置,为您发送此回帖提醒。", diff --git a/public/language/zh_CN/groups.json b/public/language/zh_CN/groups.json index e2fc6cdf7f..b7a60f7813 100644 --- a/public/language/zh_CN/groups.json +++ b/public/language/zh_CN/groups.json @@ -5,7 +5,7 @@ "new_group": "创建新用户组", "no_groups_found": "还没有用户组", "pending.accept": "接受", - "pending.reject": "取消", + "pending.reject": "拒绝", "cover-instructions": "拖放照片,拖动位置,然后点击 保存", "cover-change": "变更", "cover-save": "保存", @@ -20,15 +20,15 @@ "details.kick": "踢", "details.owner_options": "用户组管理", "details.group_name": "用户组名", - "details.description": "Description", - "details.badge_preview": "Badge Preview", + "details.description": "描述", + "details.badge_preview": "标志预览", "details.change_icon": "更改图标", - "details.change_colour": "Change Colour", - "details.badge_text": "Badge Text", - "details.userTitleEnabled": "Show Badge", - "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.change_colour": "更新颜色", + "details.badge_text": "标志文字", + "details.userTitleEnabled": "显示标志", + "details.private_help": "如果条件允许,必须得到群主批准才能加入该群。", "details.hidden": "隐藏", - "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "details.hidden_help": "如果条件允许,这个群不再出现在此列表,所有用户要人工邀请加入。", "event.updated": "用户组信息已更新", "event.deleted": "用户组 \"%1\" 已被删除" } \ No newline at end of file diff --git a/public/language/zh_CN/login.json b/public/language/zh_CN/login.json index b6d1c9926e..9cf15f0e15 100644 --- a/public/language/zh_CN/login.json +++ b/public/language/zh_CN/login.json @@ -1,5 +1,5 @@ { - "username-email": "Username / Email", + "username-email": "用户名/电子邮箱", "username": "用户名", "email": "邮件", "remember_me": "记住我?", diff --git a/public/language/zh_CN/recent.json b/public/language/zh_CN/recent.json index c37b2c0557..1e76727b6a 100644 --- a/public/language/zh_CN/recent.json +++ b/public/language/zh_CN/recent.json @@ -6,14 +6,14 @@ "year": "年度热帖榜", "alltime": "总热帖榜", "no_recent_topics": "暂无主题。", - "no_popular_topics": "There are no popular topics.", - "there-is-a-new-topic": "这是个新主题。", - "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", - "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", - "there-are-new-topics": "There are %1 new topics.", - "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", - "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", - "there-is-a-new-post": "There is a new post.", - "there-are-new-posts": "There are %1 new posts.", + "no_popular_topics": "没有热门主题", + "there-is-a-new-topic": "有一个新主题", + "there-is-a-new-topic-and-a-new-post": "有一个新主题和一个新发表", + "there-is-a-new-topic-and-new-posts": "有一个新主题和 %1 新发表", + "there-are-new-topics": "有 %1 个新主题", + "there-are-new-topics-and-a-new-post": "有 %1个新主题和一个新发表", + "there-are-new-topics-and-new-posts": "有 %1个新主题和 %2个新发表", + "there-is-a-new-post": "有一个新发表", + "there-are-new-posts": "有 %1个新发表", "click-here-to-reload": "点击这里重新加载" } \ No newline at end of file diff --git a/public/language/zh_CN/search.json b/public/language/zh_CN/search.json index 68799a19f9..9df978a688 100644 --- a/public/language/zh_CN/search.json +++ b/public/language/zh_CN/search.json @@ -30,11 +30,11 @@ "topic-start-date": "主题开始日期", "username": "用户名", "category": "版面", - "descending": "逆序", + "descending": "倒序", "ascending": "顺序", - "save-preferences": "Save preferences", - "clear-preferences": "Clear preferences", - "search-preferences-saved": "Search preferences saved", - "search-preferences-cleared": "Search preferences cleared", - "show-results-as": "Show results as" + "save-preferences": "保存设置", + "clear-preferences": "清除设置", + "search-preferences-saved": "搜索设置已保存", + "search-preferences-cleared": "搜索设置已清除", + "show-results-as": "结果显示为" } \ No newline at end of file diff --git a/public/language/zh_CN/tags.json b/public/language/zh_CN/tags.json index a50705d3d6..0a28387e37 100644 --- a/public/language/zh_CN/tags.json +++ b/public/language/zh_CN/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "此话题还没有主题帖。", "tags": "话题", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "在这里输入标签: %1 - %2 个字符。每个标签输入完后请按Enter。", "enter_tags_here_short": "输入话题...", "no_tags": "尚无话题。" } \ No newline at end of file diff --git a/public/language/zh_CN/topic.json b/public/language/zh_CN/topic.json index bd20fbdabc..9b113c0c90 100644 --- a/public/language/zh_CN/topic.json +++ b/public/language/zh_CN/topic.json @@ -12,7 +12,7 @@ "notify_me": "此主题有新回复时通知我", "quote": "引用", "reply": "回复", - "guest-login-reply": "Log in to reply", + "guest-login-reply": "登录后回复", "edit": "编辑", "delete": "删除", "purge": "清除", diff --git a/public/language/zh_TW/email.json b/public/language/zh_TW/email.json index 1062070b96..13f19de484 100644 --- a/public/language/zh_TW/email.json +++ b/public/language/zh_TW/email.json @@ -9,9 +9,9 @@ "reset.text1": "我們收到一個重設密碼的請求,你忘掉了密碼嗎?如果不是,請忽略這封郵件。", "reset.text2": "要繼續重置密碼,請點擊以下鏈接:", "reset.cta": "點擊這裡重置密碼", - "reset.notify.subject": "Password successfully changed", - "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", - "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "reset.notify.subject": "密碼修改成功", + "reset.notify.text1": "提醒您密碼已於 %1 修改成功", + "reset.notify.text2": "如果您未允許此動作, 請即刻通知系統管理者", "digest.notifications": "你有來自$1的未讀通知:", "digest.latest_topics": "來自%1的最新話題", "digest.cta": "點擊這裡訪問%1", @@ -20,8 +20,8 @@ "notif.chat.subject": "收到來自$1的聊天消息", "notif.chat.cta": "點擊此處繼續對話", "notif.chat.unsub.info": "本聊天通知按您的訂閱設置發送給您。", - "notif.post.cta": "Click here to read the full topic", - "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", + "notif.post.cta": "按此以閱讀完整標題", + "notif.post.unsub.info": "本發文通知按您的訂閱設置發送給您。", "test.text1": "這是一個測試電郵,以確認您的NodeBB郵件器設置正確。", "unsub.cta": "點擊這裡更改這些設置", "closing": "謝謝!" diff --git a/public/language/zh_TW/global.json b/public/language/zh_TW/global.json index 3dc23be905..f0a81aed7a 100644 --- a/public/language/zh_TW/global.json +++ b/public/language/zh_TW/global.json @@ -3,10 +3,10 @@ "search": "搜索", "buttons.close": "關閉", "403.title": "禁止存取", - "403.message": "You seem to have stumbled upon a page that you do not have access to.", - "403.login": "Perhaps you should try logging in?", + "403.message": "你沒有該頁面的存取權限", + "403.login": "可能是因為你尚未登入?", "404.title": "無法找到該頁", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "你所查找的頁面並不存在,返回主頁。", "500.title": "內部錯誤", "500.message": "不好!看來是哪裡出錯了!", "register": "注冊", @@ -27,7 +27,7 @@ "header.tags": "標籤", "header.popular": "熱門", "header.users": "用戶", - "header.groups": "Groups", + "header.groups": "群組", "header.chats": "聊天", "header.notifications": "通知", "header.search": "搜索", @@ -75,7 +75,7 @@ "updated.title": "討論區更新完畢", "updated.message": "這個討論區最近被更新至最新的版本. 按此來重整這個頁面", "privacy": "隱私", - "follow": "Follow", - "unfollow": "Unfollow", + "follow": "追蹤", + "unfollow": "取消追蹤", "delete_all": "全部刪除" } \ No newline at end of file diff --git a/public/language/zh_TW/notifications.json b/public/language/zh_TW/notifications.json index 6736c06584..660e984111 100644 --- a/public/language/zh_TW/notifications.json +++ b/public/language/zh_TW/notifications.json @@ -2,21 +2,21 @@ "title": "通知", "no_notifs": "沒有新消息", "see_all": "顯示全部", - "mark_all_read": "Mark all notifications read", + "mark_all_read": "所有訊息設為已讀", "back_to_home": "返回%1", - "outgoing_link": "站外鏈接", + "outgoing_link": "站外連結", "outgoing_link_message": "你正在離開 %1.", "continue_to": "繼續前往 %1", "return_to": "返回%1", "new_notification": "新訊息通知", "you_have_unread_notifications": "您有未讀的訊息!", "new_message_from": "來自 %1 的新訊息", - "upvoted_your_post_in": "%1 upvote了您在 %2的帖子。", - "moved_your_post": "%1 移動了你的帖子。", + "upvoted_your_post_in": "%1 upvote了您在 %2的post。", + "moved_your_post": "%1 移動了你的post。", "moved_your_topic": "%1 移動了你的主題。", - "favourited_your_post_in": "%1 收藏了你在 %2的帖子。", - "user_flagged_post_in": "%1 舉報了 %2裡的一個帖子。", - "user_posted_to": "%1 has posted a reply to: %2", + "favourited_your_post_in": "%1 收藏了你在 %2的post。", + "user_flagged_post_in": "%1 舉報了 %2裡的一個post。", + "user_posted_to": "%1 發布一個回覆給: %2", "user_posted_topic": "%1 發布了一個新的主題: %2", "user_mentioned_you_in": "%1%2提到你", "user_started_following_you": "%1 開始關注你。", diff --git a/public/language/zh_TW/pages.json b/public/language/zh_TW/pages.json index bcb655c3e2..e6dacb8327 100644 --- a/public/language/zh_TW/pages.json +++ b/public/language/zh_TW/pages.json @@ -11,7 +11,7 @@ "user.followers": "People who Follow %1", "user.posts": "文章由 %1 所張貼", "user.topics": "主題由 %1 所創建", - "user.groups": "%1's Groups", + "user.groups": "%1 的群組", "user.favourites": "%1's 最喜愛的文章", "user.settings": "使用者設定", "maintenance.text": "%1目前正在進行維修。請稍後再來。", diff --git a/public/language/zh_TW/search.json b/public/language/zh_TW/search.json index 66fee75c1a..eef48e983e 100644 --- a/public/language/zh_TW/search.json +++ b/public/language/zh_TW/search.json @@ -1,40 +1,40 @@ { - "results_matching": "有%1個跟\"%2\"匹配的結果(%3秒)", - "no-matches": "沒有找到匹配的主題", - "in": "In", - "by": "By", - "titles": "Titles", - "titles-posts": "Titles and Posts", + "results_matching": "有%1個跟\"%2\"相符的結果(%3秒)", + "no-matches": "沒有找到相符的主題", + "in": "在", + "by": "由", + "titles": "標題", + "titles-posts": "標題與發布", "posted-by": "Posted by", - "in-categories": "In Categories", - "search-child-categories": "Search child categories", - "reply-count": "Reply Count", - "at-least": "At least", - "at-most": "At most", - "post-time": "Post time", - "newer-than": "Newer than", - "older-than": "Older than", - "any-date": "Any date", - "yesterday": "Yesterday", - "one-week": "One week", - "two-weeks": "Two weeks", - "one-month": "One month", - "three-months": "Three months", - "six-months": "Six months", - "one-year": "One year", - "sort-by": "Sort by", - "last-reply-time": "Last reply time", - "topic-title": "Topic title", - "number-of-replies": "Number of replies", - "number-of-views": "Number of views", - "topic-start-date": "Topic start date", - "username": "Username", - "category": "Category", - "descending": "In descending order", - "ascending": "In ascending order", - "save-preferences": "Save preferences", - "clear-preferences": "Clear preferences", - "search-preferences-saved": "Search preferences saved", - "search-preferences-cleared": "Search preferences cleared", - "show-results-as": "Show results as" + "in-categories": "在類別中", + "search-child-categories": "搜尋子類別", + "reply-count": "回覆數量", + "at-least": "最少", + "at-most": "最多", + "post-time": "發布時間", + "newer-than": "較新", + "older-than": "較舊", + "any-date": "任意日期", + "yesterday": "昨天", + "one-week": "一周", + "two-weeks": "兩周", + "one-month": "一個月", + "three-months": "三個月", + "six-months": "六個月", + "one-year": "一年", + "sort-by": "排序依據", + "last-reply-time": "最後回覆時間", + "topic-title": "主題", + "number-of-replies": "回覆數量", + "number-of-views": "閱讀數量", + "topic-start-date": "主題開始時間", + "username": "使用者名稱", + "category": "類別", + "descending": "降冪排序", + "ascending": "升冪排序", + "save-preferences": "存到我的最愛", + "clear-preferences": "清除我的最愛", + "search-preferences-saved": "搜尋我的最愛已儲存", + "search-preferences-cleared": "搜尋我的最愛已清除", + "show-results-as": "結果顯示" } \ No newline at end of file diff --git a/public/language/zh_TW/topic.json b/public/language/zh_TW/topic.json index 41edd8828f..a65ccc6833 100644 --- a/public/language/zh_TW/topic.json +++ b/public/language/zh_TW/topic.json @@ -12,7 +12,7 @@ "notify_me": "該主題有新回覆時通知我", "quote": "引用", "reply": "回覆", - "guest-login-reply": "Log in to reply", + "guest-login-reply": "登入以回覆", "edit": "編輯", "delete": "刪除", "purge": "清除", @@ -75,7 +75,7 @@ "fork_no_pids": "尚未選擇文章!", "fork_success": "成功分叉成新的主題!點擊這裡進入新的主題。", "composer.title_placeholder": "輸入標題...", - "composer.handle_placeholder": "Name", + "composer.handle_placeholder": "名字", "composer.discard": "放棄", "composer.submit": "發表", "composer.replying_to": "回覆給 %1", @@ -95,5 +95,5 @@ "oldest_to_newest": "從舊到新", "newest_to_oldest": "從新到舊", "most_votes": "得票最多", - "most_posts": "Most posts" + "most_posts": "最多post" } \ No newline at end of file diff --git a/public/language/zh_TW/user.json b/public/language/zh_TW/user.json index 1752a45979..dce640ac75 100644 --- a/public/language/zh_TW/user.json +++ b/public/language/zh_TW/user.json @@ -2,8 +2,8 @@ "banned": "封鎖", "offline": "下線", "username": "使用者名稱", - "joindate": "Join Date", - "postcount": "Post Count", + "joindate": "加入時間", + "postcount": "Post數量", "email": "Email", "confirm_email": "確認電郵", "delete_account": "刪除帳戶", @@ -64,7 +64,7 @@ "follows_no_one": "該用戶還沒有關注過任何人。", "has_no_posts": "尚未有任何貼文.", "has_no_topics": "這位使用者尚未發表任何主題。", - "has_no_watched_topics": "This user didn't watch any topics yet.", + "has_no_watched_topics": "這位使用者尚未發表任何主題", "email_hidden": "郵箱被隱藏", "hidden": "隱藏", "paginate_description": "使用分頁取代瀏覽載入文章模式.", From 316d0fe1d7313301d0717a0b7d722567a08e3a2f Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 27 Mar 2015 09:01:25 -0400 Subject: [PATCH 158/172] latest fallbacks --- public/language/ar/error.json | 2 +- public/language/ar/modules.json | 3 ++- public/language/ar/pages.json | 1 + public/language/ar/tags.json | 2 +- public/language/ar/user.json | 4 +++- public/language/bn/error.json | 2 +- public/language/bn/modules.json | 3 ++- public/language/bn/pages.json | 1 + public/language/bn/tags.json | 2 +- public/language/bn/user.json | 4 +++- public/language/cs/error.json | 2 +- public/language/cs/modules.json | 3 ++- public/language/cs/pages.json | 1 + public/language/cs/tags.json | 2 +- public/language/cs/user.json | 4 +++- public/language/de/error.json | 2 +- public/language/de/modules.json | 3 ++- public/language/de/pages.json | 1 + public/language/de/tags.json | 2 +- public/language/de/user.json | 4 +++- public/language/el/error.json | 2 +- public/language/el/modules.json | 3 ++- public/language/el/pages.json | 1 + public/language/el/tags.json | 2 +- public/language/el/user.json | 4 +++- public/language/en@pirate/error.json | 2 +- public/language/en@pirate/modules.json | 3 ++- public/language/en@pirate/pages.json | 1 + public/language/en@pirate/tags.json | 2 +- public/language/en@pirate/user.json | 4 +++- public/language/en_US/error.json | 2 +- public/language/en_US/modules.json | 3 ++- public/language/en_US/pages.json | 1 + public/language/en_US/tags.json | 2 +- public/language/en_US/user.json | 4 +++- public/language/es/error.json | 2 +- public/language/es/modules.json | 3 ++- public/language/es/pages.json | 1 + public/language/es/tags.json | 2 +- public/language/es/user.json | 4 +++- public/language/et/error.json | 2 +- public/language/et/modules.json | 3 ++- public/language/et/pages.json | 1 + public/language/et/tags.json | 2 +- public/language/et/user.json | 4 +++- public/language/fa_IR/error.json | 2 +- public/language/fa_IR/modules.json | 3 ++- public/language/fa_IR/pages.json | 1 + public/language/fa_IR/tags.json | 2 +- public/language/fa_IR/user.json | 4 +++- public/language/fi/error.json | 2 +- public/language/fi/modules.json | 3 ++- public/language/fi/pages.json | 1 + public/language/fi/tags.json | 2 +- public/language/fi/user.json | 4 +++- public/language/fr/error.json | 2 +- public/language/fr/modules.json | 3 ++- public/language/fr/pages.json | 1 + public/language/fr/tags.json | 2 +- public/language/fr/user.json | 4 +++- public/language/he/error.json | 2 +- public/language/he/modules.json | 3 ++- public/language/he/pages.json | 1 + public/language/he/tags.json | 2 +- public/language/he/user.json | 4 +++- public/language/hu/error.json | 2 +- public/language/hu/modules.json | 3 ++- public/language/hu/pages.json | 1 + public/language/hu/tags.json | 2 +- public/language/hu/user.json | 4 +++- public/language/id/error.json | 2 +- public/language/id/modules.json | 3 ++- public/language/id/pages.json | 1 + public/language/id/tags.json | 2 +- public/language/id/user.json | 4 +++- public/language/it/error.json | 2 +- public/language/it/modules.json | 3 ++- public/language/it/pages.json | 1 + public/language/it/tags.json | 2 +- public/language/it/user.json | 4 +++- public/language/ja/error.json | 2 +- public/language/ja/modules.json | 3 ++- public/language/ja/pages.json | 1 + public/language/ja/tags.json | 2 +- public/language/ja/user.json | 4 +++- public/language/ko/error.json | 2 +- public/language/ko/modules.json | 3 ++- public/language/ko/pages.json | 1 + public/language/ko/tags.json | 2 +- public/language/ko/user.json | 4 +++- public/language/lt/error.json | 2 +- public/language/lt/modules.json | 3 ++- public/language/lt/pages.json | 1 + public/language/lt/tags.json | 2 +- public/language/lt/user.json | 4 +++- public/language/ms/error.json | 2 +- public/language/ms/modules.json | 3 ++- public/language/ms/pages.json | 1 + public/language/ms/tags.json | 2 +- public/language/ms/user.json | 4 +++- public/language/nb/error.json | 2 +- public/language/nb/modules.json | 3 ++- public/language/nb/pages.json | 1 + public/language/nb/tags.json | 2 +- public/language/nb/user.json | 4 +++- public/language/nl/error.json | 2 +- public/language/nl/modules.json | 3 ++- public/language/nl/pages.json | 1 + public/language/nl/tags.json | 2 +- public/language/nl/user.json | 4 +++- public/language/pl/error.json | 2 +- public/language/pl/modules.json | 3 ++- public/language/pl/pages.json | 1 + public/language/pl/tags.json | 2 +- public/language/pl/user.json | 4 +++- public/language/pt_BR/error.json | 2 +- public/language/pt_BR/modules.json | 3 ++- public/language/pt_BR/pages.json | 1 + public/language/pt_BR/tags.json | 2 +- public/language/pt_BR/user.json | 4 +++- public/language/ro/error.json | 2 +- public/language/ro/modules.json | 3 ++- public/language/ro/pages.json | 1 + public/language/ro/tags.json | 2 +- public/language/ro/user.json | 4 +++- public/language/ru/error.json | 2 +- public/language/ru/modules.json | 3 ++- public/language/ru/pages.json | 1 + public/language/ru/tags.json | 2 +- public/language/ru/user.json | 4 +++- public/language/sc/error.json | 2 +- public/language/sc/modules.json | 3 ++- public/language/sc/pages.json | 1 + public/language/sc/tags.json | 2 +- public/language/sc/user.json | 4 +++- public/language/sk/error.json | 2 +- public/language/sk/modules.json | 3 ++- public/language/sk/pages.json | 1 + public/language/sk/tags.json | 2 +- public/language/sk/user.json | 4 +++- public/language/sv/error.json | 2 +- public/language/sv/modules.json | 3 ++- public/language/sv/pages.json | 1 + public/language/sv/tags.json | 2 +- public/language/sv/user.json | 4 +++- public/language/th/error.json | 2 +- public/language/th/modules.json | 3 ++- public/language/th/pages.json | 1 + public/language/th/tags.json | 2 +- public/language/th/user.json | 4 +++- public/language/tr/error.json | 2 +- public/language/tr/modules.json | 3 ++- public/language/tr/pages.json | 1 + public/language/tr/tags.json | 2 +- public/language/tr/user.json | 4 +++- public/language/vi/error.json | 2 +- public/language/vi/modules.json | 3 ++- public/language/vi/pages.json | 1 + public/language/vi/tags.json | 2 +- public/language/vi/user.json | 4 +++- public/language/zh_CN/error.json | 2 +- public/language/zh_CN/modules.json | 3 ++- public/language/zh_CN/pages.json | 1 + public/language/zh_CN/tags.json | 2 +- public/language/zh_CN/user.json | 4 +++- public/language/zh_TW/error.json | 2 +- public/language/zh_TW/modules.json | 3 ++- public/language/zh_TW/pages.json | 1 + public/language/zh_TW/tags.json | 2 +- public/language/zh_TW/user.json | 4 +++- 170 files changed, 272 insertions(+), 136 deletions(-) diff --git a/public/language/ar/error.json b/public/language/ar/error.json index e5d2f8c856..01c1aa7109 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -18,7 +18,7 @@ "username-taken": "اسم المستخدم مأخوذ", "email-taken": "البريد الالكتروني مأخوذ", "email-not-confirmed": "عنوان بريدك الإلكتروني غير مفعل بعد. انقر هنا لتفعيله من فضلك.", - "email-not-confirmed-chat": "لايمكنك الدردشة إلا بعد تفعيل بريدك الإلكتروني", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "هذا المنتدى يستلزم تفعيل بريدك الإلكتروني، انقر هنا من فضلك لإدخاله.", "email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.", "username-too-short": "اسم المستخدم قصير.", diff --git a/public/language/ar/modules.json b/public/language/ar/modules.json index 3d621333ba..4d644f6938 100644 --- a/public/language/ar/modules.json +++ b/public/language/ar/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 أشهر", "composer.user_said_in": "%1 كتب في %2", "composer.user_said": "%1 كتب:", - "composer.discard": "هل أنت متأكد أنك تريد التخلي عن التغييرات؟" + "composer.discard": "هل أنت متأكد أنك تريد التخلي عن التغييرات؟", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/ar/pages.json b/public/language/ar/pages.json index 15e8209928..e4183220a2 100644 --- a/public/language/ar/pages.json +++ b/public/language/ar/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "مفضلات %1", "user.settings": "خيارات المستخدم", + "user.watched": "Topics watched by %1", "maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.", "maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:" } \ No newline at end of file diff --git a/public/language/ar/tags.json b/public/language/ar/tags.json index 004681a32a..f2eccbd1c0 100644 --- a/public/language/ar/tags.json +++ b/public/language/ar/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "لاوجود لمواضيع تحمل هذا الوسم.", "tags": "بطاقات", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "أدخل البطاقات...", "no_tags": "لاتوجد هناك بطاقات بعد." } \ No newline at end of file diff --git a/public/language/ar/user.json b/public/language/ar/user.json index 29094b2d39..11e27d0fdb 100644 --- a/public/language/ar/user.json +++ b/public/language/ar/user.json @@ -60,6 +60,7 @@ "digest_monthly": "شهريًّا", "send_chat_notifications": "استلام رسالة إلكترونية عند ورود محادثة وأنا غير متصل.", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "هذا المستخدم ليس لديه أي متابع :(", "follows_no_one": "هذا المستخدم لا يتابع أحد :(", "has_no_posts": "هذا المستخدم لم يكتب أي شيء بعد.", @@ -76,5 +77,6 @@ "enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع", "topic_search_help": "في حالة تفعيلها، ستعوض خاصيةُ البحث داخل المواضيع خاصيةَ البحث الخاصة بالمتصفح، فتمكنك بالتالي بالبحث في الموضوع بأكمله دون الاقتصار على مايظهر في الشاشة فحسب.", "follow_topics_you_reply_to": "متابعة المشاركات التي ترد عليها", - "follow_topics_you_create": "متابعة المشاركات التي تكتبها" + "follow_topics_you_create": "متابعة المشاركات التي تكتبها", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/bn/error.json b/public/language/bn/error.json index 946b152345..71ff379ba6 100644 --- a/public/language/bn/error.json +++ b/public/language/bn/error.json @@ -18,7 +18,7 @@ "username-taken": "ইউজারনেম আগেই ব্যবহৃত", "email-taken": "ইমেইল আগেই ব্যবহৃত", "email-not-confirmed": "আপনার ইমেইল এড্রেস নিশ্চিত করা হয় নি, নিশ্চিত করতে এখানে ক্লিক করুন।", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "খুব ছোট ইউজারনেম", diff --git a/public/language/bn/modules.json b/public/language/bn/modules.json index cbd625d77a..3dd01df610 100644 --- a/public/language/bn/modules.json +++ b/public/language/bn/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "৩ মাস", "composer.user_said_in": "%1 বলেছেন %2:", "composer.user_said": "%1 বলেছেনঃ", - "composer.discard": "আপনি কি নিশ্চিত যে আপনি এই পোস্ট বাতিল করতে ইচ্ছুক?" + "composer.discard": "আপনি কি নিশ্চিত যে আপনি এই পোস্ট বাতিল করতে ইচ্ছুক?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/bn/pages.json b/public/language/bn/pages.json index 4ab90a11a2..0da3b3b4a7 100644 --- a/public/language/bn/pages.json +++ b/public/language/bn/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1'র প্রিয় পোস্টগুলো", "user.settings": "সদস্য সেটিংস", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/bn/tags.json b/public/language/bn/tags.json index e99c0f835d..86bbe70e75 100644 --- a/public/language/bn/tags.json +++ b/public/language/bn/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "এই ট্যাগ সম্বলিত কোন টপিক নেই", "tags": "ট্যাগসমূহ", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "ট্যাগ বসান", "no_tags": "এখন পর্যন্ত কোন ট্যাগ নেই" } \ No newline at end of file diff --git a/public/language/bn/user.json b/public/language/bn/user.json index 98f94c7936..b9acb70ad0 100644 --- a/public/language/bn/user.json +++ b/public/language/bn/user.json @@ -60,6 +60,7 @@ "digest_monthly": "মাসিক", "send_chat_notifications": "যদি আমি অনলাইনে না থাকি, সেক্ষেত্রে নতুন চ্যাট মেসেজ আসলে আমাকে ইমেইল করুন", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "এই সদস্যের কোন ফলোয়ার নেই :(", "follows_no_one": "এই সদস্য কাউকে ফলো করছেন না :(", "has_no_posts": "এই সদস্য এখনো কোন পোষ্ট করেন নি", @@ -76,5 +77,6 @@ "enable_topic_searching": "In-Topic সার্চ সক্রীয় করো", "topic_search_help": "যদি এনাবল করা হয়ে থাকে, In-topic সার্চিং ব্রাউজারের ডিফল্ট সার্চের বদলে পুরো টপিকজুড়ে সার্চ করার সুবিধা দিবে, যা কেবলমাত্র বর্তমান স্কৃণে দেখানো অংশের মধ্যে সীমাবদ্ধ থাকবে না। ", "follow_topics_you_reply_to": "আপনার উত্তর দেয়া টপিকগুলো ফলো করুন", - "follow_topics_you_create": "আপনার তৈরীকরা টপিকসমূহ ফলো করুন" + "follow_topics_you_create": "আপনার তৈরীকরা টপিকসমূহ ফলো করুন", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/cs/error.json b/public/language/cs/error.json index 6be7f9f69d..fdfdb5f6d3 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -18,7 +18,7 @@ "username-taken": "Uživatelské jméno je již použito", "email-taken": "Email je již použit", "email-not-confirmed": "Vaše emailová adresa zatím nebyla potvrzena. Kliknutím zde svůj email potvrdíte.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Uživatelské jméno je příliš krátké", diff --git a/public/language/cs/modules.json b/public/language/cs/modules.json index f3ea87a4ee..800f56a62a 100644 --- a/public/language/cs/modules.json +++ b/public/language/cs/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 měsíce", "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.discard": "Are you sure you wish to discard this post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/cs/pages.json b/public/language/cs/pages.json index 15386435af..1bcf760876 100644 --- a/public/language/cs/pages.json +++ b/public/language/cs/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1's Favourite Posts", "user.settings": "User Settings", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/cs/tags.json b/public/language/cs/tags.json index f2003f978a..8fc07c7da2 100644 --- a/public/language/cs/tags.json +++ b/public/language/cs/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Není zde žádné téma s tímto tagem.", "tags": "Tagy", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Vložte tagy ...", "no_tags": "Zatím tu není žádný tag." } \ No newline at end of file diff --git a/public/language/cs/user.json b/public/language/cs/user.json index 55c22b5b0b..46bf40cc1c 100644 --- a/public/language/cs/user.json +++ b/public/language/cs/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Monthly", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Tohoto uživatele nikdo nesleduje :(", "follows_no_one": "Tento uživatel nikoho nesleduje :(", "has_no_posts": "This user didn't post anything yet.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_create": "Follow topics you create.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/de/error.json b/public/language/de/error.json index f5c852c661..821060aa25 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -18,7 +18,7 @@ "username-taken": "Der Benutzername ist bereits vergeben", "email-taken": "Die E-Mail-Adresse ist bereits vergeben", "email-not-confirmed": "Deine E-Mail wurde noch nicht bestätigt. Bitte klicke hier, um deine E-Mail zu bestätigen.", - "email-not-confirmed-chat": "Der Chat ist deaktiviert bis Du deine E-Mail bestätigt hast", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Dieses Forum setzt E-Mail-Bestätigung voraus, bitte klick hier um eine E-Mail-Adresse einzugeben", "email-confirm-failed": "Wir konnten deine E-Mail-Adresse nicht bestätigen, bitte versuch es später noch einmal", "username-too-short": "Benutzername ist zu kurz", diff --git a/public/language/de/modules.json b/public/language/de/modules.json index e3ee1c334f..d1c1e61f4f 100644 --- a/public/language/de/modules.json +++ b/public/language/de/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Monate", "composer.user_said_in": "%1 sagte in %2:", "composer.user_said": "%1 sagte:", - "composer.discard": "Bist du sicher, dass du diesen Post verwerfen möchtest?" + "composer.discard": "Bist du sicher, dass du diesen Post verwerfen möchtest?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/de/pages.json b/public/language/de/pages.json index 78b7c7469d..1fee71d136 100644 --- a/public/language/de/pages.json +++ b/public/language/de/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Gruppen", "user.favourites": "Von %1 favorisierte Beiträge", "user.settings": "Benutzer-Einstellungen", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 befindet sich derzeit in der Wartung. Bitte komm später wieder.", "maintenance.messageIntro": "Zusätzlich hat der Administrator diese Nachricht hinterlassen:" } \ No newline at end of file diff --git a/public/language/de/tags.json b/public/language/de/tags.json index 9c40b9cc9e..dc1c643266 100644 --- a/public/language/de/tags.json +++ b/public/language/de/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Es gibt keine Themen mit diesem Stichwort.", "tags": "Stichwörter", - "enter_tags_here": "Gib hier Stichwörter ein. %1-%2 Zeichen. Drücke Enter nach jedem Stichwort.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Gib Stichwörter ein...", "no_tags": "Es gibt bisher keine Stichwörter." } \ No newline at end of file diff --git a/public/language/de/user.json b/public/language/de/user.json index dcc5a89332..5eaf971ab8 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Monatlich", "send_chat_notifications": "Sende eine E-Mail, wenn eine neue Chat-Nachricht eingeht und ich nicht online bin", "send_post_notifications": "Sende eine E-Mail wenn auf Themen die ich abonniert habe geantwortet wird", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Dieser User hat noch keine Follower.", "follows_no_one": "Dieser User folgt noch niemandem :(", "has_no_posts": "Dieser Nutzer hat noch nichts gepostet.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Suchen innerhalb von Themen aktivieren", "topic_search_help": "Falls aktiviert, wird die Suche im Thema das Standardsuchverhalten des Browsers überschreiben und es Ihnen erlauben, das ganze Thema statt dessen, was sich auf dem Bildschirm befindet, zu durchsuchen.", "follow_topics_you_reply_to": "Folge Themen, auf die du antwortest.", - "follow_topics_you_create": "Folge Themen, die du erstellst." + "follow_topics_you_create": "Folge Themen, die du erstellst.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/el/error.json b/public/language/el/error.json index 26ca6539ba..2d00c366d4 100644 --- a/public/language/el/error.json +++ b/public/language/el/error.json @@ -18,7 +18,7 @@ "username-taken": "Το όνομα χρήστη είναι πιασμένο", "email-taken": "Το email είναι πιασμένο", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Το όνομα χρήστη είναι πολύ μικρό", diff --git a/public/language/el/modules.json b/public/language/el/modules.json index 95dbfa73f2..5646e812eb 100644 --- a/public/language/el/modules.json +++ b/public/language/el/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Μήνες", "composer.user_said_in": "Ο/Η %1 είπε στο %2:", "composer.user_said": "Ο/Η %1 είπε:", - "composer.discard": "Είσαι σίγουρος/η πως θέλεις να πετάξεις αυτή την δημοσίευση;" + "composer.discard": "Είσαι σίγουρος/η πως θέλεις να πετάξεις αυτή την δημοσίευση;", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/el/pages.json b/public/language/el/pages.json index 0b9a89746e..1c2deb4489 100644 --- a/public/language/el/pages.json +++ b/public/language/el/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "Οι αγαπημένες δημοσιεύσεις του/της %1", "user.settings": "Επιλογές Χρήστη", + "user.watched": "Topics watched by %1", "maintenance.text": "Το %1 αυτή την στιγμή συντηρείται. Παρακαλώ έλα αργότερα.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/el/tags.json b/public/language/el/tags.json index 4264ed78aa..e3776579ed 100644 --- a/public/language/el/tags.json +++ b/public/language/el/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Δεν υπάρχουν θέματα με αυτή την ετικέτα.", "tags": "Ετικέτες", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Εισαγωγή ετικετών...", "no_tags": "Δεν υπάρχουν ακόμα ετικέτες." } \ No newline at end of file diff --git a/public/language/el/user.json b/public/language/el/user.json index 306604b44d..19a6d78974 100644 --- a/public/language/el/user.json +++ b/public/language/el/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Μηνιαία", "send_chat_notifications": "Αποστολή email αν μου έρθει μήνυμα συνομιλίας και δεν είμαι συνδεδεμένος", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Αυτός ο χρήστης δεν έχει κανέναν ακόλουθο :(", "follows_no_one": "Αυτός ο χρήστης δεν ακολουθεί κανέναν :(", "has_no_posts": "Αυτός ο χρήστης δεν έχει δημοσιεύσει τίποτα ακόμη.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Ακολούθα τα θέματα στα οποία απαντάς.", - "follow_topics_you_create": "Ακολούθα τα θέματα που δημιουργείς." + "follow_topics_you_create": "Ακολούθα τα θέματα που δημιουργείς.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/en@pirate/error.json b/public/language/en@pirate/error.json index e0700f76c4..17465a20a3 100644 --- a/public/language/en@pirate/error.json +++ b/public/language/en@pirate/error.json @@ -18,7 +18,7 @@ "username-taken": "Username taken", "email-taken": "Email taken", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", diff --git a/public/language/en@pirate/modules.json b/public/language/en@pirate/modules.json index 3f5fa58753..e43e497da3 100644 --- a/public/language/en@pirate/modules.json +++ b/public/language/en@pirate/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Months", "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.discard": "Are you sure you wish to discard this post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/en@pirate/pages.json b/public/language/en@pirate/pages.json index 15386435af..1bcf760876 100644 --- a/public/language/en@pirate/pages.json +++ b/public/language/en@pirate/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1's Favourite Posts", "user.settings": "User Settings", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/en@pirate/tags.json b/public/language/en@pirate/tags.json index aa9f14c70c..c416d8d4ec 100644 --- a/public/language/en@pirate/tags.json +++ b/public/language/en@pirate/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/en@pirate/user.json b/public/language/en@pirate/user.json index 5fb6a30da2..f0467e46e3 100644 --- a/public/language/en@pirate/user.json +++ b/public/language/en@pirate/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Monthly", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "This user doesn't have any followers :(", "follows_no_one": "This user isn't following anyone :(", "has_no_posts": "This user didn't post anything yet.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_create": "Follow topics you create.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/en_US/error.json b/public/language/en_US/error.json index e0700f76c4..17465a20a3 100644 --- a/public/language/en_US/error.json +++ b/public/language/en_US/error.json @@ -18,7 +18,7 @@ "username-taken": "Username taken", "email-taken": "Email taken", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", diff --git a/public/language/en_US/modules.json b/public/language/en_US/modules.json index 4388c738b1..7cdd9b4c48 100644 --- a/public/language/en_US/modules.json +++ b/public/language/en_US/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Months", "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.discard": "Are you sure you wish to discard this post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/en_US/pages.json b/public/language/en_US/pages.json index c6d577d2f5..ca0cb61e2e 100644 --- a/public/language/en_US/pages.json +++ b/public/language/en_US/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1's Favorite Posts", "user.settings": "User Settings", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/en_US/tags.json b/public/language/en_US/tags.json index aa9f14c70c..c416d8d4ec 100644 --- a/public/language/en_US/tags.json +++ b/public/language/en_US/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/en_US/user.json b/public/language/en_US/user.json index 825cc3acae..b6209de55a 100644 --- a/public/language/en_US/user.json +++ b/public/language/en_US/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Monthly", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "This user doesn't have any followers :(", "follows_no_one": "This user isn't following anyone :(", "has_no_posts": "This user didn't post anything yet.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_create": "Follow topics you create.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/es/error.json b/public/language/es/error.json index 8be673f77d..e7e9723169 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -18,7 +18,7 @@ "username-taken": "Nombre de usuario ocupado", "email-taken": "Correo electrónico ocupado", "email-not-confirmed": "Su cuenta de correo electrónico no ha sido confirmada aún, por favor haga click aquí para confirmarla.", - "email-not-confirmed-chat": "No puedes hacer uso del chat hasta que confirmes tu email", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Este foro requiere confirmación de su email, por favor pulse aquí para introducir un email", "email-confirm-failed": "No se ha podido confirmar su email, por favor inténtelo de nuevo más tarde.", "username-too-short": "Nombre de usuario es demasiado corto", diff --git a/public/language/es/modules.json b/public/language/es/modules.json index 6c7642869b..a63418d2c6 100644 --- a/public/language/es/modules.json +++ b/public/language/es/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 meses", "composer.user_said_in": "%1 dijo en %2:", "composer.user_said": "%1 dijo:", - "composer.discard": "¿Estás seguro de que deseas descartar este mensaje?" + "composer.discard": "¿Estás seguro de que deseas descartar este mensaje?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/es/pages.json b/public/language/es/pages.json index 4cd102fdf0..f8beed5e43 100644 --- a/public/language/es/pages.json +++ b/public/language/es/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Grupos", "user.favourites": "Publicaciones favoritas de %1 ", "user.settings": "Preferencias de usuario", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 está en mantenimiento actualmente. Por favor vuelva en otro momento.", "maintenance.messageIntro": "Adicionalmente, la administración ha dejado este mensaje:" } \ No newline at end of file diff --git a/public/language/es/tags.json b/public/language/es/tags.json index dc1f26a0ba..260ff42eef 100644 --- a/public/language/es/tags.json +++ b/public/language/es/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "No hay temas con esta etiqueta.", "tags": "Etiquetas", - "enter_tags_here": "Introduce las etiquetas aquí. %1-%2 caracteres. Presiona enter después de cada etiqueta.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Introduzca las etiquetas...", "no_tags": "Aún no hay etiquetas." } \ No newline at end of file diff --git a/public/language/es/user.json b/public/language/es/user.json index add6981c5f..7accd46f09 100644 --- a/public/language/es/user.json +++ b/public/language/es/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Mensualmente", "send_chat_notifications": "Enviar un email si recibo un mensaje de chat cuando no esté en línea.", "send_post_notifications": "Enviarme un email cuando se realicen contestaciones en los temas en los que estoy subscrito", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Este usuario no tiene seguidores :(", "follows_no_one": "Este miembro no sigue a nadie :(", "has_no_posts": "Este usuario aún no ha publicado nada.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Activar la búsqueda \"in-topic\"", "topic_search_help": "Si está activada, la búsqueda 'in-topic' invalidará el comportamiento por defecto del navegador de buscar sólo en la página mostrada y le permitirá entonces buscar en el tema al completo, en vez de hacer una búsqueda únicamente sobre el contenido de la pantalla.", "follow_topics_you_reply_to": "Seguir los temas en las que respondes.", - "follow_topics_you_create": "Seguir publicaciones que creas." + "follow_topics_you_create": "Seguir publicaciones que creas.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/et/error.json b/public/language/et/error.json index 303197735f..0bbf35bd3a 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -18,7 +18,7 @@ "username-taken": "Kasutajanimi on juba võetud", "email-taken": "Email on võetud", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Kasutajanimi on liiga lühike", diff --git a/public/language/et/modules.json b/public/language/et/modules.json index a3ab106cf4..2ddda85058 100644 --- a/public/language/et/modules.json +++ b/public/language/et/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Months", "composer.user_said_in": "%1 ütles %2:", "composer.user_said": "%1 ütles:", - "composer.discard": "Oled kindel, et soovid selle postituse tühistada?" + "composer.discard": "Oled kindel, et soovid selle postituse tühistada?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/et/pages.json b/public/language/et/pages.json index 4a8ef6408f..d5cffc9d46 100644 --- a/public/language/et/pages.json +++ b/public/language/et/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1's lemmikud postitused", "user.settings": "Kasutaja sätted", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 foorumil on käimas hooldustööd. Palun külastage meid mõne aja pärast uuesti.", "maintenance.messageIntro": "Administraator on jätnud ka omaltpoolt sõnumi:" } \ No newline at end of file diff --git a/public/language/et/tags.json b/public/language/et/tags.json index 5f63e2b3e7..87b8332fad 100644 --- a/public/language/et/tags.json +++ b/public/language/et/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Teemasid, mis sisaldaksid seda märksõna, ei eksisteeri.", "tags": "Märksõnad", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Sisesta märksõnu...", "no_tags": "Siin ei ole veel ühtegi märksõna." } \ No newline at end of file diff --git a/public/language/et/user.json b/public/language/et/user.json index ebf69619dc..2e2b7a37fa 100644 --- a/public/language/et/user.json +++ b/public/language/et/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Iga kuu", "send_chat_notifications": "Saada mulle email kui mulle saabub uus sõnum ja ma ei ole antud hetkel online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Sellel kasutajal pole ühtegi jälgijat :(", "follows_no_one": "See kasutaja ei jälgi kedagi :(", "has_no_posts": "See kasutaja pole midagi postitanud veel.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Järgi teemasid millele vastuse kirjutad.", - "follow_topics_you_create": "Järgi teemasid, mis on sinu loodud." + "follow_topics_you_create": "Järgi teemasid, mis on sinu loodud.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/fa_IR/error.json b/public/language/fa_IR/error.json index 40ce45c9e0..cc32d1873e 100644 --- a/public/language/fa_IR/error.json +++ b/public/language/fa_IR/error.json @@ -18,7 +18,7 @@ "username-taken": "این نام کاربری گرفته شده است.", "email-taken": "این رایانامه گرفته شده است.", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "نام کاربری خیلی کوتاه است.", diff --git a/public/language/fa_IR/modules.json b/public/language/fa_IR/modules.json index 1b15e63d55..0456ff2842 100644 --- a/public/language/fa_IR/modules.json +++ b/public/language/fa_IR/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Months", "composer.user_said_in": "%1 در %2 گفته است:", "composer.user_said": "%1 گفته است:", - "composer.discard": "آیا از دور انداختن این دیدگاه اطمینان دارید؟" + "composer.discard": "آیا از دور انداختن این دیدگاه اطمینان دارید؟", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/fa_IR/pages.json b/public/language/fa_IR/pages.json index 42dacfa193..0daf56c95b 100644 --- a/public/language/fa_IR/pages.json +++ b/public/language/fa_IR/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "دیدگاه‌های پسندیدهٔ %1", "user.settings": "تنظیمات کاربر", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/fa_IR/tags.json b/public/language/fa_IR/tags.json index 82e477f4cc..26a393396b 100644 --- a/public/language/fa_IR/tags.json +++ b/public/language/fa_IR/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "جُستاری با این برچسب وجود ندارد.", "tags": "برچسب‌ها", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "هنوز برچسبی وجود ندارد." } \ No newline at end of file diff --git a/public/language/fa_IR/user.json b/public/language/fa_IR/user.json index 0b2a48667f..c2b90d3c4c 100644 --- a/public/language/fa_IR/user.json +++ b/public/language/fa_IR/user.json @@ -60,6 +60,7 @@ "digest_monthly": "ماهانه", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "این کاربر هیچ دنبال‌کننده‌ای ندارد :(", "follows_no_one": "این کاربر هیچ کسی را دنبال نمی‌کند :(", "has_no_posts": "این کاربر هنوز هیچ دیدگاهی نگذاشته است.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_create": "Follow topics you create.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/fi/error.json b/public/language/fi/error.json index 9ca0ec4973..c343ca1345 100644 --- a/public/language/fi/error.json +++ b/public/language/fi/error.json @@ -18,7 +18,7 @@ "username-taken": "Käyttäjänimi varattu", "email-taken": "Sähköpostiosoite varattu", "email-not-confirmed": "Sähköpostiasi ei ole vielä vahvistettu, ole hyvä ja napsauta tätä vahvistaaksesi sen.", - "email-not-confirmed-chat": "Et voi käyttää chattia ennen kuin sähköpostisi on vahvistettu", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Käyttäjänimi on liian lyhyt", diff --git a/public/language/fi/modules.json b/public/language/fi/modules.json index cce7d25fbe..7823638f1b 100644 --- a/public/language/fi/modules.json +++ b/public/language/fi/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 kuukautta", "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 sanoi:", - "composer.discard": "Oletko varma, että haluat hylätä viestin?" + "composer.discard": "Oletko varma, että haluat hylätä viestin?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/fi/pages.json b/public/language/fi/pages.json index 07d941a4dc..d2fc4993d6 100644 --- a/public/language/fi/pages.json +++ b/public/language/fi/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "Käyttäjän %1 suosikkiviestit", "user.settings": "Käyttäjän asetukset", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/fi/tags.json b/public/language/fi/tags.json index 3d1cf1271b..35903730b2 100644 --- a/public/language/fi/tags.json +++ b/public/language/fi/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Ei viimeisimpiä aiheita tällä tagilla.", "tags": "Tagit", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Syötä tagit...", "no_tags": "Ei vielä yhtään tagia." } \ No newline at end of file diff --git a/public/language/fi/user.json b/public/language/fi/user.json index 3f0768bf00..771ea13132 100644 --- a/public/language/fi/user.json +++ b/public/language/fi/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Kuukausittain", "send_chat_notifications": "Lähetä minulle sähköposti, jos uusi pikaviesti saapuu, kun en ole paikalla", "send_post_notifications": "Lähetä minulle sähköposti, kun tilaamiini aiheisiin tulee vastauksia", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Kukaan ei seuraa tätä käyttäjää :(", "follows_no_one": "Tämä käyttäjä ei seuraa ketään :(", "has_no_posts": "Tämä käyttäjä ei ole kirjoittanut vielä mitään.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Salli aiheen sisäiset haut", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Seuraa aiheita, joihin olen vastannut.", - "follow_topics_you_create": "Seuraa aloittamiani aiheita." + "follow_topics_you_create": "Seuraa aloittamiani aiheita.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/fr/error.json b/public/language/fr/error.json index 51f03aa33f..b2892fde19 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -18,7 +18,7 @@ "username-taken": "Nom d’utilisateur déjà utilisé", "email-taken": "Email déjà utilisé", "email-not-confirmed": "Votre adresse email n'est pas confirmée, cliquez ici pour la valider.", - "email-not-confirmed-chat": "Vous ne pouver discuter tant que votre email n'est pas confirmé", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Ce forum requiert une vérification de votre adresse email. Veuillez cliquer ici pour entrer une adresse.", "email-confirm-failed": "Votre adresse email n'a pas pu être vérifiée. Veuillez ré-essayer plus tard.", "username-too-short": "Nom d'utilisateur trop court", diff --git a/public/language/fr/modules.json b/public/language/fr/modules.json index c472c6b402..8589d50ca7 100644 --- a/public/language/fr/modules.json +++ b/public/language/fr/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Mois", "composer.user_said_in": "%1 a dit dans %2 :", "composer.user_said": "%1 a dit :", - "composer.discard": "Êtes-vous sûr de bien vouloir supprimer ce message ?" + "composer.discard": "Êtes-vous sûr de bien vouloir supprimer ce message ?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/fr/pages.json b/public/language/fr/pages.json index 7698a55986..9d57e1d68c 100644 --- a/public/language/fr/pages.json +++ b/public/language/fr/pages.json @@ -14,6 +14,7 @@ "user.groups": "Les Groupes de %1", "user.favourites": "Messages favoris de %1", "user.settings": "Préférences utilisateur", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 est en maintenance. Veuillez revenir un peu plus tard.", "maintenance.messageIntro": "De plus, l'administrateur a laissé ce message:" } \ No newline at end of file diff --git a/public/language/fr/tags.json b/public/language/fr/tags.json index ef226f2efe..477f1a0b56 100644 --- a/public/language/fr/tags.json +++ b/public/language/fr/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Il n'y a aucun sujet ayant ce mot-clé", "tags": "Mots-clés", - "enter_tags_here": "Entrez les mots-clés ici. %1-%2 caractères. Tapez sur \"Entrée\" après chaque mot-clé.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Entrez des mots-clés...", "no_tags": "Il n'y a pas encore de mots-clés." } \ No newline at end of file diff --git a/public/language/fr/user.json b/public/language/fr/user.json index 8786929c78..2f60041e7e 100644 --- a/public/language/fr/user.json +++ b/public/language/fr/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Mensuel", "send_chat_notifications": "Envoyer un e-mail si un nouveau message de chat arrive lorsque je ne suis pas en ligne", "send_post_notifications": "Envoyer un email lors de réponses envoyées aux sujets auxquels je suis abonné.", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Cet utilisateur n'est suivi par personne :(", "follows_no_one": "Cet utilisateur ne suit personne :(", "has_no_posts": "Ce membre n'a rien posté pour le moment", @@ -76,5 +77,6 @@ "enable_topic_searching": "Activer la recherche dans les sujets", "topic_search_help": "Une fois activé, la recherche dans les sujets va remplacer la recherche de page du navigateur et vous permettra de rechercher dans l'intégralité d'un sujet au lieu des seuls posts chargés.", "follow_topics_you_reply_to": "Suivre les sujets auxquels vous répondez.", - "follow_topics_you_create": "Suivre les sujets que vous créez." + "follow_topics_you_create": "Suivre les sujets que vous créez.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/he/error.json b/public/language/he/error.json index d6f29ea755..e210d21334 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -18,7 +18,7 @@ "username-taken": "שם משתמש תפוס", "email-taken": "כתובת אימייל תפוסה", "email-not-confirmed": "כתובת המייל שלך עוד לא אושרה, לחץ כאן על-מנת לאשר את המייל שלך.", - "email-not-confirmed-chat": "לא תוכל לדבר בצ'אט עד שלא תאשר את כתובת המייל שלך", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "שם משתמש קצר מדי", diff --git a/public/language/he/modules.json b/public/language/he/modules.json index 43bf264e7b..f4fe8cd0ef 100644 --- a/public/language/he/modules.json +++ b/public/language/he/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 חודשים", "composer.user_said_in": "%1 אמר ב%2:", "composer.user_said": "%1 אמר:", - "composer.discard": "האם למחוק פוסט זה?" + "composer.discard": "האם למחוק פוסט זה?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/he/pages.json b/public/language/he/pages.json index aaeb1fcac5..8a39e4fa58 100644 --- a/public/language/he/pages.json +++ b/public/language/he/pages.json @@ -14,6 +14,7 @@ "user.groups": "הקבוצות של %1", "user.favourites": "הפוסטים המועדפים על %1", "user.settings": "הגדרות משתמש", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 כרגע תחת עבודות תחזוקה. אנא חזור בזמן מאוחר יותר.", "maintenance.messageIntro": "בנוסף, המנהל השאיר את ההודעה הזו:" } \ No newline at end of file diff --git a/public/language/he/tags.json b/public/language/he/tags.json index 54ead310ad..3061057672 100644 --- a/public/language/he/tags.json +++ b/public/language/he/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "אין פוסטים עם תגית זו.", "tags": "תגיות", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "הכנס תגיות", "no_tags": "אין עדיין תגיות." } \ No newline at end of file diff --git a/public/language/he/user.json b/public/language/he/user.json index e8b3a5d3a7..61a45f3c5c 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -60,6 +60,7 @@ "digest_monthly": "חודשי", "send_chat_notifications": "שלח לי הודעה למייל כאשר הודעת צ'אט נשלחה אלי בזמן שאיני מחובר", "send_post_notifications": "שלח לי הודעה למייל כאשר תגובות חדשות פורסמו לנושאים שאני עוקב אחריהם", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "למשתמש זה אין עוקבים :(", "follows_no_one": "משתמש זה אינו עוקב אחרי אחרים :(", "has_no_posts": "המשתמש הזה עוד לא פרסם כלום.", @@ -76,5 +77,6 @@ "enable_topic_searching": "הפעל חיפוש בתוך נושא", "topic_search_help": "אם מופעל, חיפוש בתוך נושא יעקוף את מנגנון החיפוש הרגיל של הדפדפן שלך על מנת לאפשר לך לחפש בתוך כל הנושא ולא רק מה שמוצג כרגע בעמוד.", "follow_topics_you_reply_to": "עקוב אחר נושאים שהגבת עליהם.", - "follow_topics_you_create": "עקוב אחר נושאים שיצרת." + "follow_topics_you_create": "עקוב אחר נושאים שיצרת.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/hu/error.json b/public/language/hu/error.json index 289ad3a918..39ec76c011 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -18,7 +18,7 @@ "username-taken": "Foglalt felhasználónév", "email-taken": "Foglalt e-mail", "email-not-confirmed": "Az e-mail címed még nem lett ellenőrizve, kérlek kattints ide az e-mail címed ellenőrzéséhez!", - "email-not-confirmed-chat": "Addig nem cseveghetsz, amíg az e-mail címed nincs megerősítve.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Ez a fórum e-mail megerősítést kíván, kérlek kattints ide egy cím beírásához", "email-confirm-failed": "Nem tudtuk ellenőrizni az e-mail címedet, kérlek próbálkozz később.", "username-too-short": "Túl rövid felhasználónév", diff --git a/public/language/hu/modules.json b/public/language/hu/modules.json index c339652efe..c708c09d98 100644 --- a/public/language/hu/modules.json +++ b/public/language/hu/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 hónap", "composer.user_said_in": "%1 válasza erre %2:", "composer.user_said": "%1 válasza:", - "composer.discard": "Biztosan elvetjük ezt a hozzászólást?" + "composer.discard": "Biztosan elvetjük ezt a hozzászólást?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/hu/pages.json b/public/language/hu/pages.json index 53b98e8562..547e924217 100644 --- a/public/language/hu/pages.json +++ b/public/language/hu/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's csoport", "user.favourites": "%1 Kedvenc Hozzászólásai", "user.settings": "Felhasználói Beállítások", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 jelenleg karbantartás alatt van. Kérlek nézz vissza késöbb!", "maintenance.messageIntro": "Ezenkívúl, az adminisztrátor ezt az üzenetet hagyta:" } \ No newline at end of file diff --git a/public/language/hu/tags.json b/public/language/hu/tags.json index 020edfe34c..baddf9f8d6 100644 --- a/public/language/hu/tags.json +++ b/public/language/hu/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Nem létezik témakör ezzel a címkével.", "tags": "Címkék", - "enter_tags_here": "Írj be címkéket itt. %1-%2 karakterig. Üsd le az enter-t mindegyik után.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Címke megadása...", "no_tags": "Nincs címke." } \ No newline at end of file diff --git a/public/language/hu/user.json b/public/language/hu/user.json index d4ab3ff21f..ba7f403c7c 100644 --- a/public/language/hu/user.json +++ b/public/language/hu/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Havi", "send_chat_notifications": "E-mail küldése, amennyiben chat üzenetem érkezett és nem vagyok aktív", "send_post_notifications": "E-mail küldése, amikor válasz érkezik azokhoz a témákhoz, amelyekre feliratkoztam", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Ezt a felhasználót nem követi senki :(", "follows_no_one": "Ez a felhasználó nem követ senkit :(", "has_no_posts": "Ennek a felhasználónak még nincsen hozzászólása.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Témán belüli keresés bekapcsolása", "topic_search_help": "Amennyiben be van kapcsolva, a témán belüli keresés felül fogja írni a böngésző alapértelmezett oldalon belüli keresőjét és engedélyezni fogja neked, hogy a teljes témában kereshess, ne csak abban, ami jelenleg is megjelenik a képernyőn.", "follow_topics_you_reply_to": "Minden olyan téma követése, amihez hozzászóltál.", - "follow_topics_you_create": "Minden általad létrehozott téma követése." + "follow_topics_you_create": "Minden általad létrehozott téma követése.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/id/error.json b/public/language/id/error.json index d2ceed9a23..6f1e7b289f 100644 --- a/public/language/id/error.json +++ b/public/language/id/error.json @@ -18,7 +18,7 @@ "username-taken": "Username sudah terdaftar", "email-taken": "Email sudah terdaftar", "email-not-confirmed": "Email kamu belum dikonfirmasi, klik disini untuk mengkonfirmasi email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username terlalu pendek", diff --git a/public/language/id/modules.json b/public/language/id/modules.json index 53320cf627..5bd4fe85c6 100644 --- a/public/language/id/modules.json +++ b/public/language/id/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Bulan", "composer.user_said_in": "%1 berkata di %2: ", "composer.user_said": "%1 berkata:", - "composer.discard": "Kamu yakin akan membuang posting ini?" + "composer.discard": "Kamu yakin akan membuang posting ini?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/id/pages.json b/public/language/id/pages.json index 83b55a2b22..08872d82de 100644 --- a/public/language/id/pages.json +++ b/public/language/id/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "Posting Favorit %1", "user.settings": "Pengaturan Pengguna", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 saat ini sedang dalam masa pemeliharaan. Silahkan kembali lain waktu.", "maintenance.messageIntro": "Tambahan, Administrator meninggalkan pesan ini:" } \ No newline at end of file diff --git a/public/language/id/tags.json b/public/language/id/tags.json index 647542884e..8485344416 100644 --- a/public/language/id/tags.json +++ b/public/language/id/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Tidak ada topik dengan tag ini.", "tags": "Tag", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Masukkan tag...", "no_tags": "Belum ada tag." } \ No newline at end of file diff --git a/public/language/id/user.json b/public/language/id/user.json index ce82e7888f..e7a7112465 100644 --- a/public/language/id/user.json +++ b/public/language/id/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Bulanan", "send_chat_notifications": "Kirimkan email jika menerima pesan percakapan dan saya sedang tidak online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "User ini tidak memiliki pengikut :(", "follows_no_one": "User ini tidak mengikuti seorangpun :(", "has_no_posts": "User ini belum pernah membuat posting.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Gunakan Pencarian Di dalam Topik", "topic_search_help": "Jika digunakan, pencarian di dalam topik akan mengambil alih tindakan pencarian default browser dan mengijinkan kamu untuk mencari keseluruhan topik sebagai pengganti pencarian hanya yang tampil pada layar saja.", "follow_topics_you_reply_to": "Ikuti topik yang kamu balas.", - "follow_topics_you_create": "Ikuti topik yang kamu buat." + "follow_topics_you_create": "Ikuti topik yang kamu buat.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/it/error.json b/public/language/it/error.json index cbcc20dedc..6858916193 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -18,7 +18,7 @@ "username-taken": "Nome utente già preso", "email-taken": "Email già esistente", "email-not-confirmed": "La tua Email deve essere ancora confermata, per favore clicca qui per confermare la tua Email.", - "email-not-confirmed-chat": "Non potrai chattare finchè non avrai confermato la tua email", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Questo forum richiede la conferma dell'indirizzo email, per favore clicca qui per inserirne uno", "email-confirm-failed": "Non possiamo confermare la tua email, per favore prova ancora più tardi.", "username-too-short": "Nome utente troppo corto", diff --git a/public/language/it/modules.json b/public/language/it/modules.json index a049d581ae..dc6d3dcf78 100644 --- a/public/language/it/modules.json +++ b/public/language/it/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Mesi", "composer.user_said_in": "%1 ha detto in %2:", "composer.user_said": "%1 ha detto:", - "composer.discard": "Sei sicuro di voler scartare questo post?" + "composer.discard": "Sei sicuro di voler scartare questo post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/it/pages.json b/public/language/it/pages.json index 3d3ed9865a..f7395c9d50 100644 --- a/public/language/it/pages.json +++ b/public/language/it/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Gruppi", "user.favourites": "Post Favoriti da %1", "user.settings": "Impostazioni Utente", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 è attualmente in manutenzione. Per favore ritorna più tardi.", "maintenance.messageIntro": "Inoltre, l'amministratore ha lasciato questo messaggio:" } \ No newline at end of file diff --git a/public/language/it/tags.json b/public/language/it/tags.json index c3364a0bbf..5fcdf9ff47 100644 --- a/public/language/it/tags.json +++ b/public/language/it/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Non ci sono discussioni con questo tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Inserisci i tags...", "no_tags": "Non ci sono ancora tags." } \ No newline at end of file diff --git a/public/language/it/user.json b/public/language/it/user.json index e93be01541..3dd7971b11 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Mensile", "send_chat_notifications": "Invia una email se arriva un nuovo messaggio di chat e non sono online", "send_post_notifications": "Invia una email quando le risposte sono fatte a discussioni a cui sono sottoscritto", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Questo utente non è seguito da nessuno :(", "follows_no_one": "Questo utente non segue nessuno :(", "has_no_posts": "Questo utente non ha ancora postato nulla.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Abilita la ricerca negli argomenti", "topic_search_help": "Se abilitata, la ricerca negli argomenti sovrascriverà la pagina di ricerca preimpostata del browser per consentirti di cercare all'interno delle discussioni, anziché soltanto nel contenuto visibile a schermo.", "follow_topics_you_reply_to": "Segui le discussioni in cui rispondi.", - "follow_topics_you_create": "Segui le discussioni che crei." + "follow_topics_you_create": "Segui le discussioni che crei.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/ja/error.json b/public/language/ja/error.json index 95cf6728ac..d53e73b76e 100644 --- a/public/language/ja/error.json +++ b/public/language/ja/error.json @@ -18,7 +18,7 @@ "username-taken": "ユーザー名が取られた", "email-taken": "メールアドレスが使用された", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", diff --git a/public/language/ja/modules.json b/public/language/ja/modules.json index 0b27bf28d1..1a30c49b7d 100644 --- a/public/language/ja/modules.json +++ b/public/language/ja/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Months", "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.discard": "Are you sure you wish to discard this post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/ja/pages.json b/public/language/ja/pages.json index eb5274c6f1..fda23c6d35 100644 --- a/public/language/ja/pages.json +++ b/public/language/ja/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1のお気に入りポスト", "user.settings": "ユーザー設定", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/ja/tags.json b/public/language/ja/tags.json index aa9f14c70c..c416d8d4ec 100644 --- a/public/language/ja/tags.json +++ b/public/language/ja/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/ja/user.json b/public/language/ja/user.json index 0b2b065a94..9f94a46a32 100644 --- a/public/language/ja/user.json +++ b/public/language/ja/user.json @@ -60,6 +60,7 @@ "digest_monthly": "マンスリー", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "フォロワーはまだいません :(", "follows_no_one": "フォロー中のユーザーはまだいません :(", "has_no_posts": "まだポストを投稿したことありません。", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_create": "Follow topics you create.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/ko/error.json b/public/language/ko/error.json index bf1eb8d8e4..2c9de646c5 100644 --- a/public/language/ko/error.json +++ b/public/language/ko/error.json @@ -18,7 +18,7 @@ "username-taken": "이미 사용 중인 사용자 이름입니다.", "email-taken": "이미 사용 중인 이메일입니다.", "email-not-confirmed": "아직 이메일이 인증되지 않았습니다. 여기를 누르면 인증 메일을 발송할 수 있습니다.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "사용자 이름이 너무 짧습니다.", diff --git a/public/language/ko/modules.json b/public/language/ko/modules.json index 2a9c765868..fbdd01a7ae 100644 --- a/public/language/ko/modules.json +++ b/public/language/ko/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3개월", "composer.user_said_in": "%1님이 %2에서 한 말:", "composer.user_said": "%1님의 말:", - "composer.discard": "이 게시물을 지우겠습니까?" + "composer.discard": "이 게시물을 지우겠습니까?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/ko/pages.json b/public/language/ko/pages.json index ce1f9e5a05..d5cd1ed4a4 100644 --- a/public/language/ko/pages.json +++ b/public/language/ko/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1님이 좋아하는 게시물", "user.settings": "설정", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 사이트는 현재 점검 중입니다. 나중에 다시 방문해주세요.", "maintenance.messageIntro": "다음은 관리자가 전하는 메시지입니다." } \ No newline at end of file diff --git a/public/language/ko/tags.json b/public/language/ko/tags.json index a50fc5e9e1..8e1011bd29 100644 --- a/public/language/ko/tags.json +++ b/public/language/ko/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "이 태그에 해당하는 주제가 없습니다.", "tags": "태그", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "태그 입력...", "no_tags": "아직 아무런 태그도 없습니다." } \ No newline at end of file diff --git a/public/language/ko/user.json b/public/language/ko/user.json index c656a64242..bf10413609 100644 --- a/public/language/ko/user.json +++ b/public/language/ko/user.json @@ -60,6 +60,7 @@ "digest_monthly": "매월", "send_chat_notifications": "오프라인일 때 채팅 메시지가 도착하면 알림 메일을 보냅니다.", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "아무도 이 사용자를 팔로우하지 않습니다.", "follows_no_one": "이 사용자는 아무도 팔로우하지 않습니다.", "has_no_posts": "이 사용자는 게시물을 작성하지 않았습니다.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "답글을 작성한 주제를 팔로우합니다.", - "follow_topics_you_create": "직접 작성한 주제를 팔로우합니다." + "follow_topics_you_create": "직접 작성한 주제를 팔로우합니다.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/lt/error.json b/public/language/lt/error.json index 08bf3c80a4..a1a25c65bc 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -18,7 +18,7 @@ "username-taken": "Vartotojo vardas jau užimtas", "email-taken": "El. pašto adresas jau užimtas", "email-not-confirmed": "Jūsų el. paštas nepatvirtintas, prašome paspausti čia norint jį patvirtinti.", - "email-not-confirmed-chat": "Jūs negalite kalbėtis, kol el. adresas nepatvirtintas", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Šis forumas reikalauja patvirtinimo el. paštu prašome spausti čia el. adreso įrašymui", "email-confirm-failed": "Negalime patvirtinti jūsų el. adreso, prašom bandyti vėliau.", "username-too-short": "Slapyvardis per trumpas", diff --git a/public/language/lt/modules.json b/public/language/lt/modules.json index d7e012a412..e6ddbe663e 100644 --- a/public/language/lt/modules.json +++ b/public/language/lt/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 mėnesiai", "composer.user_said_in": "%1 parašė į %2:", "composer.user_said": "%1 parašė:", - "composer.discard": "Ar tikrai norite sunaikinti šį pranešimą?" + "composer.discard": "Ar tikrai norite sunaikinti šį pranešimą?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/lt/pages.json b/public/language/lt/pages.json index b317d51487..c7cd3f490f 100644 --- a/public/language/lt/pages.json +++ b/public/language/lt/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's grupės", "user.favourites": "Vartotojo %1 mėgstami pranešimai", "user.settings": "Vartotojo nustatymai", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Be to, administratorius paliko šį pranešimą:" } \ No newline at end of file diff --git a/public/language/lt/tags.json b/public/language/lt/tags.json index 2f2b9e11d2..2151f58d36 100644 --- a/public/language/lt/tags.json +++ b/public/language/lt/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Temų su šią žyma nėra.", "tags": "Žymos", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "Žymų kolkas nėra." } \ No newline at end of file diff --git a/public/language/lt/user.json b/public/language/lt/user.json index 2928033fc2..3146ac252f 100644 --- a/public/language/lt/user.json +++ b/public/language/lt/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Kas mėnesį", "send_chat_notifications": "Jeigu gaunama nauja pokalbių žinutė ir aš neprisijungęs, siųsti el. laišką", "send_post_notifications": "Atsiųsti el. laišką kai parašomi atsakymai į mano prenumeruojamas temas", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Šis vartotojas neturi jokių sekėjų :(", "follows_no_one": "Šis vartotojas nieko neseka :(", "has_no_posts": "Šis vartotojas dar neparašė nė vieno pranešimo.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Sekite temas, į kurias jūs atsakėte.", - "follow_topics_you_create": "Sekite jūsų sukurtas temas." + "follow_topics_you_create": "Sekite jūsų sukurtas temas.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/ms/error.json b/public/language/ms/error.json index 340e4e528b..23958cf5de 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -18,7 +18,7 @@ "username-taken": "Username taken", "email-taken": "Email taken", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Nama pengunna terlalu pendek", diff --git a/public/language/ms/modules.json b/public/language/ms/modules.json index dd206e5b24..9cae9f7b74 100644 --- a/public/language/ms/modules.json +++ b/public/language/ms/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Months", "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.discard": "Are you sure you wish to discard this post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/ms/pages.json b/public/language/ms/pages.json index dc7c0385e9..439217122f 100644 --- a/public/language/ms/pages.json +++ b/public/language/ms/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "Mesej Kegemaran %1", "user.settings": "Tetapan pengguna", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/ms/tags.json b/public/language/ms/tags.json index aa9f14c70c..c416d8d4ec 100644 --- a/public/language/ms/tags.json +++ b/public/language/ms/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/ms/user.json b/public/language/ms/user.json index 5b44dfc707..89969347e8 100644 --- a/public/language/ms/user.json +++ b/public/language/ms/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Bulanan", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Pengguna ini tiada pengikut :(", "follows_no_one": "Pengguna ini tidak mengikuti sesiapa :(", "has_no_posts": "Pengguna ini masih belum mengirim sebarang pos", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_create": "Follow topics you create.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/nb/error.json b/public/language/nb/error.json index 2b47e8c8ca..8706a9d569 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -18,7 +18,7 @@ "username-taken": "Brukernavn opptatt", "email-taken": "E-post opptatt", "email-not-confirmed": "E-posten din har ikke blitt bekreftet enda, vennligst klikk for å bekrefte din e-post.", - "email-not-confirmed-chat": "Du kan ikke chatte før e-posten din har blitt bekreftet", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Dette forumet krever at e-postbekreftelse, vennligst klikk her for å skrive inn en e-post", "email-confirm-failed": "Vi kunne ikke godkjenne e-posten din, vennligst prøv igjen senere.", "username-too-short": "Brukernavnet er for kort", diff --git a/public/language/nb/modules.json b/public/language/nb/modules.json index 83aae8d615..e5656f83d1 100644 --- a/public/language/nb/modules.json +++ b/public/language/nb/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 måneder", "composer.user_said_in": "%1 sa i %2: ", "composer.user_said": "%1 sa: ", - "composer.discard": "Er du sikker på at du vil forkaste dette innlegget?" + "composer.discard": "Er du sikker på at du vil forkaste dette innlegget?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/nb/pages.json b/public/language/nb/pages.json index 1d657bd759..4f424ec5d6 100644 --- a/public/language/nb/pages.json +++ b/public/language/nb/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1 sine favoritt-innlegg", "user.settings": "Brukerinnstillinger", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 er for tiden under vedlikehold. Kom tilbake en annen gang.", "maintenance.messageIntro": "I tillegg har administratoren skrevet denne meldingen:" } \ No newline at end of file diff --git a/public/language/nb/tags.json b/public/language/nb/tags.json index d38e00a025..5287b6125a 100644 --- a/public/language/nb/tags.json +++ b/public/language/nb/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Det er ingen emnet med denne taggen.", "tags": "Tagger", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Skriv tagger...", "no_tags": "Det finnes ingen tagger enda." } \ No newline at end of file diff --git a/public/language/nb/user.json b/public/language/nb/user.json index f3e6523e25..c64972929d 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Månedlig", "send_chat_notifications": "Send en epost hvis jeg mottar en chat-melding når jeg ikke er pålogget", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Denne brukeren har ingen følgere :(", "follows_no_one": "Denne brukeren følger ingen :(", "has_no_posts": "Denne brukeren har ikke skrevet noe enda.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Aktiver søk-i-emne", "topic_search_help": "Hvis aktivert, vil i-emne-søk overstyre nettleseren sin standard sidesøk-oppførsel og tillate deg å søke gjennom hele emnet, i stedet for bare det som vises på skjermen.", "follow_topics_you_reply_to": "Følg emner du svarer i.", - "follow_topics_you_create": "Følg emner du oppretter." + "follow_topics_you_create": "Følg emner du oppretter.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/nl/error.json b/public/language/nl/error.json index de83d31255..0cf9673d48 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -18,7 +18,7 @@ "username-taken": "Gebruikersnaam is al bezet", "email-taken": "Email adres is al gebruikt", "email-not-confirmed": "U email adres is niet bevestigd, Klik hier om uw email adres te bevestigen", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Gebruikersnaam is te kort", diff --git a/public/language/nl/modules.json b/public/language/nl/modules.json index 18daffd434..6658c26cf7 100644 --- a/public/language/nl/modules.json +++ b/public/language/nl/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Maanden", "composer.user_said_in": "%1 zegt in %2:", "composer.user_said": "%1 zegt:", - "composer.discard": "Weet u het zeker dat u dit bericht niet wilt plaatsen?" + "composer.discard": "Weet u het zeker dat u dit bericht niet wilt plaatsen?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/nl/pages.json b/public/language/nl/pages.json index 09cda815b9..e515c28035 100644 --- a/public/language/nl/pages.json +++ b/public/language/nl/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1's Favoriete Berichten", "user.settings": "Gebruikersinstellingen", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is momenteel in onderhoud modus. Probeer later opnieuw", "maintenance.messageIntro": "daarnaast heeft de administrator het volgende bericht achtergelaten:" } \ No newline at end of file diff --git a/public/language/nl/tags.json b/public/language/nl/tags.json index 85c11b0476..281fd4a0a5 100644 --- a/public/language/nl/tags.json +++ b/public/language/nl/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Er zijn geen onderwerpen met deze tag", "tags": "Tags", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Voer uw tags in...", "no_tags": "Er zijn nog geen tags te vinden" } \ No newline at end of file diff --git a/public/language/nl/user.json b/public/language/nl/user.json index 0cc9df6cbe..808f78a92e 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Maandelijks", "send_chat_notifications": "Verstuur mij een email als iemand een chatbericht stuurt terwijl ik niet online ben", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Deze gebruiker heeft geen volgers :(", "follows_no_one": "Deze gebruiker volgt niemand :(", "has_no_posts": "Deze gebruiker heeft nog geen berichten geplaatst", @@ -76,5 +77,6 @@ "enable_topic_searching": "Zet zoeken in het onderwerp aan", "topic_search_help": "Als het is ingeschakeld, dan zal het standaard zoeken overschrijven en zal je vanaf nu het gehele onderwerp kunnen doorzoeken ipv wat je standaard ziet.", "follow_topics_you_reply_to": "Volg de onderwerpen waarop u gereageerd heeft.", - "follow_topics_you_create": "Volg de onderwerpen die u gecreëerd heeft." + "follow_topics_you_create": "Volg de onderwerpen die u gecreëerd heeft.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/pl/error.json b/public/language/pl/error.json index c967749eeb..e8f8f3dcdf 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -18,7 +18,7 @@ "username-taken": "Login zajęty.", "email-taken": "E-mail zajęty.", "email-not-confirmed": "Twój email nie został jeszcze potwierdzony. Proszę kliknąć tutaj by go potwierdzić.", - "email-not-confirmed-chat": "Nie możesz rozmawiać do czasu, gdy twój email zostanie potwierdzony.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "To forum wymaga weryfikacji przez email. Proszę kliknąć tutaj, aby wprowadzić adres.", "email-confirm-failed": "Nie byliśmy w stanie potwierdzić twojego email-a. Proszę spróbować później.", "username-too-short": "Nazwa użytkownika za krótka.", diff --git a/public/language/pl/modules.json b/public/language/pl/modules.json index af44c3ab51..f4a7f34c86 100644 --- a/public/language/pl/modules.json +++ b/public/language/pl/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 miesiące", "composer.user_said_in": "%1 powiedział w %2:", "composer.user_said": "%1 powiedział:", - "composer.discard": "Na pewno chcesz porzucić ten post?" + "composer.discard": "Na pewno chcesz porzucić ten post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/pl/pages.json b/public/language/pl/pages.json index 7f71ba388a..91e9e5efe4 100644 --- a/public/language/pl/pages.json +++ b/public/language/pl/pages.json @@ -14,6 +14,7 @@ "user.groups": "Grupy %1", "user.favourites": "Ulubione posty %1", "user.settings": "Ustawienia użytkownika", + "user.watched": "Topics watched by %1", "maintenance.text": "Obecnie trwają prace konserwacyjne nad %1. Proszę wrócić później.", "maintenance.messageIntro": "Dodatkowo, administrator zostawił wiadomość:" } \ No newline at end of file diff --git a/public/language/pl/tags.json b/public/language/pl/tags.json index 3036b34e62..a2247f39e7 100644 --- a/public/language/pl/tags.json +++ b/public/language/pl/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Nie ma tematów z tym tagiem", "tags": "Tagi", - "enter_tags_here": "Tutaj wpisz tagi. %1-%2 znaków. Naciśnij enter po każdym.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Wpisz tagi...", "no_tags": "Jeszcze nie ma tagów." } \ No newline at end of file diff --git a/public/language/pl/user.json b/public/language/pl/user.json index e28e3f637f..b0c031f94c 100644 --- a/public/language/pl/user.json +++ b/public/language/pl/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Co miesiąc", "send_chat_notifications": "Wyślij e-maila, jeśli dostanę nową wiadomość, a nie jestem on-line", "send_post_notifications": "Wyślij e-maila, kiedy wątki, które subskrybuję otrzymają odpowiedź", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Ten użytkownik nie ma jeszcze żadnych obserwujących", "follows_no_one": "Użytkownik jeszcze nikogo nie obsweruje.", "has_no_posts": "Użytkownik nie napisał jeszcze żadnych postów.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Odblokuj szukanie w wątku", "topic_search_help": "Jeśli odblokowane, szukanie w wątku zastąpi domyślną funkcję szukania przeglądarki, pozwalając na wyszukiwanie fraz tylko w wątku, a nie na całej stronie.", "follow_topics_you_reply_to": "Śledź tematy, w których piszesz.", - "follow_topics_you_create": "Śledź swoje tematy." + "follow_topics_you_create": "Śledź swoje tematy.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/pt_BR/error.json b/public/language/pt_BR/error.json index eba774d7af..cb218a3d43 100644 --- a/public/language/pt_BR/error.json +++ b/public/language/pt_BR/error.json @@ -18,7 +18,7 @@ "username-taken": "Nome de usuário já existe", "email-taken": "Email já cadastrado", "email-not-confirmed": "O seu email ainda não foi confirmado, por favor clique aqui para confirmar seu email.", - "email-not-confirmed-chat": "Você não pode usar o chat até que seu email seja confirmado", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Este fórum exige confirmação de email, por gentileza clique aqui para digitar um email", "email-confirm-failed": "Nós não pudemos confirmar seu email, por gentileza tente novamente mais tarde.", "username-too-short": "Nome de usuário muito curto", diff --git a/public/language/pt_BR/modules.json b/public/language/pt_BR/modules.json index 78dbe3d9d8..c899137cd6 100644 --- a/public/language/pt_BR/modules.json +++ b/public/language/pt_BR/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Meses", "composer.user_said_in": "%1 disse em %2:", "composer.user_said": "%1 disse:", - "composer.discard": "Tem certeza que deseja descartar essa postagem?" + "composer.discard": "Tem certeza que deseja descartar essa postagem?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/pt_BR/pages.json b/public/language/pt_BR/pages.json index 415f50c0fd..edcc280f4b 100644 --- a/public/language/pt_BR/pages.json +++ b/public/language/pt_BR/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Grupos", "user.favourites": "Posts Favoritos de %1", "user.settings": "Configurações de Usuário", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 está atualmente sob manutenção. Por favor retorne em outro momento.", "maintenance.messageIntro": "Adicionalmente, o administrador deixou esta mensagem:" } \ No newline at end of file diff --git a/public/language/pt_BR/tags.json b/public/language/pt_BR/tags.json index 5bba0fcd7a..1150d12f7f 100644 --- a/public/language/pt_BR/tags.json +++ b/public/language/pt_BR/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Não há tópicos com esta tag.", "tags": "Tags", - "enter_tags_here": "Digite as tags aqui. De %1 a %2 caracteres. Aperte enter após cada tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Digite tags...", "no_tags": "Ainda não há tags." } \ No newline at end of file diff --git a/public/language/pt_BR/user.json b/public/language/pt_BR/user.json index 86412afd5c..be3033d1c3 100644 --- a/public/language/pt_BR/user.json +++ b/public/language/pt_BR/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Mensalmente", "send_chat_notifications": "Enviar-me um email se uma nova mensagem de chat chegar quando eu não estiver online.", "send_post_notifications": "Enviar um email quando respostas forem dadas à tópicos que eu assino", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Este usuário não possui seguidores :(", "follows_no_one": "Este usuário não está seguindo ninguém :(", "has_no_posts": "Este usuário não postou nada ainda.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Habilitar Pesquisa dentro de Tópico", "topic_search_help": "Se habilitado, a pesquisa dentro de tópico irá substituir o funcionamento padrão de pesquisa de página do navegador e permitir que você pesquise pelo tópico todo, ao invés de apenas o que é mostrado na tela.", "follow_topics_you_reply_to": "Seguir tópicos que você responde.", - "follow_topics_you_create": "Seguir tópicos que você cria." + "follow_topics_you_create": "Seguir tópicos que você cria.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/ro/error.json b/public/language/ro/error.json index 51ad7c7cbc..1c60c0cf83 100644 --- a/public/language/ro/error.json +++ b/public/language/ro/error.json @@ -18,7 +18,7 @@ "username-taken": "Numele de utilizator este deja folosit", "email-taken": "Adresa de email este deja folostă", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Numele de utilizator este prea scurt", diff --git a/public/language/ro/modules.json b/public/language/ro/modules.json index 7c4f898389..585309d2ea 100644 --- a/public/language/ro/modules.json +++ b/public/language/ro/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Luni", "composer.user_said_in": "%1 a spus în %2:", "composer.user_said": "%1 a spus:", - "composer.discard": "Ești sigur că vrei să renunți la acest mesaj?" + "composer.discard": "Ești sigur că vrei să renunți la acest mesaj?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/ro/pages.json b/public/language/ro/pages.json index 141c5fb1df..86deca16e0 100644 --- a/public/language/ro/pages.json +++ b/public/language/ro/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "Mesajele favorite ale lui %1", "user.settings": "Setări Utilizator", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 este momentan în mentenanță. Întoarce-te în curând!", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/ro/tags.json b/public/language/ro/tags.json index 483efa66f6..59edbb0063 100644 --- a/public/language/ro/tags.json +++ b/public/language/ro/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Nu există nici un subiect cu acest tag.", "tags": "Taguri", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Introdu taguri...", "no_tags": "În acest moment nu există nici un tag." } \ No newline at end of file diff --git a/public/language/ro/user.json b/public/language/ro/user.json index 3fa30f4836..7c5abe0840 100644 --- a/public/language/ro/user.json +++ b/public/language/ro/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Lunar", "send_chat_notifications": "Trimite-mi un email dacă primesc un mesaj în chat si eu nu sunt online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Pe acest utilizator nu îl urmărește nimeni :(", "follows_no_one": "Acest utilizator nu urmărește pe nimeni :(", "has_no_posts": "Acest utilizator nu a postat nici un mesaj până acuma.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Urmărește subiectele în care ai răspuns.", - "follow_topics_you_create": "Urmărește subiectele care le creezi." + "follow_topics_you_create": "Urmărește subiectele care le creezi.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/ru/error.json b/public/language/ru/error.json index bca2535d19..e4be1447a2 100644 --- a/public/language/ru/error.json +++ b/public/language/ru/error.json @@ -18,7 +18,7 @@ "username-taken": "Имя пользователя занято", "email-taken": "Email занят", "email-not-confirmed": "Ваш email не подтвержден, нажмите для подтверждения.", - "email-not-confirmed-chat": "Вы не можете оставлять сообщения, пока Ваш email не подтверждён", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Этот форум требует подтверждения по E-mail. Нажмите здесь для ввода E-mail.", "email-confirm-failed": "Мы не можем подтвердить Ваш E-mail, попробуйте позже.", "username-too-short": "Слишком короткое имя пользователя", diff --git a/public/language/ru/modules.json b/public/language/ru/modules.json index 82611f15e7..c707341577 100644 --- a/public/language/ru/modules.json +++ b/public/language/ru/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 месяца", "composer.user_said_in": "%1 сказал %2:", "composer.user_said": "%1 сказал:", - "composer.discard": "Вы уверены, что хотите отказаться от этого поста?" + "composer.discard": "Вы уверены, что хотите отказаться от этого поста?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/ru/pages.json b/public/language/ru/pages.json index 9ad5cae0c2..b7b35fa25e 100644 --- a/public/language/ru/pages.json +++ b/public/language/ru/pages.json @@ -14,6 +14,7 @@ "user.groups": "Группы %1", "user.favourites": "Избранные сообщения %1", "user.settings": "Настройки", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 в настоящее время на обслуживании. Пожалуйста, возвращайтесь позже.", "maintenance.messageIntro": "Администратор оставил сообщение:" } \ No newline at end of file diff --git a/public/language/ru/tags.json b/public/language/ru/tags.json index 8b78464be4..e923cccf2c 100644 --- a/public/language/ru/tags.json +++ b/public/language/ru/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Нет топиков с таким тегом.", "tags": "Теги", - "enter_tags_here": "Укажите тэги здесь. %1-%2 символов(а). Нажимайте Enter после каждого тэга.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Введите теги...", "no_tags": "Здесь еще нет тегов." } \ No newline at end of file diff --git a/public/language/ru/user.json b/public/language/ru/user.json index 99be44abd6..12797aef20 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -60,6 +60,7 @@ "digest_monthly": "За месяц", "send_chat_notifications": "Уведомлять на E-mail при поступлении нового сообщения чата, когда я оффлайн", "send_post_notifications": "Отправлять email, когда отвечают в темы, на которые я подписан(а)", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Этого пользователя никто не читает :(", "follows_no_one": "Этот пользователь никого не читает :(", "has_no_posts": "Этот пользователь еще ничего не написал.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Активировать поиск внутри тем", "topic_search_help": "Если включено, то стандартный \"Поиск на странице\" Вашего браузера будет осуществлять поиск по всей теме вместо одной её страницы.", "follow_topics_you_reply_to": "Следить за темами, в которых Вы отвечали.", - "follow_topics_you_create": "Следить за темами, которые Вы создали." + "follow_topics_you_create": "Следить за темами, которые Вы создали.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/sc/error.json b/public/language/sc/error.json index e0700f76c4..17465a20a3 100644 --- a/public/language/sc/error.json +++ b/public/language/sc/error.json @@ -18,7 +18,7 @@ "username-taken": "Username taken", "email-taken": "Email taken", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", diff --git a/public/language/sc/modules.json b/public/language/sc/modules.json index f24225a4ce..c34b686af0 100644 --- a/public/language/sc/modules.json +++ b/public/language/sc/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Months", "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.discard": "Are you sure you wish to discard this post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/sc/pages.json b/public/language/sc/pages.json index 0f846179c3..f087a77706 100644 --- a/public/language/sc/pages.json +++ b/public/language/sc/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "Arresonos Preferidos de %1", "user.settings": "Sèberos de Impitadore", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/sc/tags.json b/public/language/sc/tags.json index aa9f14c70c..c416d8d4ec 100644 --- a/public/language/sc/tags.json +++ b/public/language/sc/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/sc/user.json b/public/language/sc/user.json index b083df5e52..01f88d738a 100644 --- a/public/language/sc/user.json +++ b/public/language/sc/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Monthly", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Custu impitadore non tenet perunu sighidore :(", "follows_no_one": "Custu impitadore no est sighende nissunu :(", "has_no_posts": "Custu impitadore no at ancora publicadu nudda.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_create": "Follow topics you create.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/sk/error.json b/public/language/sk/error.json index 069d7b8deb..93c15ed553 100644 --- a/public/language/sk/error.json +++ b/public/language/sk/error.json @@ -18,7 +18,7 @@ "username-taken": "Užívateľske meno je obsadené", "email-taken": "Email je obsadený", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", diff --git a/public/language/sk/modules.json b/public/language/sk/modules.json index 335723bb7a..e8a242aba7 100644 --- a/public/language/sk/modules.json +++ b/public/language/sk/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Months", "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.discard": "Are you sure you wish to discard this post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/sk/pages.json b/public/language/sk/pages.json index c54ac7e71f..bbf7ebeebb 100644 --- a/public/language/sk/pages.json +++ b/public/language/sk/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1's obľubených príspevkov", "user.settings": "Užívatelské nadstavenie", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" } \ No newline at end of file diff --git a/public/language/sk/tags.json b/public/language/sk/tags.json index aa9f14c70c..c416d8d4ec 100644 --- a/public/language/sk/tags.json +++ b/public/language/sk/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/sk/user.json b/public/language/sk/user.json index 48aa4ec144..db1541864f 100644 --- a/public/language/sk/user.json +++ b/public/language/sk/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Mesačne", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Tohoto užívatela nikto nesleduje :(", "follows_no_one": "Tento užívateľ nikoho nesleduje :(", "has_no_posts": "Tento používateľ ešte nespravil príspevok", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_create": "Follow topics you create.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 8f8c577d0d..99879a3388 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -18,7 +18,7 @@ "username-taken": "Användarnamn upptaget", "email-taken": "Epostadress upptagen", "email-not-confirmed": "Din epostadress är ännu inte bekräftad. Klicka här för att bekräfta din epostadress.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Användarnamnet är för kort", diff --git a/public/language/sv/modules.json b/public/language/sv/modules.json index cb61fddae5..05d12e9247 100644 --- a/public/language/sv/modules.json +++ b/public/language/sv/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Månader", "composer.user_said_in": "%1 sa i %2:", "composer.user_said": "%1 sa:", - "composer.discard": "Är du säker på att du vill förkasta det här inlägget?" + "composer.discard": "Är du säker på att du vill förkasta det här inlägget?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/sv/pages.json b/public/language/sv/pages.json index f7a4904a84..61fb23b776 100644 --- a/public/language/sv/pages.json +++ b/public/language/sv/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "%1's favorit-inlägg", "user.settings": "Avnändarinställningar", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 genomgår underhåll just nu. Vänligen kom tillbaka lite senare.", "maintenance.messageIntro": "Ytterligare så lämnade administratören detta meddelande:" } \ No newline at end of file diff --git a/public/language/sv/tags.json b/public/language/sv/tags.json index fffe39ea0a..d846962ea4 100644 --- a/public/language/sv/tags.json +++ b/public/language/sv/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Det finns inga ämnen med detta märkord.", "tags": "Märkord", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Ange taggar...", "no_tags": "Det finns inga märkord ännu." } \ No newline at end of file diff --git a/public/language/sv/user.json b/public/language/sv/user.json index 6a773c45b4..14ceb0336a 100644 --- a/public/language/sv/user.json +++ b/public/language/sv/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Månadsvis", "send_chat_notifications": "Skicka ett epostmeddelande om nya chatt-meddelanden tas emot när jag inte är online.", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Denna användare har inga följare :(", "follows_no_one": "Denna användare följer ingen :(", "has_no_posts": "Denna användare har inte gjort några inlägg än.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Aktivera Sökning Inom Ämne", "topic_search_help": "Om aktiverat kommer sökning inom ämne överskrida webbläsarens vanliga sid-sökfunktion och tillåta dig att söka genom hela ämnet istället för det som endast visas på skärmen.", "follow_topics_you_reply_to": "Följ ämnen so du svarat på.", - "follow_topics_you_create": "Följ ämnen du skapat." + "follow_topics_you_create": "Följ ämnen du skapat.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/th/error.json b/public/language/th/error.json index e265b9cb24..7a46ebaa65 100644 --- a/public/language/th/error.json +++ b/public/language/th/error.json @@ -18,7 +18,7 @@ "username-taken": "ชื่อผู้ใช้นี้มีการใช้แล้ว", "email-taken": "อีเมลนี้มีการใช้แล้ว", "email-not-confirmed": "ยังไม่มีการยืนยันอีเมลของคุณ, โปรดกดยืนยันอีเมลของคุณตรงนี้", - "email-not-confirmed-chat": "คุณไม่สามารถแชทได้ จนกว่าจะได้รับการยืนยันอีเมล", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Forum นี้ต้องการการยืนยันอีเมล กรุณากดที่นี่เพื่อระบุอีเมล", "email-confirm-failed": "เราไม่สามารถยืนยันอีเมลของคุณ ณ ขณะนี้ กรุณาลองใหม่อีกครั้งภายหลัง", "username-too-short": "ชื่อบัญชีผู้ใช้ สั้นเกินไป", diff --git a/public/language/th/modules.json b/public/language/th/modules.json index c3ea23f0e2..21cb9a564d 100644 --- a/public/language/th/modules.json +++ b/public/language/th/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Months", "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.discard": "Are you sure you wish to discard this post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/th/pages.json b/public/language/th/pages.json index 4b4998d3bd..91fe3f989a 100644 --- a/public/language/th/pages.json +++ b/public/language/th/pages.json @@ -14,6 +14,7 @@ "user.groups": "กลุ่มของ %1", "user.favourites": "กระทู้ที่ %1 ชอบ", "user.settings": "ตั้งค่าผู้ใช้", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 กำลังอยู่ระหว่างการปิดปรับปรุงชั่วคราว กรุณาลองใหม่อีกครั้งในภายหลัง", "maintenance.messageIntro": "ผู้ดูแลระบบได้ฝากข้อความต่อไปนี้เอาไว้" } \ No newline at end of file diff --git a/public/language/th/tags.json b/public/language/th/tags.json index bdb45d5eef..e8bf52df2e 100644 --- a/public/language/th/tags.json +++ b/public/language/th/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "ไม่มีหัวข้อสนทนาที่เกี่ยวข้องกับป้ายคำศัพท์นี้", "tags": "ป้ายคำศัพท์", - "enter_tags_here": "ใส่ Tags ตรงนี้ได้ทั้งหมด %1-%2 ตัวอักษร และกรุณากดปุ่ม Enter ทุกครั้งเมื่อต้องการเพิ่ม Tag ใหม่", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "ใส่ป้ายคำศัพท์ ...", "no_tags": "ยังไม่มีป้ายคำศัพท์" } \ No newline at end of file diff --git a/public/language/th/user.json b/public/language/th/user.json index 0e8de83da7..5fc906103c 100644 --- a/public/language/th/user.json +++ b/public/language/th/user.json @@ -60,6 +60,7 @@ "digest_monthly": "รายเดือน", "send_chat_notifications": "ส่งอีเมลเมื่อมีข้อความใหม่เข้ามาขณะที่ฉันไม่ได้ออนไลน์", "send_post_notifications": "ส่งอีเมลให้ฉันเมื่อมีการตอบกลับในหัวข้อที่ฉันเคยบอกรับเป็นสมาชิกไว้", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "ผู้ใช้รายนี้ไม่มีใครติดตาม :(", "follows_no_one": "ผู้ใช้รายนี้ไม่ติดตามใคร :(", "has_no_posts": "ผู้ใช้รายนี้ไม่ได้โพสต์อะไรเลย", @@ -76,5 +77,6 @@ "enable_topic_searching": "เปิดใช้การค้นหาแบบ In-Topic", "topic_search_help": "เมื่อการค้นหาแบบ In-Topic ถูกเปิดใช้งาน การค้นหาแบบ In-Topic จะทำงานแทนการค้นหาในรูปแบบเดิม ซึ่งช่วยให้คุณสามารถทำการค้นหาจาก Topic ทั้งหมด เพิ่มเติมจากที่คุณกำลังเห็นอยู่บนหน้าจอ", "follow_topics_you_reply_to": "ติดตามกระทู้ที่คุณตอบ", - "follow_topics_you_create": "ติดตามกระทู้ที่คุณตั้ง" + "follow_topics_you_create": "ติดตามกระทู้ที่คุณตั้ง", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/tr/error.json b/public/language/tr/error.json index d54bbce50a..475b93ac94 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -18,7 +18,7 @@ "username-taken": "Kullanıcı İsmi Alınmış", "email-taken": "E-posta Alınmış", "email-not-confirmed": "E-postanız onaylanmamış, onaylamak için lütfen buraya tıklayın.", - "email-not-confirmed-chat": "Email adresiniz doğrulanmadan sohbet edemezsiniz.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "Bu forum e-posta doğrulaması gerektirir, lütfen buraya bir e-posta adresi girin", "email-confirm-failed": "E-posta adresinizi doğrulayamıyoruz. Lütfen daha sonra tekrar deneyin.", "username-too-short": "Kullanıcı ismi çok kısa", diff --git a/public/language/tr/modules.json b/public/language/tr/modules.json index 361e6deb48..af25aa3d20 100644 --- a/public/language/tr/modules.json +++ b/public/language/tr/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 Ay", "composer.user_said_in": "%1 %2 içinde söyledi:", "composer.user_said": "%1 söyledi:", - "composer.discard": "Bu iletiyi iptal etmek istediğinizden eminmisiniz?" + "composer.discard": "Bu iletiyi iptal etmek istediğinizden eminmisiniz?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/tr/pages.json b/public/language/tr/pages.json index 5171f4232f..84f3ef0148 100644 --- a/public/language/tr/pages.json +++ b/public/language/tr/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1 Kişisine Ait Gruplar", "user.favourites": "%1'in Favori İletileri", "user.settings": "Kullanıcı Ayarları", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 şu anda bakımda. Lütfen bir süre sonra tekrar deneyin.", "maintenance.messageIntro": "Ayrıca, yönetici şu mesaji bıraktı:" } \ No newline at end of file diff --git a/public/language/tr/tags.json b/public/language/tr/tags.json index 344a4bfff6..9f614ce38c 100644 --- a/public/language/tr/tags.json +++ b/public/language/tr/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Bu etiketli başlık yok.", "tags": "Etiketler", - "enter_tags_here": "Etiketleri buraya girin. %1-%2 karakter. Her etiketten sonra enter tuşuna basın.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Etiketleri gir...", "no_tags": "Henüz etiket yok." } \ No newline at end of file diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 8fa7b4c5c9..cfca7130fb 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Aylık", "send_chat_notifications": "Çevrimiçi değilken gelen iletileri e-posta olarak gönder", "send_post_notifications": "Abone olduğum konulara cevap gelince bana eposta yolla", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Bu kullanıcının hiç takipçisi yok :(", "follows_no_one": "Bu kullanıcı kimseyi takip etmiyor :(", "has_no_posts": "Bu kullanıcı henüz birşey göndermedi.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Konu içi aramayı aktive et", "topic_search_help": "Aktive edilirse, konu içi arama tarayıcının normal arama davranışını değiştirerek tüm konuyu aramanızı sağlar.", "follow_topics_you_reply_to": "İleti gönderdiğim konuları takip et.", - "follow_topics_you_create": "Kendi yarattığım konuları takip et." + "follow_topics_you_create": "Kendi yarattığım konuları takip et.", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/vi/error.json b/public/language/vi/error.json index 56d5a49788..5a9d22c3ee 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -18,7 +18,7 @@ "username-taken": "Tên đăng nhập đã tồn tại", "email-taken": "Email đã được đăng kí", "email-not-confirmed": "Email của bạn chưa được xác nhận, xin hãy nhấn vào đây để xác nhận địa chỉ này là của bạn", - "email-not-confirmed-chat": "Bạn không thể trò chuyện cho đến khi thư điện tử của bạn được xác nhận", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Tên đăng nhập quá ngắn", diff --git a/public/language/vi/modules.json b/public/language/vi/modules.json index 81ca0692b5..ecf53d1f0f 100644 --- a/public/language/vi/modules.json +++ b/public/language/vi/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3 tháng", "composer.user_said_in": "%1 đã nói trong %2:", "composer.user_said": "%1 đã nói:", - "composer.discard": "Bạn có chắc chắn hủy bỏ bài viết này?" + "composer.discard": "Bạn có chắc chắn hủy bỏ bài viết này?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/vi/pages.json b/public/language/vi/pages.json index 153a1f31d8..717907a267 100644 --- a/public/language/vi/pages.json +++ b/public/language/vi/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1's Groups", "user.favourites": "Các bài gửi yêu thích của %1", "user.settings": "Thiết lập cho người dùng", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 đang được bảo trì. Xin vui lòng quay lại sau.", "maintenance.messageIntro": "Ban quản lí để lại lời nhắn sau:" } \ No newline at end of file diff --git a/public/language/vi/tags.json b/public/language/vi/tags.json index 68f5639c02..7b8931883f 100644 --- a/public/language/vi/tags.json +++ b/public/language/vi/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Không có bài viết nào với thẻ này.", "tags": "Thẻ", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Tên thẻ...", "no_tags": "Chưa có thẻ nào." } \ No newline at end of file diff --git a/public/language/vi/user.json b/public/language/vi/user.json index a9ee90df9f..64fa5b6cdd 100644 --- a/public/language/vi/user.json +++ b/public/language/vi/user.json @@ -60,6 +60,7 @@ "digest_monthly": "Hàng tháng", "send_chat_notifications": "Gửi một email nếu có tin nhắn chat mới đến và tôi không online", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Người dùng này hiện chưa có ai theo dõi :(", "follows_no_one": "Người dùng này hiện chưa theo dõi ai :(", "has_no_posts": "Người dùng này chưa viết bài nào", @@ -76,5 +77,6 @@ "enable_topic_searching": "Bật In-topic Searching", "topic_search_help": "Nếu được bật, in-topic searching sẽ thay thế tính năng tìm kiếu mặc định của trình duyệt và giúp bạn tìm trong toàn bộ nội dung bài viết, thay vì chỉ tìm trong những gì đang có trên màn hình.", "follow_topics_you_reply_to": "Theo dõi chủ đề mà bạn trả lời", - "follow_topics_you_create": "Theo dõi chủ đề bạn tạo" + "follow_topics_you_create": "Theo dõi chủ đề bạn tạo", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/zh_CN/error.json b/public/language/zh_CN/error.json index b156a96793..0488353541 100644 --- a/public/language/zh_CN/error.json +++ b/public/language/zh_CN/error.json @@ -18,7 +18,7 @@ "username-taken": "用户名已被占用", "email-taken": "电子邮箱已被占用", "email-not-confirmed": "您的电子邮箱尚未确认,请点击这里确认您的电子邮箱。", - "email-not-confirmed-chat": "在确认您的邮箱之前,您不能使用聊天功能", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "本论坛需要电子邮箱确认,请点击这里输入一个电子邮箱地址", "email-confirm-failed": "我们无法确认您的电子邮箱,请重试", "username-too-short": "用户名太短", diff --git a/public/language/zh_CN/modules.json b/public/language/zh_CN/modules.json index 0049c202be..e309d83bbc 100644 --- a/public/language/zh_CN/modules.json +++ b/public/language/zh_CN/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3个月", "composer.user_said_in": "%1 在 %2 中说:", "composer.user_said": "%1 说:", - "composer.discard": "确定想要取消此帖?" + "composer.discard": "确定想要取消此帖?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/zh_CN/pages.json b/public/language/zh_CN/pages.json index 6fde75dfe5..298f183f74 100644 --- a/public/language/zh_CN/pages.json +++ b/public/language/zh_CN/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1 的用户组", "user.favourites": "%1 收藏的帖子", "user.settings": "用户设置", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 正在进行维护。请稍后再来。", "maintenance.messageIntro": "此外,管理员留下的消息:" } \ No newline at end of file diff --git a/public/language/zh_CN/tags.json b/public/language/zh_CN/tags.json index 0a28387e37..9802f9c79a 100644 --- a/public/language/zh_CN/tags.json +++ b/public/language/zh_CN/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "此话题还没有主题帖。", "tags": "话题", - "enter_tags_here": "在这里输入标签: %1 - %2 个字符。每个标签输入完后请按Enter。", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "输入话题...", "no_tags": "尚无话题。" } \ No newline at end of file diff --git a/public/language/zh_CN/user.json b/public/language/zh_CN/user.json index 6c360a4d4e..6d29052981 100644 --- a/public/language/zh_CN/user.json +++ b/public/language/zh_CN/user.json @@ -60,6 +60,7 @@ "digest_monthly": "每月", "send_chat_notifications": "当我不在线,并受到新的聊天消息时给我发邮件", "send_post_notifications": "我订阅的主题有回复时发送邮件", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "此用户还没有粉丝 :(", "follows_no_one": "此用户尚未关注任何人 :(", "has_no_posts": "此用户尚未发布任何帖子。", @@ -76,5 +77,6 @@ "enable_topic_searching": "启用主题内搜索", "topic_search_help": "启用后,主题内搜索会替代浏览器默认的页面搜索,你可以在整个主题的全部内容进行搜索,而不是仅限于屏幕显示的内容。", "follow_topics_you_reply_to": "关注您回复的主题。", - "follow_topics_you_create": "关注您创建的主题。" + "follow_topics_you_create": "关注您创建的主题。", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file diff --git a/public/language/zh_TW/error.json b/public/language/zh_TW/error.json index 9efb1e5ec1..3aae7dd5bc 100644 --- a/public/language/zh_TW/error.json +++ b/public/language/zh_TW/error.json @@ -18,7 +18,7 @@ "username-taken": "該使用者名稱已被使用", "email-taken": "該信箱已被使用", "email-not-confirmed": "您的電郵尚未得到確認,請點擊此處確認您的電子郵件。", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "用戶名太短", diff --git a/public/language/zh_TW/modules.json b/public/language/zh_TW/modules.json index ff6d2488f4..3e7d758914 100644 --- a/public/language/zh_TW/modules.json +++ b/public/language/zh_TW/modules.json @@ -17,5 +17,6 @@ "chat.three_months": "3個月", "composer.user_said_in": "%1在%2裡說:", "composer.user_said": "%1說:", - "composer.discard": "你確定要放棄這帖子嗎?" + "composer.discard": "你確定要放棄這帖子嗎?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/zh_TW/pages.json b/public/language/zh_TW/pages.json index e6dacb8327..20af148f85 100644 --- a/public/language/zh_TW/pages.json +++ b/public/language/zh_TW/pages.json @@ -14,6 +14,7 @@ "user.groups": "%1 的群組", "user.favourites": "%1's 最喜愛的文章", "user.settings": "使用者設定", + "user.watched": "Topics watched by %1", "maintenance.text": "%1目前正在進行維修。請稍後再來。", "maintenance.messageIntro": "此外,管理員有以下信息:" } \ No newline at end of file diff --git a/public/language/zh_TW/tags.json b/public/language/zh_TW/tags.json index dc5c1601ba..ce9de5c88b 100644 --- a/public/language/zh_TW/tags.json +++ b/public/language/zh_TW/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "沒有此標籤的主題。", "tags": "標籤", - "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "輸入標籤...", "no_tags": "還沒有標籤呢。" } \ No newline at end of file diff --git a/public/language/zh_TW/user.json b/public/language/zh_TW/user.json index dce640ac75..008808ae6f 100644 --- a/public/language/zh_TW/user.json +++ b/public/language/zh_TW/user.json @@ -60,6 +60,7 @@ "digest_monthly": "每月", "send_chat_notifications": "如果有新的聊天消息而我不在線,發送郵件給我", "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "該用戶還沒有被任何人關注。", "follows_no_one": "該用戶還沒有關注過任何人。", "has_no_posts": "尚未有任何貼文.", @@ -76,5 +77,6 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "關注您回复的主題。", - "follow_topics_you_create": "關注您創建的主題。" + "follow_topics_you_create": "關注您創建的主題。", + "grouptitle": "Select the group title you would like to display" } \ No newline at end of file From 68cf6833b797b3555115abd812201f92a6d278dc Mon Sep 17 00:00:00 2001 From: cismous Date: Fri, 27 Mar 2015 23:59:39 +0800 Subject: [PATCH 159/172] remove unneeded argument --- src/topics/unread.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/topics/unread.js b/src/topics/unread.js index be4a548226..b9392d3eda 100644 --- a/src/topics/unread.js +++ b/src/topics/unread.js @@ -180,7 +180,7 @@ module.exports = function(Topics) { } var now = Date.now(); - var scores = tids.map(function(tid) { + var scores = tids.map(function() { return now; }); From 474b074c8f3a1cfc68b81828b29e29eb535500a8 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 27 Mar 2015 13:19:12 -0400 Subject: [PATCH 160/172] fix wrong post count on new post --- public/src/client/topic/posts.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 1e907bfca5..aefad81506 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -22,8 +22,8 @@ define('forum/topic/posts', [ } for (var i=0; i Date: Fri, 27 Mar 2015 13:30:09 -0400 Subject: [PATCH 161/172] added exposeUid middleware to core --- src/middleware/middleware.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 117929a629..b46376f590 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -518,6 +518,21 @@ middleware.exposeGroupName = function(req, res, next) { }); }; +middleware.exposeUid = function(req, res, next) { + if (req.params.hasOwnProperty('userslug')) { + user.getUidByUserslug(req.params.userslug, function(err, uid) { + if (err) { + return next(err); + } + + res.locals.uid = uid; + next(); + }) + } else { + next(); + } +}; + module.exports = function(webserver) { app = webserver; middleware.admin = require('./admin')(webserver); From 8d6d1c32e7cd466f938c2fd92e94ff2fd480f251 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 27 Mar 2015 14:01:54 -0400 Subject: [PATCH 162/172] allow plugins to update additional fields with filter:user.updateProfile --- src/user/profile.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/user/profile.js b/src/user/profile.js index 829c143505..f16046ee4a 100644 --- a/src/user/profile.js +++ b/src/user/profile.js @@ -15,14 +15,15 @@ var async = require('async'), module.exports = function(User) { User.updateProfile = function(uid, data, callback) { + var fields = ['username', 'email', 'fullname', 'website', 'location', 'birthday', 'signature']; - plugins.fireHook('filter:user.updateProfile', {uid: uid, settings: data}, function(err, data) { - if(err) { + plugins.fireHook('filter:user.updateProfile', {uid: uid, data: data, fields: fields}, function(err, data) { + if (err) { return callback(err); } - data = data.settings; - var fields = ['username', 'email', 'fullname', 'website', 'location', 'birthday', 'signature']; + fields = data.fields; + data = data.data; function isSignatureValid(next) { if (data.signature !== undefined && data.signature.length > meta.config.maximumSignatureLength) { From a3a0ba9bc3361fe0f7002b36e061051053004c92 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 27 Mar 2015 14:21:04 -0400 Subject: [PATCH 163/172] fix post count tmp fix for js error from helpers.js --- public/src/client/topic/posts.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index aefad81506..e82ab448f4 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -22,8 +22,8 @@ define('forum/topic/posts', [ } for (var i=0; i Date: Fri, 27 Mar 2015 14:21:27 -0400 Subject: [PATCH 164/172] helpers.js fix maybe --- public/src/modules/helpers.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index a0201ed6cc..042075e6a3 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -9,9 +9,6 @@ var helpers = {}; - var utils = utils || require('../utils'), - S = S || require('string'); - helpers.displayMenuItem = function(data, index) { var item = data.navigation[index], properties = item.properties; @@ -47,10 +44,12 @@ }; helpers.escape = function(str) { + var utils = utils || require('../utils'); return utils.escapeHTML(str); }; helpers.stripTags = function(str) { + var S = S || require('string'); return S(str).stripTags().s; }; From fccfc5307bda3adc1049ca100f34844101931c54 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 27 Mar 2015 16:27:28 -0400 Subject: [PATCH 165/172] fix commas --- public/src/client/topic/posts.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index e82ab448f4..070a97fa5b 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -24,6 +24,7 @@ define('forum/topic/posts', [ for (var i=0; i Date: Fri, 27 Mar 2015 20:37:42 -0400 Subject: [PATCH 166/172] latest dutch translations --- public/language/nl/category.json | 2 +- public/language/nl/email.json | 10 ++-- public/language/nl/error.json | 34 ++++++------- public/language/nl/global.json | 12 ++--- public/language/nl/groups.json | 44 ++++++++--------- public/language/nl/login.json | 4 +- public/language/nl/modules.json | 2 +- public/language/nl/notifications.json | 2 +- public/language/nl/pages.json | 4 +- public/language/nl/recent.json | 14 +++--- public/language/nl/reset_password.json | 4 +- public/language/nl/search.json | 68 +++++++++++++------------- public/language/nl/tags.json | 2 +- public/language/nl/topic.json | 2 +- public/language/nl/user.json | 12 ++--- public/language/nl/users.json | 2 +- 16 files changed, 109 insertions(+), 109 deletions(-) diff --git a/public/language/nl/category.json b/public/language/nl/category.json index bee6530395..fe05622fbb 100644 --- a/public/language/nl/category.json +++ b/public/language/nl/category.json @@ -1,6 +1,6 @@ { "new_topic_button": "Nieuw onderwerp", - "guest-login-post": "Log in to post", + "guest-login-post": "Log in om een reactie te plaatsen", "no_topics": "Er zijn geen onderwerpen in deze categorie.
    Waarom maak je er niet een aan?", "browsing": "verkennen", "no_replies": "Niemand heeft gereageerd", diff --git a/public/language/nl/email.json b/public/language/nl/email.json index a1f26cd2ea..18d7ab4a97 100644 --- a/public/language/nl/email.json +++ b/public/language/nl/email.json @@ -9,9 +9,9 @@ "reset.text1": "Wij ontvingen een verzoek van u om uw wachtwoord te resetten. Als dat niet het geval is, kunt u deze mail negeren ", "reset.text2": "Om uw wachtwoord te resetten, klik op de volgende link", "reset.cta": "Klik hier om u wachtwoord te resetten", - "reset.notify.subject": "Password successfully changed", - "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", - "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "reset.notify.subject": "Wachtwoord succesvol veranderd", + "reset.notify.text1": "Wij brengen u bij deze op de hoogte that uw wachtwoord succesvol is gewijzigd op %1.", + "reset.notify.text2": "Neem contact op met een administrator als u hier geen toestemming voor gegeven heeft.", "digest.notifications": "U heeft ongelezen notificaties van %1:", "digest.latest_topics": "De laatste onderwerpen van %1", "digest.cta": "Klik hier om deze website te bezoeken %1 ", @@ -20,8 +20,8 @@ "notif.chat.subject": "U heeft een chatbericht ontvangen van %1", "notif.chat.cta": "Klik hier om het gesprek te hervatten", "notif.chat.unsub.info": "Deze chat notificatie was verzonden naar jou vanwege je abbonement instellingen", - "notif.post.cta": "Click here to read the full topic", - "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", + "notif.post.cta": "Klik hier om het volledige bericht te lezen", + "notif.post.unsub.info": "Deze bericht notificatie werd naar u verstuurd wegens uw abonnement instellingen.", "test.text1": "Dit is een test email om te verifiëren dat de email service correct is opgezet voor jou NodeBB", "unsub.cta": "Klik hier om u instellingen te wijzigen", "closing": "Bedankt!" diff --git a/public/language/nl/error.json b/public/language/nl/error.json index 0cf9673d48..e6be514a63 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -18,9 +18,9 @@ "username-taken": "Gebruikersnaam is al bezet", "email-taken": "Email adres is al gebruikt", "email-not-confirmed": "U email adres is niet bevestigd, Klik hier om uw email adres te bevestigen", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", - "email-confirm-failed": "We could not confirm your email, please try again later.", + "email-not-confirmed-chat": "U kunt helaas geen gebruik maken van chats tot uw email adres bevestigd is.", + "no-email-to-confirm": "Dit forum vereist email bevestiging, klikt u alstublieft hier om uw email te vermelden", + "email-confirm-failed": "Uw email kon helaas niet bevestigd worden, probeert u het alstublieft later nog eens.", "username-too-short": "Gebruikersnaam is te kort", "username-too-long": "Gebruikersnaam is te lang", "user-banned": "Gebruiker verbannen", @@ -35,29 +35,29 @@ "no-emailers-configured": "Er zijn geen email plugins geladen, een test email kan dus niet verzonden worden", "category-disabled": "Categorie uitgeschakeld", "topic-locked": "Onderwerp gesloten", - "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", + "post-edit-duration-expired": "Het is niet toegestaan om berichten aan te passen tot %1 seconden na het plaatsen", "still-uploading": "Heb even geduld totdat de alle bestanden geüpload zijn", - "content-too-short": "Maak de bericht alsjeblieft wat langer. Op z'n minst %1 karakters", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", + "content-too-short": "Maak de bericht alstublieft wat langer. Op z'n minst %1 karakters", + "content-too-long": "Maakt u het bericht alstublieft wat korter. Berichten mogen niet langer zijn dan %1 karakters.", "title-too-short": "Maak de titel wat langer. Op z'n minst %1 karakters", "title-too-long": "Maak de titel wat korter. Het kan niet langer zijn dan %1 karakters", "too-many-posts": "Je kan eens in de %1 seconden een bericht aanmaken. Wacht alstublieft.", "too-many-posts-newbie": "Als een nieuwe gebruiker kan je maar om de %1 seconden een bericht plaatsen vanwege je reputatie. Uw moet deze level van reputatie verdienen %2. Wacht alstublieft met het plaatsen van uw bericht.", - "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", + "tag-too-short": "Maakt u alstublieft de tag iets langer. Tags dienen minimaal %1 karakters te bevatten", + "tag-too-long": "Maakt u alstublieft de tag iets korter. Tags mogen maximaal %1 karakters bevatten", "file-too-big": "De maximale bestandsgrootte is %1 kbs", "cant-vote-self-post": "Je kan niet op je eigen berichten stemmen", "already-favourited": "U heeft al dit bericht in uw favorieten staan", "already-unfavourited": "U heeft al dit bericht uit uw favorieten gehaald", "cant-ban-other-admins": "U kunt niet de andere admins bannen!", - "invalid-image-type": "Invalid image type. Allowed types are: %1", - "invalid-image-extension": "Invalid image extension", - "invalid-file-type": "Invalid file type. Allowed types are: %1", + "invalid-image-type": "Dit foto bestandstype is niet toegestaan. Toegestane foto bestandstypen zijn: %1", + "invalid-image-extension": "Ongeldige foto bestandsextensie", + "invalid-file-type": "Dit bestandstype is niet toegestaan. Toegestane bestandstypen zijn: %1", "group-name-too-short": "De groepsnaam is te kort", "group-already-exists": "Deze groep bestaat al", "group-name-change-not-allowed": "Het veranderen van de groepsnaam is niet toegestaan!", - "group-already-member": "You are already part of this group", - "group-needs-owner": "This group requires at least one owner", + "group-already-member": "U bent al lid van deze groep", + "group-needs-owner": "Deze groep vereist minimaal 1 eigenaar", "post-already-deleted": "Dit bericht is al verwijderd", "post-already-restored": "Dit bericht is al hersteld", "topic-already-deleted": "Deze topic is al verwijderd", @@ -68,14 +68,14 @@ "signature-too-long": "Sorry, maar deze handtekening kan niet groter zijn dan %1 karakters!", "cant-chat-with-yourself": "Je kan niet met jezelf chatten!", "chat-restricted": "Deze gebruiker heeft beperkingen gelegd op chatfunctie. Hun moeten jouw volgen voordat je met hun kan chatten", - "too-many-messages": "You have sent too many messages, please wait awhile.", + "too-many-messages": "U heeft teveel berichten verstuurd in een korte tijd. Wacht u alstublieft even.", "reputation-system-disabled": "Reputatie systeem is uitgeschakeld", "downvoting-disabled": "Downvoten is uitgeschakeld", "not-enough-reputation-to-downvote": "U heeft niet de benodigde reputatie om dit bericht te downvoten", "not-enough-reputation-to-flag": "U heeft niet de benodigde reputatie om dit bericht te melden aan de admins", "reload-failed": "NodeBB heeft een probleem geconstateerd tijdens het laden van: \"%1\".\nNodeBB blijft verder draaien. Het is wel verstandig om de actie wat u daarvoor heeft gedaan ongedaan te maken door te herladen.", "registration-error": "Registratie fout", - "parse-error": "Something went wrong while parsing server response", - "wrong-login-type-email": "Please use your email to login", - "wrong-login-type-username": "Please use your username to login" + "parse-error": "Er is iets fout gegaan tijdens het parsen van de server response", + "wrong-login-type-email": "Gebruikt u alstublieft uw email om in te loggen", + "wrong-login-type-username": "Gebruikt u alstublieft uw gebruikersnaam om in te loggen" } \ No newline at end of file diff --git a/public/language/nl/global.json b/public/language/nl/global.json index 84899903b0..bea96ad2b4 100644 --- a/public/language/nl/global.json +++ b/public/language/nl/global.json @@ -3,10 +3,10 @@ "search": "Zoeken", "buttons.close": "Sluiten", "403.title": "Toegang Geweigerd", - "403.message": "You seem to have stumbled upon a page that you do not have access to.", - "403.login": "Perhaps you should try logging in?", + "403.message": "Het lijkt er op dat u op een pagina bent beland waar u geen toegang tot heeft.", + "403.login": "Misschien moet u proberen in te loggen?", "404.title": "Niet Gevonden", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "Het lijkt er op dat u op een pagina bent beland die niet bestaat. Ga terug naar de home pagina.", "500.title": "Interne fout.", "500.message": "Oeps! Het lijkt erop dat iets is fout gegaan!", "register": "Registeren", @@ -27,7 +27,7 @@ "header.tags": "Tags", "header.popular": "Populair", "header.users": "Gebruikers", - "header.groups": "Groups", + "header.groups": "Groepen", "header.chats": "Chats", "header.notifications": "Notificaties", "header.search": "Zoeken", @@ -75,7 +75,7 @@ "updated.title": "Forum geüpdatet", "updated.message": "Dit forum is zojuist geüpdatet naar de laatste versie. Klik hier om de pagina te verversen", "privacy": "Privé", - "follow": "Follow", - "unfollow": "Unfollow", + "follow": "Volgen", + "unfollow": "Ontvolgen", "delete_all": "Alles verwijderen" } \ No newline at end of file diff --git a/public/language/nl/groups.json b/public/language/nl/groups.json index 9fe5c00975..67f21acd2b 100644 --- a/public/language/nl/groups.json +++ b/public/language/nl/groups.json @@ -3,32 +3,32 @@ "view_group": "Bekijk Groep", "owner": "Groep eigenaar", "new_group": "Maak een nieuwe groep", - "no_groups_found": "There are no groups to see", - "pending.accept": "Accept", - "pending.reject": "Reject", - "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", - "cover-change": "Change", + "no_groups_found": "Er zijn geen groepen om weer te geven", + "pending.accept": "Accepteer", + "pending.reject": "Afwijzen", + "cover-instructions": "Sleep een foto, positioneer en klik op Opslaan", + "cover-change": "Aanpassen", "cover-save": "Opslaan", "cover-saving": "Bezig met opslaan", "details.title": "Groep Details", "details.members": "Ledenlijst", - "details.pending": "Pending Members", + "details.pending": "Afwachtende leden", "details.has_no_posts": "Deze groepleden hebben nog geen berichten geplaatst", "details.latest_posts": "Nieuwste Berichten", - "details.private": "Private", - "details.grant": "Grant/Rescind Ownership", - "details.kick": "Kick", - "details.owner_options": "Group Administration", - "details.group_name": "Group Name", - "details.description": "Description", - "details.badge_preview": "Badge Preview", - "details.change_icon": "Change Icon", - "details.change_colour": "Change Colour", - "details.badge_text": "Badge Text", - "details.userTitleEnabled": "Show Badge", - "details.private_help": "If enabled, joining of groups requires approval from a group owner", - "details.hidden": "Hidden", - "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", - "event.updated": "Group details have been updated", - "event.deleted": "The group \"%1\" has been deleted" + "details.private": "Prive", + "details.grant": "Toekennen/Herroepen van eigenaarschap", + "details.kick": "Verwijder", + "details.owner_options": "Groeps Administratie", + "details.group_name": "Groepsnaam", + "details.description": "Beschrijving", + "details.badge_preview": "Badge Voorvertoning", + "details.change_icon": "Icoon veranderen", + "details.change_colour": "Kleur veranderen", + "details.badge_text": "Badge tekst", + "details.userTitleEnabled": "Badge tonen", + "details.private_help": "Indien geactiveerd, zal er goedkeuring moeten worden verleend door een groepseigenaar voor het toetreden van groepen", + "details.hidden": "Verborgen", + "details.hidden_help": "Indien geactiveerd zal deze groep niet getoond worden in de groepslijst en zullen gebruikers handmatig uitgenodigd moeten worden.", + "event.updated": "Groepsdetails zijn geupdate", + "event.deleted": "De groep \"%1\" is verwijderd" } \ No newline at end of file diff --git a/public/language/nl/login.json b/public/language/nl/login.json index ec75667e86..fa1c5bf8eb 100644 --- a/public/language/nl/login.json +++ b/public/language/nl/login.json @@ -1,6 +1,6 @@ { - "username-email": "Username / Email", - "username": "Username", + "username-email": "Gebruikersnaam / Email", + "username": "Gebruikersnaam", "email": "Email", "remember_me": "Mij Onthouden?", "forgot_password": "Wachtwoord Vergeten?", diff --git a/public/language/nl/modules.json b/public/language/nl/modules.json index 6658c26cf7..4feffb4096 100644 --- a/public/language/nl/modules.json +++ b/public/language/nl/modules.json @@ -18,5 +18,5 @@ "composer.user_said_in": "%1 zegt in %2:", "composer.user_said": "%1 zegt:", "composer.discard": "Weet u het zeker dat u dit bericht niet wilt plaatsen?", - "composer.submit_and_lock": "Submit and Lock" + "composer.submit_and_lock": "Plaatsen en vergrendelen" } \ No newline at end of file diff --git a/public/language/nl/notifications.json b/public/language/nl/notifications.json index f0dc76c27f..4e5a599896 100644 --- a/public/language/nl/notifications.json +++ b/public/language/nl/notifications.json @@ -2,7 +2,7 @@ "title": "Notificaties", "no_notifs": "Je hebt geen nieuwe notificaties", "see_all": "Bekijk alle Notificaties", - "mark_all_read": "Mark all notifications read", + "mark_all_read": "Markeer alle meldingen als gelezen", "back_to_home": "Terug naar %1", "outgoing_link": "Uitgaande Link", "outgoing_link_message": "Je verlaat nu %1", diff --git a/public/language/nl/pages.json b/public/language/nl/pages.json index e515c28035..3f6abeb9af 100644 --- a/public/language/nl/pages.json +++ b/public/language/nl/pages.json @@ -11,10 +11,10 @@ "user.followers": "Mensen die %1 Volgen", "user.posts": "Berichten geplaatst door %1", "user.topics": "Topics gecreëerd door %1", - "user.groups": "%1's Groups", + "user.groups": "%1's groepen", "user.favourites": "%1's Favoriete Berichten", "user.settings": "Gebruikersinstellingen", - "user.watched": "Topics watched by %1", + "user.watched": "Berichten die worden bekeken door %1", "maintenance.text": "%1 is momenteel in onderhoud modus. Probeer later opnieuw", "maintenance.messageIntro": "daarnaast heeft de administrator het volgende bericht achtergelaten:" } \ No newline at end of file diff --git a/public/language/nl/recent.json b/public/language/nl/recent.json index e2f3471de6..887a149da0 100644 --- a/public/language/nl/recent.json +++ b/public/language/nl/recent.json @@ -6,14 +6,14 @@ "year": "Jaar", "alltime": "Intussen", "no_recent_topics": "Er zijn geen recente reacties.", - "no_popular_topics": "There are no popular topics.", + "no_popular_topics": "Er zijn geen populaire onderwerpen.", "there-is-a-new-topic": "Er is een nieuw onderwerp", - "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-a-new-post": "Er is een nieuw onderwerp en een nieuw bericht.", "there-is-a-new-topic-and-new-posts": "Er is een nieuwe onderwerp en %1 nieuwe berichten", "there-are-new-topics": "Er zijn %1 nieuwe onderwerpen", - "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", - "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", - "there-is-a-new-post": "There is a new post.", - "there-are-new-posts": "There are %1 new posts.", - "click-here-to-reload": "Click here to reload." + "there-are-new-topics-and-a-new-post": "Er zijn %1 nieuwe onderwerpen en een nieuw bericht.", + "there-are-new-topics-and-new-posts": "Er zijn %1 nieuwe onderwerpen en %2 nieuwe berichten.", + "there-is-a-new-post": "Er is een nieuw bericht.", + "there-are-new-posts": "Er zijn %1 nieuwe berichten.", + "click-here-to-reload": "Klik hier om te herladen." } \ No newline at end of file diff --git a/public/language/nl/reset_password.json b/public/language/nl/reset_password.json index 2bac7d3849..1813eab2fe 100644 --- a/public/language/nl/reset_password.json +++ b/public/language/nl/reset_password.json @@ -11,6 +11,6 @@ "enter_email_address": "Vul uw Email Adres in", "password_reset_sent": "Wachtwoord Reset Verzonden", "invalid_email": "Fout Email Adres / Email Adres bestaat niet!", - "password_too_short": "The password entered is too short, please pick a different password.", - "passwords_do_not_match": "The two passwords you've entered do not match." + "password_too_short": "Het ingegeven wachtwoord is te kort. Kiest u alstublieft een ander wachtwoord.", + "passwords_do_not_match": "De twee wachtwoorden die u heeft ingegeven komen niet overeen." } \ No newline at end of file diff --git a/public/language/nl/search.json b/public/language/nl/search.json index 756a0ef3a7..c104ef95d3 100644 --- a/public/language/nl/search.json +++ b/public/language/nl/search.json @@ -3,38 +3,38 @@ "no-matches": "Geen matches gevonden", "in": "in", "by": "door", - "titles": "Titles", - "titles-posts": "Titles and Posts", - "posted-by": "Posted by", - "in-categories": "In Categories", - "search-child-categories": "Search child categories", - "reply-count": "Reply Count", - "at-least": "At least", - "at-most": "At most", - "post-time": "Post time", - "newer-than": "Newer than", - "older-than": "Older than", - "any-date": "Any date", - "yesterday": "Yesterday", - "one-week": "One week", - "two-weeks": "Two weeks", - "one-month": "One month", - "three-months": "Three months", - "six-months": "Six months", - "one-year": "One year", - "sort-by": "Sort by", - "last-reply-time": "Last reply time", - "topic-title": "Topic title", - "number-of-replies": "Number of replies", - "number-of-views": "Number of views", - "topic-start-date": "Topic start date", - "username": "Username", - "category": "Category", - "descending": "In descending order", - "ascending": "In ascending order", - "save-preferences": "Save preferences", - "clear-preferences": "Clear preferences", - "search-preferences-saved": "Search preferences saved", - "search-preferences-cleared": "Search preferences cleared", - "show-results-as": "Show results as" + "titles": "Titels", + "titles-posts": "Titels en Berichten", + "posted-by": "Geplaatst door", + "in-categories": "In categorieën", + "search-child-categories": "Doorzoek sub categorieën ", + "reply-count": "Aantal reacties", + "at-least": "Minimaal", + "at-most": "Maximaal", + "post-time": "Tijd van plaatsing", + "newer-than": "Nieuwer dan", + "older-than": "Ouder dan", + "any-date": "Iedere datum", + "yesterday": "Gisteren", + "one-week": "Eén week", + "two-weeks": "Twee weken", + "one-month": "Eén maand", + "three-months": "Drie maanden", + "six-months": "Zes maanden", + "one-year": "Eén jaar", + "sort-by": "Gesorteerd op", + "last-reply-time": "Laatste keer geantwoord", + "topic-title": "Onderwerp", + "number-of-replies": "Aantal antwoorden", + "number-of-views": "Aantal weergaven", + "topic-start-date": "Onderwerp aanmaakdatum", + "username": "Gebruikersnaam", + "category": "Categorie", + "descending": "In aflopende volgorde", + "ascending": "In oplopende volgorde", + "save-preferences": "Bewaar voorkeuren", + "clear-preferences": "Voorkeuren verwijderen", + "search-preferences-saved": "Zoek voorkeuren opgeslagen", + "search-preferences-cleared": "Zoek voorkeuren verwijderd", + "show-results-as": "Toon resultaten als" } \ No newline at end of file diff --git a/public/language/nl/tags.json b/public/language/nl/tags.json index 281fd4a0a5..ec028f3248 100644 --- a/public/language/nl/tags.json +++ b/public/language/nl/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Er zijn geen onderwerpen met deze tag", "tags": "Tags", - "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", + "enter_tags_here": "Voegt u hier tags toe, tussen de %1 en %2 karakters per stuk.", "enter_tags_here_short": "Voer uw tags in...", "no_tags": "Er zijn nog geen tags te vinden" } \ No newline at end of file diff --git a/public/language/nl/topic.json b/public/language/nl/topic.json index 5f9250bea4..35679bccfd 100644 --- a/public/language/nl/topic.json +++ b/public/language/nl/topic.json @@ -12,7 +12,7 @@ "notify_me": "Krijg notificaties van nieuwe reacties op dit onderwerp", "quote": "Citeren", "reply": "Reageren", - "guest-login-reply": "Log in to reply", + "guest-login-reply": "Log in om een reactie te plaatsen", "edit": "Aanpassen", "delete": "Verwijderen", "purge": "weggooien", diff --git a/public/language/nl/user.json b/public/language/nl/user.json index 808f78a92e..6726bf11ba 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -3,7 +3,7 @@ "offline": "Offline", "username": "Gebruikersnaam", "joindate": "Datum van registratie", - "postcount": "Post Count", + "postcount": "Aantal geplaatste berichten", "email": "Email", "confirm_email": "Bevestig uw email adres", "delete_account": "Account Verwijderen", @@ -18,7 +18,7 @@ "profile_views": "Profiel weergaven", "reputation": "Reputatie", "favourites": "Favorieten", - "watched": "Watched", + "watched": "Bekeken", "followers": "Volgers", "following": "Volgend", "signature": "Handtekening", @@ -59,13 +59,13 @@ "digest_weekly": "Weekelijks", "digest_monthly": "Maandelijks", "send_chat_notifications": "Verstuur mij een email als iemand een chatbericht stuurt terwijl ik niet online ben", - "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", + "send_post_notifications": "Stuur een email als er een reactie wordt geplaatst in een topic waarop ik geabonneerd ben", + "settings-require-reload": "Sommige veranderingen vereisen het om de pagina te herladen. Klik hier om te herladen.", "has_no_follower": "Deze gebruiker heeft geen volgers :(", "follows_no_one": "Deze gebruiker volgt niemand :(", "has_no_posts": "Deze gebruiker heeft nog geen berichten geplaatst", "has_no_topics": "Deze gebruiker heeft nog geen berichten geplaatst", - "has_no_watched_topics": "This user didn't watch any topics yet.", + "has_no_watched_topics": "Deze gebruiker heeft nog geen berichten bekeken", "email_hidden": "Email Verborgen", "hidden": "verborgen", "paginate_description": "Blader door onderwerpen en berichten in plaats van oneindig scrollen.", @@ -78,5 +78,5 @@ "topic_search_help": "Als het is ingeschakeld, dan zal het standaard zoeken overschrijven en zal je vanaf nu het gehele onderwerp kunnen doorzoeken ipv wat je standaard ziet.", "follow_topics_you_reply_to": "Volg de onderwerpen waarop u gereageerd heeft.", "follow_topics_you_create": "Volg de onderwerpen die u gecreëerd heeft.", - "grouptitle": "Select the group title you would like to display" + "grouptitle": "Selecteer de groepstitel die u wilt weergeven " } \ No newline at end of file diff --git a/public/language/nl/users.json b/public/language/nl/users.json index 315b86fe31..93e723d7b1 100644 --- a/public/language/nl/users.json +++ b/public/language/nl/users.json @@ -5,7 +5,7 @@ "search": "Zoeken", "enter_username": "Vul een gebruikersnaam in om te zoeken", "load_more": "Meer Laden", - "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "users-found-search-took": "%1 gebruiker(s) gevonden! Zoekactie duurde %2 seconden.", "filter-by": "Filter op", "online-only": "Online ", "picture-only": "Alleen een afbeelding" From 8e17f34de45aab3a34f10d6519ed9ee6957bc41a Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 27 Mar 2015 20:51:38 -0400 Subject: [PATCH 167/172] lol. --- src/views/admin/settings/post.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/admin/settings/post.tpl b/src/views/admin/settings/post.tpl index 2ec28c23a1..4f4314228d 100644 --- a/src/views/admin/settings/post.tpl +++ b/src/views/admin/settings/post.tpl @@ -54,7 +54,7 @@
    - +
    From d249a46fae9af9be2bc0178c357bde4ac7f5806e Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 27 Mar 2015 21:36:10 -0400 Subject: [PATCH 168/172] fixed around event handling for composer submit button, and upped vanilla minver --- package.json | 2 +- public/src/modules/composer.js | 31 +++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 7e03c304f3..b4901f90e3 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "nodebb-plugin-soundpack-default": "~0.1.1", "nodebb-plugin-spam-be-gone": "^0.4.0", "nodebb-theme-lavender": "^1.0.22", - "nodebb-theme-vanilla": "^1.0.65", + "nodebb-theme-vanilla": "^1.0.80", "nodebb-widget-essentials": "~0.2.12", "nodebb-rewards-essentials": "^0.0.1", "npm": "^2.1.4", diff --git a/public/src/modules/composer.js b/public/src/modules/composer.js index 33fa2ac208..fa76d6b517 100644 --- a/public/src/modules/composer.js +++ b/public/src/modules/composer.js @@ -301,7 +301,8 @@ define('composer', [ var postContainer = $(composerTemplate[0]), bodyEl = postContainer.find('textarea'), - draft = drafts.getDraft(postData.save_id); + draft = drafts.getDraft(postData.save_id), + submitBtn = postContainer.find('.composer-submit'); tags.init(postContainer, composer.posts[post_uuid]); categoryList.init(postContainer, composer.posts[post_uuid]); @@ -325,17 +326,31 @@ define('composer', [ composer.posts[post_uuid].modified = true; }); - postContainer.on('click', '[data-action="post"]', function() { - $(this).attr('disabled', true); - post(post_uuid); + submitBtn.on('click', function() { + var action = $(this).attr('data-action'); + + switch(action) { + case 'post-lock': + $(this).attr('disabled', true); + post(post_uuid, {lock: true}); + break; + + case 'post': // intentional fall-through + default: + $(this).attr('disabled', true); + post(post_uuid); + break; + } }); - postContainer.on('click', '[data-action="post-lock"]', function() { - $(this).attr('disabled', true); - post(post_uuid, {lock: true}); + postContainer.on('click', 'a[data-switch-action]', function() { + var action = $(this).attr('data-switch-action'), + label = $(this).html(); + + submitBtn.attr('data-action', action).html(label); }); - postContainer.on('click', '[data-action="discard"]', function() { + postContainer.find('.composer-discard').on('click', function() { if (!composer.posts[post_uuid].modified) { discard(post_uuid); return; From d27ec057c5bbff2c50287c2950fb68d09c8b1487 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 27 Mar 2015 21:49:53 -0400 Subject: [PATCH 169/172] closes #2910 --- public/src/modules/composer.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/public/src/modules/composer.js b/public/src/modules/composer.js index fa76d6b517..9545759395 100644 --- a/public/src/modules/composer.js +++ b/public/src/modules/composer.js @@ -121,8 +121,8 @@ define('composer', [ } } - function composerAlert(message) { - $('[data-action="post"]').removeAttr('disabled'); + function composerAlert(post_uuid, message) { + $('#cmp-uuid-' + post_uuid).find('.composer-submit').removeAttr('disabled'); app.alert({ type: 'danger', timeout: 3000, @@ -498,17 +498,17 @@ define('composer', [ var checkTitle = parseInt(postData.cid, 10) || parseInt(postData.pid, 10); if (uploads.inProgress[post_uuid] && uploads.inProgress[post_uuid].length) { - return composerAlert('[[error:still-uploading]]'); + return composerAlert(post_uuid, '[[error:still-uploading]]'); } else if (checkTitle && titleEl.val().length < parseInt(config.minimumTitleLength, 10)) { - return composerAlert('[[error:title-too-short, ' + config.minimumTitleLength + ']]'); + return composerAlert(post_uuid, '[[error:title-too-short, ' + config.minimumTitleLength + ']]'); } else if (checkTitle && titleEl.val().length > parseInt(config.maximumTitleLength, 10)) { - return composerAlert('[[error:title-too-long, ' + config.maximumTitleLength + ']]'); + return composerAlert(post_uuid, '[[error:title-too-long, ' + config.maximumTitleLength + ']]'); } else if (checkTitle && !utils.slugify(titleEl.val()).length) { - return composerAlert('[[error:invalid-title]]'); + return composerAlert(post_uuid, '[[error:invalid-title]]'); } else if (bodyEl.val().length < parseInt(config.minimumPostLength, 10)) { - return composerAlert('[[error:content-too-short, ' + config.minimumPostLength + ']]'); + return composerAlert(post_uuid, '[[error:content-too-short, ' + config.minimumPostLength + ']]'); } else if (bodyEl.val().length > parseInt(config.maximumPostLength, 10)) { - return composerAlert('[[error:content-too-long, ' + config.maximumPostLength + ']]'); + return composerAlert(post_uuid, '[[error:content-too-long, ' + config.maximumPostLength + ']]'); } var composerData = {}, action; @@ -546,7 +546,7 @@ define('composer', [ } socket.emit(action, composerData, function (err, data) { - $('[data-action="post"]').removeAttr('disabled'); + postContainer.find('.composer-submit').removeAttr('disabled'); if (err) { if (err.message === '[[error:email-not-confirmed]]') { return app.showEmailConfirmWarning(err); From 89442c91c6a713f09bee7b1078548af4a8ceff12 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sat, 28 Mar 2015 09:54:39 -0400 Subject: [PATCH 170/172] fixed bug where privilege state was not correctly calculated for MongoDB installs, and fixed columnCount not being present when a the privilege list is refreshed --- src/controllers/admin.js | 2 -- src/privileges/categories.js | 25 ++++++++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/controllers/admin.js b/src/controllers/admin.js index 6dc344a9b0..24332866f9 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -136,8 +136,6 @@ adminController.categories.get = function(req, res, next) { return next(err); } - data.privileges.columnCount = data.privileges.labels.users.length + 2; - res.render('admin/manage/category', { category: data.category[0], privileges: data.privileges diff --git a/src/privileges/categories.js b/src/privileges/categories.js index ff92f2b4d1..8591a174c4 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -44,7 +44,17 @@ module.exports = function(privileges) { privileges = privs; groups.getMembersOfGroups(privs.map(function(privilege) { return 'cid:' + cid + ':privileges:' + privilege; - }), next); + }), function(err, memberSets) { + if (err) { + return next(err); + } + + next(null, memberSets.map(function(set) { + return set.map(function(uid) { + return parseInt(uid, 10); + }); + })); + }); }, function(memberSets, next) { // Reduce into a single array @@ -58,7 +68,7 @@ module.exports = function(privileges) { memberData = memberData.map(function(member) { member.privileges = {}; for(var x=0,numPrivs=privileges.length;x Date: Sat, 28 Mar 2015 11:20:43 -0400 Subject: [PATCH 171/172] updating groups access control so: 1. Guests can no longer receive the moderate bit 2. If you attempt to grant the moderate privilege to a public group, a confirmation modal appears 3. A lock icon is present next to all private groups --- public/src/admin/manage/category.js | 46 +++++++++++++------ public/src/modules/helpers.js | 4 +- src/privileges/categories.js | 13 ++++++ src/views/admin/manage/category.tpl | 2 +- .../admin/partials/categories/privileges.tpl | 13 ++++-- 5 files changed, 56 insertions(+), 22 deletions(-) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 743fc2e1a4..c51dba4a01 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -184,24 +184,24 @@ define('admin/manage/category', [ privilege = checkboxEl.parent().attr('data-privilege'), state = checkboxEl.prop('checked'), rowEl = checkboxEl.parents('tr'), - member = rowEl.attr('data-group-name') || rowEl.attr('data-uid'); + member = rowEl.attr('data-group-name') || rowEl.attr('data-uid'), + isPrivate = parseInt(rowEl.attr('data-private') || 0, 10), + isGroup = rowEl.attr('data-group-name') !== undefined; if (member) { - socket.emit('admin.categories.setPrivilege', { - cid: ajaxify.variables.get('cid'), - privilege: privilege, - set: state, - member: member - }, function(err) { - if (err) { - return app.alertError(err.message); - } - - checkboxEl.replaceWith(''); - Category.refreshPrivilegeTable(); - }); + if (isGroup && privilege === 'groups:moderate' && !isPrivate && state) { + bootbox.confirm('Are you sure you wish to grant the moderation privilege to this user group? This group is public, and any users can join at will.', function(confirm) { + if (confirm) { + Category.setPrivilege(member, privilege, state, checkboxEl); + } else { + checkboxEl.prop('checked', checkboxEl.prop('checked') ^ 1); + } + }); + } else { + Category.setPrivilege(member, privilege, state, checkboxEl); + } } else { - app.alertError('No member or group was selected'); + app.alertError('[[error:invalid-data]]'); } }) }; @@ -220,6 +220,22 @@ define('admin/manage/category', [ }); }; + Category.setPrivilege = function(member, privilege, state, checkboxEl) { + socket.emit('admin.categories.setPrivilege', { + cid: ajaxify.variables.get('cid'), + privilege: privilege, + set: state, + member: member + }, function(err) { + if (err) { + return app.alertError(err.message); + } + + checkboxEl.replaceWith(''); + Category.refreshPrivilegeTable(); + }); + }; + Category.launchParentSelector = function() { socket.emit('categories.get', function(err, categories) { templates.parse('partials/category_list', { diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index 042075e6a3..04937895c5 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -108,7 +108,7 @@ } }; - helpers.spawnPrivilegeStates = function(privileges) { + helpers.spawnPrivilegeStates = function(member, privileges) { var states = []; for(var priv in privileges) { if (privileges.hasOwnProperty(priv)) { @@ -119,7 +119,7 @@ } } return states.map(function(priv) { - return ''; + return ''; }).join(''); }; diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 8591a174c4..59b2f79a1d 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -117,6 +117,19 @@ module.exports = function(privileges) { next(null, memberData); }); + }, + function(memberData, next) { + // Grab privacy info for the groups as well + async.map(memberData, function(member, next) { + groups.isPrivate(member.name, function(err, isPrivate) { + if (err) { + return next(err); + } + + member.isPrivate = isPrivate; + next(null, member); + }); + }, next); } ], next); } diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index 358e05609c..80b5dbe694 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -79,7 +79,7 @@

    You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or - a per-group basis. You can add a new user or group to this table by searching for them in the form below. + a per-group basis. You can add a new user to this table by searching for them in the form below.

    Note: Privilege settings take effect immediately. It is not necessary to save the category after adjusting diff --git a/src/views/admin/partials/categories/privileges.tpl b/src/views/admin/partials/categories/privileges.tpl index c1f6aa8979..b6b33ac42b 100644 --- a/src/views/admin/partials/categories/privileges.tpl +++ b/src/views/admin/partials/categories/privileges.tpl @@ -11,7 +11,7 @@ {username} - {function.spawnPrivilegeStates, privileges} + {function.spawnPrivilegeStates, username, privileges} @@ -31,9 +31,14 @@ - - {privileges.groups.name} - {function.spawnPrivilegeStates, privileges} + + + + + + {privileges.groups.name} + + {function.spawnPrivilegeStates, name, privileges} From 8026b3c7d832a52a4163102849f211ecc0198089 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Sat, 28 Mar 2015 15:26:19 -0400 Subject: [PATCH 172/172] closes #2911 --- src/groups.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/groups.js b/src/groups.js index 809ce68089..c2257c9935 100644 --- a/src/groups.js +++ b/src/groups.js @@ -126,7 +126,7 @@ var async = require('async'), if (options.expand) { async.waterfall([ - async.apply(async.map, uids, user.getUserData), + async.apply(user.getUsers, uids, options.uid || 0), function(users, next) { // Filter out non-matches users = users.filter(Boolean);