diff --git a/.eslintrc b/.eslintrc
index 52211a126d..bbba3aa94e 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -32,6 +32,7 @@
"no-prototype-builtins": "off",
"new-cap": "off",
"no-plusplus": ["error", { "allowForLoopAfterthoughts": true }],
+ "import/no-unresolved": "error",
// ES6
"prefer-rest-params": "off",
@@ -43,7 +44,6 @@
"vars-on-top": "off",
// TODO
- "import/no-unresolved": "off",
"import/no-extraneous-dependencies": "off",
"import/no-dynamic-require": "off",
"import/newline-after-import": "off",
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 6d5e4f1201..a26d415c49 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -38,11 +38,9 @@ There is a chance that the issue you are experiencing may have already been fixe
You can find the NodeBB version number in the Admin Control Panel (ACP), as well as the first line output to the shell when running NodeBB
``` plaintext
-info: NodeBB v0.5.2-dev Copyright (C) 2013-2014 NodeBB Inc.
-info: This program comes with ABSOLUTELY NO WARRANTY.
-info: This is free software, and you are welcome to redistribute it under certain conditions.
-info:
-info: Time: Tue Oct 07 2014 20:25:20 GMT-0400 (EDT)
+3/4 12:38:57 [10752] - info: NodeBB v1.4.5 Copyright (C) 2013-2017 NodeBB Inc.
+3/4 12:38:57 [10752] - info: This program comes with ABSOLUTELY NO WARRANTY.
+3/4 12:38:57 [10752] - info: This is free software, and you are welcome to redistribute it under certain conditions.
```
If you are running NodeBB via git, it is also helpful to let the maintainers know what commit hash you are on. To find the commit hash, execute the following command:
diff --git a/app.js b/app.js
index de9d417045..f1412532a5 100644
--- a/app.js
+++ b/app.js
@@ -19,6 +19,12 @@
'use strict';
+if (require.main !== module) {
+ require.main.require = function (path) {
+ return require(path);
+ };
+}
+
var nconf = require('nconf');
nconf.argv().env('__');
@@ -206,22 +212,32 @@ function upgrade() {
function activate() {
var db = require('./src/database');
- db.init(function (err) {
+ var plugins = require('./src/plugins');
+ var plugin = nconf.get('activate');
+ async.waterfall([
+ function (next) {
+ db.init(next);
+ },
+ function (next) {
+ if (plugin.indexOf('nodebb-') !== 0) {
+ // Allow omission of `nodebb-plugin-`
+ plugin = 'nodebb-plugin-' + plugin;
+ }
+ plugins.isInstalled(plugin, next);
+ },
+ function (isInstalled, next) {
+ if (!isInstalled) {
+ return next(new Error('plugin not installed'));
+ }
+
+ winston.info('Activating plugin `%s`', plugin);
+ db.sortedSetAdd('plugins:active', 0, plugin, next);
+ },
+ ], function (err) {
if (err) {
- winston.error(err.stack);
- process.exit(1);
+ winston.error(err.message);
}
-
- var plugin = nconf.get('activate');
- if (plugin.indexOf('nodebb-') !== 0) {
- // Allow omission of `nodebb-plugin-`
- plugin = 'nodebb-plugin-' + plugin;
- }
-
- winston.info('Activating plugin `%s`', plugin);
- db.sortedSetAdd('plugins:active', 0, plugin, function (err) {
- process.exit(err ? 1 : 0);
- });
+ process.exit(err ? 1 : 0);
});
}
diff --git a/install/data/navigation.json b/install/data/navigation.json
index 0ec72805de..8c7965dc7e 100644
--- a/install/data/navigation.json
+++ b/install/data/navigation.json
@@ -1,71 +1,71 @@
[
{
"route": "/categories",
- "title": "\\[\\[global:header.categories\\]\\]",
+ "title": "[[global:header.categories]]",
"enabled": true,
"iconClass": "fa-list",
"textClass": "visible-xs-inline",
- "text": "\\[\\[global:header.categories\\]\\]"
+ "text": "[[global:header.categories]]"
},
{
"id": "unread-count",
"route": "/unread",
- "title": "\\[\\[global:header.unread\\]\\]",
+ "title": "[[global:header.unread]]",
"enabled": true,
"iconClass": "fa-inbox",
"textClass": "visible-xs-inline",
- "text": "\\[\\[global:header.unread\\]\\]",
+ "text": "[[global:header.unread]]",
"properties": {
"loggedIn": true
}
},
{
"route": "/recent",
- "title": "\\[\\[global:header.recent\\]\\]",
+ "title": "[[global:header.recent]]",
"enabled": true,
"iconClass": "fa-clock-o",
"textClass": "visible-xs-inline",
- "text": "\\[\\[global:header.recent\\]\\]"
+ "text": "[[global:header.recent]]"
},
{
"route": "/tags",
- "title": "\\[\\[global:header.tags\\]\\]",
+ "title": "[[global:header.tags]]",
"enabled": true,
"iconClass": "fa-tags",
"textClass": "visible-xs-inline",
- "text": "\\[\\[global:header.tags\\]\\]"
+ "text": "[[global:header.tags]]"
},
{
"route": "/popular",
- "title": "\\[\\[global:header.popular\\]\\]",
+ "title": "[[global:header.popular]]",
"enabled": true,
"iconClass": "fa-fire",
"textClass": "visible-xs-inline",
- "text": "\\[\\[global:header.popular\\]\\]"
+ "text": "[[global:header.popular]]"
},
{
"route": "/users",
- "title": "\\[\\[global:header.users\\]\\]",
+ "title": "[[global:header.users]]",
"enabled": true,
"iconClass": "fa-user",
"textClass": "visible-xs-inline",
- "text": "\\[\\[global:header.users\\]\\]"
+ "text": "[[global:header.users]]"
},
{
"route": "/groups",
- "title": "\\[\\[global:header.groups\\]\\]",
+ "title": "[[global:header.groups]]",
"enabled": true,
"iconClass": "fa-group",
"textClass": "visible-xs-inline",
- "text": "\\[\\[global:header.groups\\]\\]"
+ "text": "[[global:header.groups]]"
},
{
"route": "/admin",
- "title": "\\[\\[global:header.admin\\]\\]",
+ "title": "[[global:header.admin]]",
"enabled": true,
"iconClass": "fa-cogs",
"textClass": "visible-xs-inline",
- "text": "\\[\\[global:header.admin\\]\\]",
+ "text": "[[global:header.admin]]",
"properties": {
"targetBlank": false,
"adminOnly": true
@@ -73,11 +73,11 @@
},
{
"route": "/search",
- "title": "\\[\\[global:header.search\\]\\]",
+ "title": "[[global:header.search]]",
"enabled": true,
"iconClass": "fa-search",
"textClass": "visible-xs-inline",
- "text": "\\[\\[global:header.search\\]\\]",
+ "text": "[[global:header.search]]",
"properties": {
"searchInstalled": true
}
diff --git a/loader.js b/loader.js
index 654d77fb23..214f785eb9 100644
--- a/loader.js
+++ b/loader.js
@@ -7,6 +7,7 @@ var path = require('path');
var fork = require('child_process').fork;
var async = require('async');
var logrotate = require('logrotate-stream');
+
var file = require('./src/file');
var pkg = require('./package.json');
@@ -23,6 +24,7 @@ var workers = [];
var Loader = {
timesStarted: 0,
};
+var appPath = path.join(__dirname, 'app.js');
Loader.init = function (callback) {
if (silent) {
@@ -114,7 +116,7 @@ function forkWorker(index, isPrimary) {
process.env.isCluster = ports.length > 1;
process.env.port = ports[index];
- var worker = fork('app.js', args, {
+ var worker = fork(appPath, args, {
silent: silent,
env: process.env,
});
diff --git a/nodebb b/nodebb
index ee87b24288..447f17c9a6 100755
--- a/nodebb
+++ b/nodebb
@@ -2,16 +2,25 @@
'use strict';
+var cproc;
+var args;
+var fs;
+var path;
+var request;
+var semver;
+var prompt;
+var async;
+
try {
require('colors');
- var cproc = require('child_process');
- var args = require('minimist')(process.argv.slice(2));
- var fs = require('fs');
- var path = require('path');
- var request = require('request');
- var semver = require('semver');
- var prompt = require('prompt');
- var async = require('async');
+ cproc = require('child_process');
+ args = require('minimist')(process.argv.slice(2));
+ fs = require('fs');
+ path = require('path');
+ request = require('request');
+ semver = require('semver');
+ prompt = require('prompt');
+ async = require('async');
} catch (e) {
if (e.code === 'MODULE_NOT_FOUND') {
process.stdout.write('NodeBB could not be started because it\'s dependencies have not been installed.\n');
@@ -23,13 +32,16 @@ try {
}
}
+var loaderPath = path.join(__dirname, 'loader.js');
+var appPath = path.join(__dirname, 'app.js');
+
if (args.dev) {
process.env.NODE_ENV = 'development';
}
function getRunningPid(callback) {
- fs.readFile(__dirname + '/pidfile', {
- encoding: 'utf-8'
+ fs.readFile(path.join(__dirname, 'pidfile'), {
+ encoding: 'utf-8',
}, function (err, pid) {
if (err) {
return callback(err);
@@ -38,7 +50,7 @@ function getRunningPid(callback) {
try {
process.kill(parseInt(pid, 10), 0);
callback(null, parseInt(pid, 10));
- } catch(e) {
+ } catch (e) {
callback(e);
}
});
@@ -52,28 +64,29 @@ function getCurrentVersion(callback) {
try {
pkg = JSON.parse(pkg);
return callback(null, pkg.version);
- } catch(err) {
+ } catch (err) {
return callback(err);
}
});
}
function fork(args) {
- return cproc.fork('app.js', args, {
+ return cproc.fork(appPath, args, {
cwd: __dirname,
- silent: false
+ silent: false,
});
}
function getInstalledPlugins(callback) {
async.parallel({
files: async.apply(fs.readdir, path.join(__dirname, 'node_modules')),
- deps: async.apply(fs.readFile, path.join(__dirname, 'package.json'), { encoding: 'utf-8' })
+ deps: async.apply(fs.readFile, path.join(__dirname, 'package.json'), { encoding: 'utf-8' }),
}, function (err, payload) {
if (err) {
return callback(err);
}
- var isNbbModule = /^nodebb-(?:plugin|theme|widget|rewards)-[\w\-]+$/,
- moduleName, isGitRepo;
+ var isNbbModule = /^nodebb-(?:plugin|theme|widget|rewards)-[\w-]+$/;
+ var moduleName;
+ var isGitRepo;
payload.files = payload.files.filter(function (file) {
return isNbbModule.test(file);
@@ -98,7 +111,7 @@ function getInstalledPlugins(callback) {
try {
fs.accessSync(path.join(__dirname, 'node_modules/' + moduleName, '.git'));
isGitRepo = true;
- } catch(e) {
+ } catch (e) {
isGitRepo = false;
}
@@ -144,7 +157,7 @@ function checkPlugins(standalone, callback) {
async.waterfall([
async.apply(async.parallel, {
plugins: async.apply(getInstalledPlugins),
- version: async.apply(getCurrentVersion)
+ version: async.apply(getCurrentVersion),
}),
function (payload, next) {
var toCheck = Object.keys(payload.plugins);
@@ -157,7 +170,7 @@ function checkPlugins(standalone, callback) {
request({
method: 'GET',
url: 'https://packages.nodebb.org/api/v1/suggest?version=' + payload.version + '&package[]=' + toCheck.join('&package[]='),
- json: true
+ json: true,
}, function (err, res, body) {
if (err) {
process.stdout.write('error'.red + '\n'.reset);
@@ -169,25 +182,25 @@ function checkPlugins(standalone, callback) {
body = [body];
}
- var current, suggested,
- upgradable = body.map(function (suggestObj) {
- current = payload.plugins[suggestObj.package];
- suggested = suggestObj.version;
+ var current;
+ var suggested;
+ var upgradable = body.map(function (suggestObj) {
+ current = payload.plugins[suggestObj.package];
+ suggested = suggestObj.version;
- if (suggestObj.code === 'match-found' && semver.gt(suggested, current)) {
- return {
- name: suggestObj.package,
- current: current,
- suggested: suggested
- };
- } else {
- return null;
- }
- }).filter(Boolean);
+ if (suggestObj.code === 'match-found' && semver.gt(suggested, current)) {
+ return {
+ name: suggestObj.package,
+ current: current,
+ suggested: suggested,
+ };
+ }
+ return null;
+ }).filter(Boolean);
next(null, upgradable);
});
- }
+ },
], callback);
}
function upgradePlugins(callback) {
@@ -199,7 +212,7 @@ function upgradePlugins(callback) {
checkPlugins(standalone, function (err, found) {
if (err) {
- process.stdout.write('\Warning'.yellow + ': An unexpected error occured when attempting to verify plugin upgradability\n'.reset);
+ process.stdout.write('Warning'.yellow + ': An unexpected error occured when attempting to verify plugin upgradability\n'.reset);
return callback(err);
}
@@ -223,7 +236,7 @@ function upgradePlugins(callback) {
prompt.get({
name: 'upgrade',
description: 'Proceed with upgrade (y|n)?'.reset,
- type: 'string'
+ type: 'string',
}, function (err, result) {
if (err) {
return callback(err);
@@ -279,8 +292,8 @@ var commands = {
process.stdout.write(' "' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'.reset);
// Spawn a new NodeBB process
- cproc.fork(__dirname + '/loader.js', {
- env: process.env
+ cproc.fork(loaderPath, {
+ env: process.env,
});
},
},
@@ -320,7 +333,7 @@ var commands = {
process.stdout.write('\n\n'.reset);
cproc.spawn('tail', ['-F', './logs/output.log'], {
cwd: __dirname,
- stdio: 'inherit'
+ stdio: 'inherit',
});
},
},
@@ -333,12 +346,12 @@ var commands = {
process.stdout.write('\n\n'.reset);
// Spawn a new NodeBB process
- cproc.fork(__dirname + '/loader.js', {
- env: process.env
+ cproc.fork(loaderPath, {
+ env: process.env,
});
cproc.spawn('tail', ['-F', './logs/output.log'], {
cwd: __dirname,
- stdio: 'inherit'
+ stdio: 'inherit',
});
},
},
@@ -347,14 +360,14 @@ var commands = {
usage: 'Usage: ' + './nodebb dev'.yellow,
handler: function () {
process.env.NODE_ENV = 'development';
- cproc.fork(__dirname + '/loader.js', ['--no-daemon', '--no-silent'], {
- env: process.env
+ cproc.fork(loaderPath, ['--no-daemon', '--no-silent'], {
+ env: process.env,
});
},
},
build: {
description: 'Compile static assets (CSS, Javascript, etc)',
- usage: 'Usage: ' + './nodebb build'.yellow + ' [js,clientCSS,acpCSS,tpl,lang]'.red + '\n' +
+ usage: 'Usage: ' + './nodebb build'.yellow + ' [js,clientCSS,acpCSS,tpl,lang]'.red + '\n' +
' e.g. ' + './nodebb build js,tpl'.yellow + '\tbuilds JS and templates\n' +
' ' + './nodebb build'.yellow + '\t\tbuilds all targets\n',
handler: function () {
@@ -390,7 +403,16 @@ var commands = {
description: 'Activate a plugin for the next startup of NodeBB',
usage: 'Usage: ' + './nodebb activate A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. Има нова версия (версия %1). Ако имате възможност, обновете NodeBB. Това е остаряла версия за предварителен преглед на NodeBB. Има нова версия (версия %1). Ако имате възможност, обновете NodeBB. Това е версия за предварителен преглед на NodeBB. Възможно е да има неочаквани неизправности. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. En ny version (v%1) er blevet udgivet. Overvej at opgradere din NodeBB. Dette er en uddateret pre-release version af NodeBB. En ny version (v%1) er blevet udgivet. Overvej at opdatere din NodeBB. Dette er en pre-release udgave af NodeBB. Uforventede bugs kan forekomme. Version (v%1) wurde veröffentlicht. Beachte um ein NodeBB Upgrade durchzuführen. Das ist eine veraltete pre-release Version von NodeBB. Version (v%1) wurde veröffentlicht. Beachte um ein NodeBB Upgrade durchzuführen. Das ist eine pre-release Version von NodeBB. Es können ungewollte Fehler auftreten. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. Une nouvelle version (v%1) a été publiée. Pensez à mettre à jour votre version de NodeBB. Ceci est une ancienne version préliminaire de NodeBB. Une nouvelle version (v%1) a été publiée. Pensez à mettre à jour votre version de NodeBB. Ceci est une version préliminaire de NodeBB. Des bugs inattendus peuvent se produire. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. 新しいバージョン (v%1) がリリースされました。NodeBBのアップグレードを検討してください。 これはNodeBBの旧リリースのバージョンです。新しいバージョン(v%1)がリリースされました。 NodeBBのアップグレードを検討してください。 p>",
"prerelease-warning": " これはNodeBBのプレリリース版 strong>です。意図しないバグが発生することがあります。 A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. Dostępna jest nowa wersja NodeBB (v%1). Proszę o rozważenie aktualizacji This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. Uma nova versão (v%1) foi lançada. Leve em consideração atualizar o seu NodeBB. Esta versão um pre-release antigo do NodeBB. Uma nova versão (v%1) foi lançada. Leve em consideração atualizar o seu NodeBB. Esta é uma versão pre-release do NodeBB. Bugs inesperados podem ocorrer. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. A new version (v%1) has been released. Consider upgrading your NodeBB. This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB. This is a pre-release version of NodeBB. Unintended bugs may occur. null",
+ "headers.acao-help": "To deny access to all sites, leave empty",
"headers.acam": "Access-Control-Allow-Methods",
"headers.acah": "Access-Control-Allow-Headers",
"traffic-management": "Traffic Management",
diff --git a/public/language/en-GB/admin/settings/reputation.json b/public/language/en-GB/admin/settings/reputation.json
index 11d6184721..f0e59e8db9 100644
--- a/public/language/en-GB/admin/settings/reputation.json
+++ b/public/language/en-GB/admin/settings/reputation.json
@@ -2,6 +2,7 @@
"reputation": "Reputation Settings",
"disable": "Disable Reputation System",
"disable-down-voting": "Disable Down Voting",
+ "votes-are-public": "All Votes Are Public",
"thresholds": "Activity Thresholds",
"min-rep-downvote": "Minimum reputation to downvote posts",
"min-rep-flag": "Minimum reputation to flag posts"
diff --git a/public/language/en-GB/admin/settings/user.json b/public/language/en-GB/admin/settings/user.json
index bdabb075e9..b8f51c9288 100644
--- a/public/language/en-GB/admin/settings/user.json
+++ b/public/language/en-GB/admin/settings/user.json
@@ -37,6 +37,7 @@
"min-username-length": "Minimum Username Length",
"max-username-length": "Maximum Username Length",
"min-password-length": "Minimum Password Length",
+ "min-password-strength": "Minimum Password Strength",
"max-about-me-length": "Maximum About Me Length",
"terms-of-use": "Forum Terms of Use (Leave blank to disable)",
"user-search": "User Search",
diff --git a/public/language/en-GB/user.json b/public/language/en-GB/user.json
index 4013d5898c..8a5206d272 100644
--- a/public/language/en-GB/user.json
+++ b/public/language/en-GB/user.json
@@ -62,6 +62,7 @@
"username_taken_workaround": "The username you requested was already taken, so we have altered it slightly. You are now known as %1",
"password_same_as_username": "Your password is the same as your username, please select another password.",
"password_same_as_email": "Your password is the same as your email, please select another password.",
+ "weak_password": "Weak password.",
"upload_picture": "Upload picture",
"upload_a_picture": "Upload a picture",
diff --git a/public/language/en-US/admin/general/dashboard.json b/public/language/en-US/admin/general/dashboard.json
index a70dda322e..02046bd17a 100644
--- a/public/language/en-US/admin/general/dashboard.json
+++ b/public/language/en-US/admin/general/dashboard.json
@@ -21,6 +21,7 @@
"upgrade-available": "
Dlaczego nie spróbujesz jakiegoś utworzyć?",
+ "no_topics": "W tej kategorii nie ma jeszcze żadnych tematów.
Może pora na napisanie pierwszego?",
"browsing": "przegląda",
"no_replies": "Nikt jeszcze nie odpowiedział",
"no_new_posts": "Brak nowych postów.",
diff --git a/public/language/pl/groups.json b/public/language/pl/groups.json
index edfeb881cd..a51f362e60 100644
--- a/public/language/pl/groups.json
+++ b/public/language/pl/groups.json
@@ -27,6 +27,7 @@
"details.disableJoinRequests": "Wyłączono prośbę o dołączenie",
"details.grant": "Nadaj/Cofnij prawa Właściciela",
"details.kick": "Wykop",
+ "details.kick_confirm": "Are you sure you want to remove this member from the group?",
"details.owner_options": "Administracja grupy",
"details.group_name": "Nazwa grupy",
"details.member_count": "Liczba Członków",
diff --git a/public/language/pl/notifications.json b/public/language/pl/notifications.json
index 7f8abea58a..77a4567ff8 100644
--- a/public/language/pl/notifications.json
+++ b/public/language/pl/notifications.json
@@ -10,6 +10,15 @@
"return_to": "Wróć do %1",
"new_notification": "Nowe powiadomienie",
"you_have_unread_notifications": "Masz nieprzeczytane powiadomienia.",
+ "all": "All",
+ "topics": "Topics",
+ "replies": "Replies",
+ "chat": "Chats",
+ "follows": "Follows",
+ "upvote": "Upvotes",
+ "new-flags": "New Flags",
+ "my-flags": "Flags assigned to me",
+ "bans": "Bans",
"new_message_from": "Nowa wiadomość od %1",
"upvoted_your_post_in": "%1 zagłosował na Twój post w %2",
"upvoted_your_post_in_dual": "%1 oraz%2 za na twój post w %3.",
@@ -31,6 +40,7 @@
"user_started_following_you_multiple": "%1 oraz %2 innych Ciebie obserwuje.",
"new_register": "%1 wysłał żądanie rejestracji.",
"new_register_multiple": "Są %1 nowe żądania rejestracji.",
+ "flag_assigned_to_you": "Flag %1 has been assigned to you",
"email-confirmed": "E-mail potwierdzony",
"email-confirmed-message": "Dziękujemy za potwierdzenie maila. Twoje konto zostało aktywowane.",
"email-confirm-error-message": "Wystąpił problem przy aktywacji - kod jest błędny lub przestarzały",
diff --git a/public/language/pl/user.json b/public/language/pl/user.json
index c4ba5ed631..75547f5c27 100644
--- a/public/language/pl/user.json
+++ b/public/language/pl/user.json
@@ -130,5 +130,6 @@
"info.username-history": "Historia nazwy użytkownika",
"info.email-history": "Historia adresu e-mail",
"info.moderation-note": "Notka moderatora",
- "info.moderation-note.success": "Notka nie została zapisana"
+ "info.moderation-note.success": "Notka nie została zapisana",
+ "info.moderation-note.add": "Add note"
}
\ No newline at end of file
diff --git a/public/language/pt-BR/admin/advanced/errors.json b/public/language/pt-BR/admin/advanced/errors.json
index 67ac477f0a..90c85005fa 100644
--- a/public/language/pt-BR/admin/advanced/errors.json
+++ b/public/language/pt-BR/admin/advanced/errors.json
@@ -8,7 +8,7 @@
"clear-error-log": "Limpar Log de Erros",
"route": "Rota",
"count": "Contagem",
- "no-routes-not-found": "Hooray! No 404 errors!",
+ "no-routes-not-found": "Ihuul! Sem erros 404!",
"clear404-confirm": "Você tem certeza que deseja limpar todos os logs de erro 404?",
"clear404-success": "Erros de \"404 Não Encontrada\" apagados"
}
\ No newline at end of file
diff --git a/public/language/pt-BR/admin/general/dashboard.json b/public/language/pt-BR/admin/general/dashboard.json
index d818f5f754..1722d960b0 100644
--- a/public/language/pt-BR/admin/general/dashboard.json
+++ b/public/language/pt-BR/admin/general/dashboard.json
@@ -2,9 +2,9 @@
"forum-traffic": "Tráfego do Forum",
"page-views": "Visualizações de Página",
"unique-visitors": "Visitantes Únicos",
- "users": "Users",
+ "users": "Usuários",
"posts": "Posts",
- "topics": "Topics",
+ "topics": "Tópicos",
"page-views-last-month": "Visualizações de página no Último Mês",
"page-views-this-month": "Visualizações de Página Este Mês",
"page-views-last-day": "Visualizações de página nas últimas 24 horas",
@@ -21,13 +21,14 @@
"upgrade-available": "pdf,xls,doc). An empty list means all extensions are allowed.",
+ "allowed-file-extensions-help": "Digite uma lista separada por vírguls fr extensões de arquivos aqui (ex. pdf,xls,doc). Uma lista vazia significa que todas as extensões são permitidas.",
"profile-avatars": "Avatares de Perfil",
"allow-profile-image-uploads": "Permitir usuários de enviar imagens de perfil",
"convert-profile-image-png": "Converter imagens de perfil enviadas para PNG",
diff --git a/public/language/pt-BR/groups.json b/public/language/pt-BR/groups.json
index 4e62ea9fb9..9edc536dfa 100644
--- a/public/language/pt-BR/groups.json
+++ b/public/language/pt-BR/groups.json
@@ -27,6 +27,7 @@
"details.disableJoinRequests": "Desabilitar pedidos de participação",
"details.grant": "Conceder/Retomar a Posse",
"details.kick": "Chutar",
+ "details.kick_confirm": "Are you sure you want to remove this member from the group?",
"details.owner_options": "Administração do Grupo",
"details.group_name": "Nome do Grupo",
"details.member_count": "Número de Membros",
diff --git a/public/language/pt-BR/notifications.json b/public/language/pt-BR/notifications.json
index f189833c1d..2f2aaed17a 100644
--- a/public/language/pt-BR/notifications.json
+++ b/public/language/pt-BR/notifications.json
@@ -10,6 +10,15 @@
"return_to": "Voltar para %1",
"new_notification": "Nova Notificação",
"you_have_unread_notifications": "Você possui notificações não lidas.",
+ "all": "All",
+ "topics": "Topics",
+ "replies": "Replies",
+ "chat": "Chats",
+ "follows": "Follows",
+ "upvote": "Upvotes",
+ "new-flags": "New Flags",
+ "my-flags": "Flags assigned to me",
+ "bans": "Bans",
"new_message_from": "Nova mensagem de %1",
"upvoted_your_post_in": "%1 deu voto positivo para seu post em %2.",
"upvoted_your_post_in_dual": "%1 e %2 deram voto positivo ao seu post em %3.",
@@ -19,9 +28,9 @@
"user_flagged_post_in": "%1 sinalizou um post em %2",
"user_flagged_post_in_dual": "%1 e %2 sinalizaram um post em %3",
"user_flagged_post_in_multiple": "%1 e %2 outros sinalizaram um post em %3",
- "user_flagged_user": "%1 flagged a user profile (%2)",
- "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)",
- "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)",
+ "user_flagged_user": "%1 sinalizou um perfil de usuário (%2)",
+ "user_flagged_user_dual": "%1 e %2 sinalizaram um perfil de usuário (%3)",
+ "user_flagged_user_multiple": "%1 e %2 outros sinalizaram um perfil de usuário (%3)",
"user_posted_to": "%1 postou uma resposta para: %2",
"user_posted_to_dual": "%1 e %2 postaram respostas para: %3",
"user_posted_to_multiple": "%1 e %2 outros postaram respostas para: %3",
@@ -31,6 +40,7 @@
"user_started_following_you_multiple": "%1 e %2 outros começaram a lhe acompanhar.",
"new_register": "%1 lhe enviou um pedido de cadastro.",
"new_register_multiple": "Há %1 pedidos de registro aguardando revisão.",
+ "flag_assigned_to_you": "Flag %1 has been assigned to you",
"email-confirmed": "Email Confirmado",
"email-confirmed-message": "Obrigado por validar o seu email. Agora sua conta está plenamente ativada.",
"email-confirm-error-message": "Houve um problema ao validar o seu endereço de email. Talvez o código era invalido ou tenha expirado.",
diff --git a/public/language/pt-BR/pages.json b/public/language/pt-BR/pages.json
index 7a27b39a3c..42444ed4bd 100644
--- a/public/language/pt-BR/pages.json
+++ b/public/language/pt-BR/pages.json
@@ -6,7 +6,7 @@
"popular-month": "Tópicos populares deste mês",
"popular-alltime": "Tópicos populares de todos os tempos",
"recent": "Tópicos Recentes",
- "flagged-content": "Flagged Content",
+ "flagged-content": "Conteúdo Sinalizado",
"ip-blacklist": "Lista negra de IPs",
"users/online": "Usuários Online",
"users/latest": "Últimos Usuários",
@@ -27,8 +27,8 @@
"group": "%1 grupo",
"chats": "Chats",
"chat": "Conversando com %1",
- "flags": "Flags",
- "flag-details": "Flag %1 Details",
+ "flags": "Sinalizações",
+ "flag-details": "Detalhes da Sinalização %1",
"account/edit": "Editando \"%1\"",
"account/edit/password": "Editando senha de \"%1\"",
"account/edit/username": "Editando nome de usuário de \"%1\"",
diff --git a/public/language/pt-BR/search.json b/public/language/pt-BR/search.json
index 8cab1cc17d..43d847db48 100644
--- a/public/language/pt-BR/search.json
+++ b/public/language/pt-BR/search.json
@@ -12,7 +12,7 @@
"reply-count": "Contagem de Respostas",
"at-least": "No mínimo",
"at-most": "No máximo",
- "relevance": "Relevance",
+ "relevance": "Relevância",
"post-time": "Data da postagem",
"newer-than": "Mais novo que",
"older-than": "Mais antigo que",
diff --git a/public/language/pt-BR/topic.json b/public/language/pt-BR/topic.json
index 94c012b3e8..483c769ade 100644
--- a/public/language/pt-BR/topic.json
+++ b/public/language/pt-BR/topic.json
@@ -13,8 +13,8 @@
"notify_me": "Seja notificado de novas respostas nesse tópico",
"quote": "Citar",
"reply": "Responder",
- "replies_to_this_post": "%1 Replies",
- "last_reply_time": "Last reply",
+ "replies_to_this_post": "%1 Respostas",
+ "last_reply_time": "Última resposta",
"reply-as-topic": "Responder como tópico",
"guest-login-reply": "Entre para responder",
"edit": "Editar",
diff --git a/public/language/pt-BR/user.json b/public/language/pt-BR/user.json
index d3e5415207..28a5741924 100644
--- a/public/language/pt-BR/user.json
+++ b/public/language/pt-BR/user.json
@@ -33,7 +33,7 @@
"chat": "Chat",
"chat_with": "Continuar a conversa com %1",
"new_chat_with": "Iniciar uma nova conversa com %1",
- "flag-profile": "Flag Profile",
+ "flag-profile": "Perfil da Sinalização",
"follow": "Seguir",
"unfollow": "Deixar de Seguir",
"more": "Mais",
@@ -65,8 +65,8 @@
"remove_uploaded_picture": "Remover Foto Enviada",
"upload_cover_picture": "Fazer upload de imagem de capa ",
"remove_cover_picture_confirm": "Tem certeza que deseja remover a imagem de capa?",
- "crop_picture": "Crop picture",
- "upload_cropped_picture": "Crop and upload",
+ "crop_picture": "Cortar imagem",
+ "upload_cropped_picture": "Cortar e enviar",
"settings": "Configurações",
"show_email": "Mostrar Meu Email",
"show_fullname": "Mostrar Meu Nome Completo",
@@ -130,5 +130,6 @@
"info.username-history": "Histórico do Nome de Usuário",
"info.email-history": "Histórico do Email",
"info.moderation-note": "Nota da Moderação",
- "info.moderation-note.success": "Nota da moderação salva"
+ "info.moderation-note.success": "Nota da moderação salva",
+ "info.moderation-note.add": "Add note"
}
\ No newline at end of file
diff --git a/public/language/pt-PT/admin/general/dashboard.json b/public/language/pt-PT/admin/general/dashboard.json
index a70dda322e..02046bd17a 100644
--- a/public/language/pt-PT/admin/general/dashboard.json
+++ b/public/language/pt-PT/admin/general/dashboard.json
@@ -21,6 +21,7 @@
"upgrade-available": "
การแก้ไขนี้ไม่สามารถแก้ไขให้ย้อนกลับมาเหมือนเดิมได้ คุณจะไม่สามารถกู้ข้อมูลของคุณกลับมาได้เลย
กรอก ชื่อสมาชิกของคุณ เพื่อยืนยันการลบบัญชีของคุณ",
- "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data
",
- "account-deleted": "Account deleted",
+ "delete_account_confirm": "คุณต้องการลบบัญชีของคุณใช่หรือไม่?
การกระทำนี้ไม่สามารถกู้คืนได้ ข้อมูลบัญชีของคุณจะถูกลบทั้งหมด
กรอกชื่อผู้ใช้ของคุณ เพื่อยืนยันการลบบัญชีของ",
+ "delete_this_account_confirm": "คุณต้องการลบบัญชีนี้ใช่หรือไม่?
การกระทำนี้ไม่สามารถกู้คืนได้ ข้อมูลบัญชีนี้จะถูกลบทั้งหมด",
+ "account-deleted": "บัญชีถูกลบแล้ว",
"fullname": "ชื่อเต็ม",
"website": "เว็บไซต์",
"location": "สถานที่",
@@ -23,27 +23,27 @@
"profile": "รายละเอียด",
"profile_views": "ดูข้อมูลส่วนตัว",
"reputation": "ชื่อเสียง",
- "bookmarks": "Bookmarks",
+ "bookmarks": "ที่คั่นหน้า",
"watched": "ดูแล้ว",
"followers": "คนติดตาม",
"following": "ติดตาม",
- "aboutme": "About me",
+ "aboutme": "เกี่ยวกับฉัน",
"signature": "ลายเซ็น",
"birthday": "วันเกิด",
"chat": "แชท",
- "chat_with": "Continue chat with %1",
- "new_chat_with": "Start new chat with %1",
- "flag-profile": "Flag Profile",
+ "chat_with": "สนทนาต่อกับ %1",
+ "new_chat_with": "เริ่มสนทนากับ %1",
+ "flag-profile": "รายงานผู้ใช้",
"follow": "ติดตาม",
"unfollow": "เลิกติดตาม",
- "more": "More",
+ "more": "เพิ่มเติม",
"profile_update_success": "ข้อมูลประวัติส่วนตัวได้รับการแก้ไขแล้ว",
"change_picture": "เปลี่ยนรูป",
- "change_username": "Change Username",
- "change_email": "Change Email",
+ "change_username": "เปลี่ยนชื่อผู้ใช้",
+ "change_email": "เปลี่ยนอีเมล",
"edit": "แก้ไข",
- "edit-profile": "Edit Profile",
- "default_picture": "Default Icon",
+ "edit-profile": "แก้ไขข้อมูลส่วนตัว",
+ "default_picture": "แก้ไขไอคอน",
"uploaded_picture": "อัปโหลดรูป",
"upload_new_picture": "อัพโหลดรูปใหม่",
"upload_new_picture_from_url": "อัปโหลดรูปจาก URL",
@@ -57,20 +57,20 @@
"change_password_success": "รหัสผ่านของคุณได้รับการแก้ไขแล้ว",
"confirm_password": "ยืนยันรหัสผ่าน",
"password": "รหัสผ่าน",
- "username_taken_workaround": "ชื่อนี้มีคนใช้แล้ว เราเลยแก้ไขชื่อคุณ โดยคุณจะถูกรู้จักในชื่อ %1",
- "password_same_as_username": "Your password is the same as your username, please select another password.",
- "password_same_as_email": "Your password is the same as your email, please select another password.",
- "upload_picture": "อัปโหลดรูป",
- "upload_a_picture": "อัปโหลดรูป",
- "remove_uploaded_picture": "Remove Uploaded Picture",
- "upload_cover_picture": "Upload cover picture",
- "remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?",
- "crop_picture": "Crop picture",
- "upload_cropped_picture": "Crop and upload",
+ "username_taken_workaround": "ชื้อผู้ใช้นี้ถูกใช้แล้ว เราทำการแก้ไขชื่อผู้ใช้ของคุณเล็กน้อยเป็น %1",
+ "password_same_as_username": "คุณใช้รหัสผ่านเดียวกับชื่อผู้ใช้ กรุณาเปลี่ยนรหัสผ่านใหม่",
+ "password_same_as_email": "คุณใช้รหัสผ่านเดียวกับอีเมล กรุณาเปลี่ยนรหัสผ่านใหม่",
+ "upload_picture": "อัพโหลดรูป",
+ "upload_a_picture": "อัพโหลดรูป",
+ "remove_uploaded_picture": "ลบภาพที่อัพโหลดไว้",
+ "upload_cover_picture": "อัพโหลดภาพหน้าปก",
+ "remove_cover_picture_confirm": "คุณต้องการลบภาพหน้าปกใช่หรือไม่?",
+ "crop_picture": "ตัดภาพ",
+ "upload_cropped_picture": "ตัดภาพและอัพโหลด",
"settings": "ตั้งค่า",
- "show_email": "แสดงอีเมล์",
- "show_fullname": "แสดงชื่อจริง",
- "restrict_chats": "อนุญาตข้อความสนทนาจากสมาชิกที่ฉันติดตาม",
+ "show_email": "แสดงอีเมลของฉัน",
+ "show_fullname": "แสดงชื่อจริงของฉัน",
+ "restrict_chats": "รับข้อความสนทนาจากคนที่ฉันติดตามเท่านั้น",
"digest_label": "สมัครรับข่าวสารจาก Digest",
"digest_description": "สมัครรับอีเมลอัพเดทข้อมูลของบอร์ดสนทนา (ข้อความแจ้งเตือนและหัวข้อใหม่ๆ) ตามรายการที่ตั้งไว้",
"digest_off": "ปิด",
@@ -79,28 +79,28 @@
"digest_monthly": "รายเดือน",
"send_chat_notifications": "ส่งอีเมลเมื่อมีข้อความใหม่เข้ามาขณะที่ฉันไม่ได้ออนไลน์",
"send_post_notifications": "ส่งอีเมลให้ฉันเมื่อมีการตอบกลับในหัวข้อที่ฉันเคยบอกรับเป็นสมาชิกไว้",
- "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.",
+ "settings-require-reload": "การตั้งค่าบางอย่างต้องโหลดหน้าใหม่ คลิกที่นี่เพื่อโหลดหน้าใหม่",
"has_no_follower": "ผู้ใช้รายนี้ไม่มีใครติดตาม :(",
"follows_no_one": "ผู้ใช้รายนี้ไม่ติดตามใคร :(",
- "has_no_posts": "This user hasn't posted anything yet.",
- "has_no_topics": "This user hasn't posted any topics yet.",
- "has_no_watched_topics": "This user hasn't watched any topics yet.",
- "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.",
- "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.",
- "has_no_voted_posts": "This user has no voted posts",
- "email_hidden": "ซ่อนอีเมล์",
+ "has_no_posts": "ผู้ใช้นี้ไม่ได้โพสต์ข้อความใดๆ",
+ "has_no_topics": "ผู้ใช้นี้ยังไม่เคยตั้งกระทู้ใดๆ",
+ "has_no_watched_topics": "ผู้ใช้นี้ไม่ได้ติดตามกระทู้ใดๆ",
+ "has_no_upvoted_posts": "ผู้ใช้นี้ไม่ได้โหวตขึ้นให้ข้อความใดๆ",
+ "has_no_downvoted_posts": "ผู้ใช้นี้ไม่ได้โหวตลงให้ข้อความใดๆ",
+ "has_no_voted_posts": "ผู้ใช้นี้ไม่เคยโหวตข้อความ",
+ "email_hidden": "ซ่อนอีเมล",
"hidden": "ซ่อน",
- "paginate_description": "Paginate topics and posts instead of using infinite scroll",
+ "paginate_description": "ใช้การแบ่งหน้ากระทู้และข้อความแทนการเลื่อนต่อเรื่อยๆ",
"topics_per_page": "จำนวนกระทู้ต่อหน้า",
- "posts_per_page": "จำนวนโพสต์ต่อหน้า",
- "notification_sounds": "Play a sound when you receive a notification",
- "notifications_and_sounds": "Notifications & Sounds",
- "incoming-message-sound": "Incoming message sound",
- "outgoing-message-sound": "Outgoing message sound",
- "notification-sound": "Notification sound",
- "no-sound": "No sound",
+ "posts_per_page": "จำนวนข้อความต่อหน้า",
+ "notification_sounds": "เล่นเสียงเมื่อมีการแจ้งเตือน",
+ "notifications_and_sounds": "เสียงและการแจ้งเตือน",
+ "incoming-message-sound": "เสียงข้อความเข้า",
+ "outgoing-message-sound": "เสียงข้อความออก",
+ "notification-sound": "เสียงแจ้งเตือน",
+ "no-sound": "ไม่มีเสียง",
"browsing": "เปิดดูการตั้งค่า",
- "open_links_in_new_tab": "Open outgoing links in new tab",
+ "open_links_in_new_tab": "เปิดลิงค์ในแท็บใหม่",
"enable_topic_searching": "เปิดใช้การค้นหาแบบ In-Topic",
"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",
"delay_image_loading": "Delay Image Loading",
@@ -130,5 +130,6 @@
"info.username-history": "Username History",
"info.email-history": "Email History",
"info.moderation-note": "Moderation Note",
- "info.moderation-note.success": "Moderation note saved"
+ "info.moderation-note.success": "Moderation note saved",
+ "info.moderation-note.add": "Add note"
}
\ No newline at end of file
diff --git a/public/language/th/users.json b/public/language/th/users.json
index 423257816b..483057d5cd 100644
--- a/public/language/th/users.json
+++ b/public/language/th/users.json
@@ -2,20 +2,20 @@
"latest_users": "ผู้ใช้งานล่าสุด",
"top_posters": "ผู้ที่โพสต์มากที่สุด",
"most_reputation": "ผู้ที่มีชื่อเสียงมากที่สุด",
- "most_flags": "Most Flags",
+ "most_flags": "ผู้ที่ถูกรายงานมากที่สุด",
"search": "ค้นหา",
- "enter_username": "ใส่ชื่อผู้ใช้เพื่อค้นหา",
+ "enter_username": "กรอกชื่อผู้ใช้เพื่อค้นหา",
"load_more": "โหลดเพิ่มเติม",
- "users-found-search-took": "%1 user(s) found! Search took %2 seconds.",
- "filter-by": "Filter By",
- "online-only": "Online only",
- "invite": "Invite",
- "invitation-email-sent": "An invitation email has been sent to %1",
- "user_list": "User List",
- "recent_topics": "Recent Topics",
- "popular_topics": "Popular Topics",
- "unread_topics": "Unread Topics",
- "categories": "Categories",
- "tags": "Tags",
- "no-users-found": "No users found!"
+ "users-found-search-took": "พบ %1 ผู้ใช้! การค้นหาใช้เวลาทั้งหมด %2 วินาที",
+ "filter-by": "การกรอง",
+ "online-only": "กำลังออนไลน์เท่านั้น",
+ "invite": "เชิญ",
+ "invitation-email-sent": "อีเมลคำเชิญถูกส่งไปยัง %1 เรียบร้อย",
+ "user_list": "รายการผู้ใช้",
+ "recent_topics": "กระทู้ล่าสุด",
+ "popular_topics": "กระทู้ยอดนิยม",
+ "unread_topics": "กระทู้ที่ยังไม่อ่าน",
+ "categories": "หมวดหมู่",
+ "tags": "แท็ก",
+ "no-users-found": "ไม่พบผู้ใช้ใดๆ!"
}
\ No newline at end of file
diff --git a/public/language/tr/admin/general/dashboard.json b/public/language/tr/admin/general/dashboard.json
index 33e63acd78..fbc3d434d1 100644
--- a/public/language/tr/admin/general/dashboard.json
+++ b/public/language/tr/admin/general/dashboard.json
@@ -21,6 +21,7 @@
"upgrade-available": "
Це пре-релізна версія NodeBB. Можуть виникати неочікувані помилки.
", + "running-in-development": "Форум працює в режимі розробки. Форум потенційно може бути незахищеним, будь-ласка повідомте вашого системного адміністратора.", "notices": "Сповіщення", "restart-not-required": "Перезавантаження не потрібне", diff --git a/public/language/uk/admin/settings/general.json b/public/language/uk/admin/settings/general.json index 72ff0d6fd9..8717738b20 100644 --- a/public/language/uk/admin/settings/general.json +++ b/public/language/uk/admin/settings/general.json @@ -27,5 +27,6 @@ "touch-icon.help": "Рекомендовані розмір та формат: 192x192, PNG. Якщо сенсорна іконка не задана, буде використано фавіконку NodeBB.", "outgoing-links": "Зовнішні посилання", "outgoing-links.warning-page": "Використовувати сторінку попередження про зовнішній перехід", - "search-default-sort-by": "Типовий порядок результатів пошуку" + "search-default-sort-by": "Типовий порядок результатів пошуку", + "outgoing-links.whitelist": "Безпечні домени для пропуску сторінки попередження" } \ No newline at end of file diff --git a/public/language/uk/admin/settings/reputation.json b/public/language/uk/admin/settings/reputation.json index 3feb96319e..d69bd9b0c8 100644 --- a/public/language/uk/admin/settings/reputation.json +++ b/public/language/uk/admin/settings/reputation.json @@ -2,6 +2,7 @@ "reputation": "Налаштування репутації", "disable": "Вимкнути систему репутації", "disable-down-voting": "Вимкнути голосування проти", + "votes-are-public": "Всі голоси публічні", "thresholds": "Допуски активності", "min-rep-downvote": "Мінімальна репутація для голосування проти постів", "min-rep-flag": "Мінімальна репутація для подання скарг на пости" diff --git a/public/language/uk/email.json b/public/language/uk/email.json index 48574768db..386af1ca97 100644 --- a/public/language/uk/email.json +++ b/public/language/uk/email.json @@ -1,36 +1,36 @@ { - "password-reset-requested": "Отриман запит на відновлення паролю - %1!", + "password-reset-requested": "Отриманий запит на відновлення паролю - %1!", "welcome-to": "Ласкаво просимо до %1", "invite": "Запрошення від %1", "greeting_no_name": "Привіт", "greeting_with_name": "Привіт %1", "welcome.text1": "Дякуємо за реєстрацію з %1!", - "welcome.text2": "Щоб повністю активувати ваш аккаунт, нам потрібно верефікувати володіння е-мейлом, який ви вказали при реєстрації ", - "welcome.text3": "Адміністратор схвалив ваш запит на реєстрацію. Ви можете залогінитись, використовуючи свій пароль та назву аккаунту", - "welcome.cta": "Натисніть тут, щоб підтвердити вашу скриньку", + "welcome.text2": "Щоб повністю активувати ваш акаунт, нам потрібно перевірити, що вам належить електронна адреса, яку ви вказали при реєстрації ", + "welcome.text3": "Адміністратор схвалив ваш запит на реєстрацію. Ви можете залогінитись, використовуючи свій пароль та назву акаунту", + "welcome.cta": "Натисніть тут, щоб підтвердити вашу електронну адресу", "invitation.text1": "%1 запросив вас приєднатися до %2", - "invitation.ctr": "Натисніть тут, щоб створити аккаунт", - "reset.text1": "Ми отримали запит на відновлення вашого паролю, можливо тому, что ви його забули. Якщо це не потрібно - проігноруйте цей лист", + "invitation.ctr": "Натисніть тут, щоб створити акаунт", + "reset.text1": "Ми отримали запит на відновлення вашого паролю, можливо тому, что ви його забули. Якщо вам це не потрібно - проігноруйте цей лист", "reset.text2": "Щоб продовжити відновлення паролю, будь ласка, перейдіть за посиланням", - "reset.cta": "Натисніть щоб скинути Ваш пароль", + "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.unsub.info": "Цей дайджест був висланий вам, згідно ваших налаштувань підписки", + "digest.no_topics": "Не було активних тем за останні %1", "digest.day": "день", "digest.week": "тиждень", "digest.month": "місяць", "digest.subject": "Дайджест для %1", - "notif.chat.subject": "Новє повідомлення чату було отриманно від %1", + "notif.chat.subject": "Отримане нове повідомлення чату від %1", "notif.chat.cta": "Натисніть тут, щоб продовжити розмову", "notif.chat.unsub.info": "Це повідомлення чату було вислано вам, згідно ваших налаштувань підписки", "notif.post.cta": "Натисніть тут, щоб повністю прочитати статтю", - "notif.post.unsub.info": "Це повідомлення пошти було вислано вам, згідно ваших налаштувань підписки", - "test.text1": "Це пробний лист, для верифікації адресату. Всі налаштування вірні для NodeBB.", + "notif.post.unsub.info": "Це поштове повідомлення було вислано вам, згідно ваших налаштувань підписки", + "test.text1": "Це пробний лист для верифікації поштової служби. Всі налаштування вірні для NodeBB.", "unsub.cta": "Натисніть тут, щоб змінити ці налаштування", "closing": "Дякуємо!" } \ No newline at end of file diff --git a/public/language/uk/global.json b/public/language/uk/global.json index 6fab3e2484..bab1461cc6 100644 --- a/public/language/uk/global.json +++ b/public/language/uk/global.json @@ -16,7 +16,7 @@ "please_log_in": "Увійдіть, будь-ласка", "logout": "Вийти", "posting_restriction_info": "Наразі постити можуть лише зареєстровані користувачі, натисніть тут щоб увійти.", - "welcome_back": "З повернення", + "welcome_back": "З поверненням", "you_have_successfully_logged_in": "Ви успішно увійшли", "save_changes": "Зберегти зміни", "save": "Зберегти", diff --git a/public/language/uk/groups.json b/public/language/uk/groups.json index e7f6b48aa5..5115079c01 100644 --- a/public/language/uk/groups.json +++ b/public/language/uk/groups.json @@ -27,6 +27,7 @@ "details.disableJoinRequests": "Вимкнути запити на приєднання", "details.grant": "Надати/забрати права адміністратора", "details.kick": "Вигнати", + "details.kick_confirm": "Ви впевнені, що бажаєте видалити цього користувача з групи?", "details.owner_options": "Адміністрація групи", "details.group_name": "Назва групи", "details.member_count": "Кількість учасників", diff --git a/public/language/uk/notifications.json b/public/language/uk/notifications.json index e716f9932d..4cb1239b14 100644 --- a/public/language/uk/notifications.json +++ b/public/language/uk/notifications.json @@ -10,6 +10,15 @@ "return_to": "Повернутись до %1", "new_notification": "Нове сповіщення", "you_have_unread_notifications": "У вас немає непрочитаних сповіщень", + "all": "Всі", + "topics": "Теми", + "replies": "Відповіді", + "chat": "Чати", + "follows": "Вістежування", + "upvote": "Схвалення", + "new-flags": "Нові Скарги", + "my-flags": "Скарги, подані на мене", + "bans": "Бани", "new_message_from": "Нове повідомлення від %1", "upvoted_your_post_in": "%1 проголосував за ваш пост в %2.", "upvoted_your_post_in_dual": "%1 та %2 проголосували за ваш пост в %3.", @@ -31,6 +40,7 @@ "user_started_following_you_multiple": "%1 та %2 інших почали стежити за вами.", "new_register": "%1 надіслав запит на реєстрацію.", "new_register_multiple": "%1 запити на реєстрацію очікують розгляду.", + "flag_assigned_to_you": "На вас була подана скарга %1", "email-confirmed": "Електронну пошту підтверджено", "email-confirmed-message": "Дякуємо за підтвердження електронної пошти. Ваш акаунт тепер повністю активовано.", "email-confirm-error-message": "При перевірці вашої електронної пошти сталася проблема. Можливо код був недійсним або простроченим.", diff --git a/public/language/uk/user.json b/public/language/uk/user.json index 8b768580a7..bad807379e 100644 --- a/public/language/uk/user.json +++ b/public/language/uk/user.json @@ -130,5 +130,6 @@ "info.username-history": "Історія імені користувача", "info.email-history": "Історія електронної пошти", "info.moderation-note": "Коментар модератора", - "info.moderation-note.success": "Коментар модератора збережено" + "info.moderation-note.success": "Коментар модератора збережено", + "info.moderation-note.add": "Додати коментар" } \ No newline at end of file diff --git a/public/language/vi/admin/general/dashboard.json b/public/language/vi/admin/general/dashboard.json index a70dda322e..02046bd17a 100644 --- a/public/language/vi/admin/general/dashboard.json +++ b/public/language/vi/admin/general/dashboard.json @@ -21,6 +21,7 @@ "upgrade-available": "A new version (v%1) has been released. Consider upgrading your NodeBB.
", "prerelease-upgrade-available": "This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB.
", "prerelease-warning": "This is a pre-release version of NodeBB. Unintended bugs may occur.
", + "running-in-development": "Forum is running in development mode. The forum may be open to potential vulnerabilities; please contact your system administrator.", "notices": "Notices", "restart-not-required": "Restart not required", diff --git a/public/language/vi/admin/settings/general.json b/public/language/vi/admin/settings/general.json index 72ecfe641f..3f2814bd88 100644 --- a/public/language/vi/admin/settings/general.json +++ b/public/language/vi/admin/settings/general.json @@ -27,5 +27,6 @@ "touch-icon.help": "Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.", "outgoing-links": "Outgoing Links", "outgoing-links.warning-page": "Use Outgoing Links Warning Page", - "search-default-sort-by": "Search default sort by" + "search-default-sort-by": "Search default sort by", + "outgoing-links.whitelist": "Domains to whitelist for bypassing the warning page" } \ No newline at end of file diff --git a/public/language/vi/admin/settings/reputation.json b/public/language/vi/admin/settings/reputation.json index 11d6184721..f0e59e8db9 100644 --- a/public/language/vi/admin/settings/reputation.json +++ b/public/language/vi/admin/settings/reputation.json @@ -2,6 +2,7 @@ "reputation": "Reputation Settings", "disable": "Disable Reputation System", "disable-down-voting": "Disable Down Voting", + "votes-are-public": "All Votes Are Public", "thresholds": "Activity Thresholds", "min-rep-downvote": "Minimum reputation to downvote posts", "min-rep-flag": "Minimum reputation to flag posts" diff --git a/public/language/vi/groups.json b/public/language/vi/groups.json index 3e951db7c8..c6f7d5a5aa 100644 --- a/public/language/vi/groups.json +++ b/public/language/vi/groups.json @@ -27,6 +27,7 @@ "details.disableJoinRequests": "Vô hiệu hóa yêu cầu tham gia", "details.grant": "Cấp/Huỷ quyền trưởng nhóm", "details.kick": "Đá ra", + "details.kick_confirm": "Are you sure you want to remove this member from the group?", "details.owner_options": "Quản trị nhóm", "details.group_name": "Tên nhóm", "details.member_count": "Số thành viên", diff --git a/public/language/vi/notifications.json b/public/language/vi/notifications.json index 747e7562e8..875b87c7e5 100644 --- a/public/language/vi/notifications.json +++ b/public/language/vi/notifications.json @@ -10,6 +10,15 @@ "return_to": "Quay lại %1", "new_notification": "Thông báo mới", "you_have_unread_notifications": "Bạn có thông báo chưa đọc", + "all": "All", + "topics": "Topics", + "replies": "Replies", + "chat": "Chats", + "follows": "Follows", + "upvote": "Upvotes", + "new-flags": "New Flags", + "my-flags": "Flags assigned to me", + "bans": "Bans", "new_message_from": "Tin nhắn mới từ %1", "upvoted_your_post_in": "%1 đã bình chọn bài của bạn trong %2.", "upvoted_your_post_in_dual": "%1 và %2 đã tán thành với bài viết của bạn trong %3.", @@ -31,6 +40,7 @@ "user_started_following_you_multiple": "%1 và %2 người khác đã bắt đầu theo dõi bạn.", "new_register": "%1 đã gửi một yêu cầu tham gia.", "new_register_multiple": "Có %1 đơn đăng ký đang chờ xem xét.", + "flag_assigned_to_you": "Flag %1 has been assigned to you", "email-confirmed": "Đã xác nhận email", "email-confirmed-message": "Cảm ơn bạn đã xác nhận địa chỉ email của bạn. Tài khoản của bạn đã được kích hoạt đầy đủ.", "email-confirm-error-message": "Đã có lỗi khi xác nhận địa chỉ email. Có thể đoạn mã không đúng hoặc đã hết hạn.", diff --git a/public/language/vi/user.json b/public/language/vi/user.json index cfbf45eea9..7603788230 100644 --- a/public/language/vi/user.json +++ b/public/language/vi/user.json @@ -130,5 +130,6 @@ "info.username-history": "Lịch sử tên người d", "info.email-history": "Lịch sử email", "info.moderation-note": "Ghi chú quản lí", - "info.moderation-note.success": "Đã lưu ghi chú quản l" + "info.moderation-note.success": "Đã lưu ghi chú quản l", + "info.moderation-note.add": "Add note" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/advanced/database.json b/public/language/zh-CN/admin/advanced/database.json index 0388631265..5519709794 100644 --- a/public/language/zh-CN/admin/advanced/database.json +++ b/public/language/zh-CN/admin/advanced/database.json @@ -26,7 +26,7 @@ "redis.blocked-clients": "阻止的客户端", "redis.used-memory": "已使用内存", "redis.memory-frag-ratio": "内存碎片比率", - "redis.total-connections-recieved": "已接收连接总数", + "redis.total-connections-recieved": "已接收的连接总数", "redis.total-commands-processed": "已执行命令总数", "redis.iops": "每秒实时操作数", "redis.keyspace-hits": "Keyspace 命中", diff --git a/public/language/zh-CN/admin/advanced/events.json b/public/language/zh-CN/admin/advanced/events.json index 3c890a81eb..85d741ff27 100644 --- a/public/language/zh-CN/admin/advanced/events.json +++ b/public/language/zh-CN/admin/advanced/events.json @@ -2,5 +2,5 @@ "events": "事件", "no-events": "暂无事件。", "control-panel": "事件控制面板", - "delete-events": "删除事件" + "delete-events": "清除事件" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/extend/plugins.json b/public/language/zh-CN/admin/extend/plugins.json index 06edee6076..21446a0de9 100644 --- a/public/language/zh-CN/admin/extend/plugins.json +++ b/public/language/zh-CN/admin/extend/plugins.json @@ -1,6 +1,6 @@ { "installed": "已安装", - "active": "生效中", + "active": "激活", "inactive": "未生效", "out-of-date": "已过期", "none-found": "无插件。", diff --git a/public/language/zh-CN/admin/extend/widgets.json b/public/language/zh-CN/admin/extend/widgets.json index 3c3d76eff3..36c987b0f9 100644 --- a/public/language/zh-CN/admin/extend/widgets.json +++ b/public/language/zh-CN/admin/extend/widgets.json @@ -13,7 +13,7 @@ "container.alert": "警报", "alert.confirm-delete": "确认删除此窗口部件?", - "alert.updated": "窗口部件升级", - "alert.update-success": "已成功升级窗口部件" + "alert.updated": "窗口部件更新", + "alert.update-success": "已成功更新窗口部件" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/general/dashboard.json b/public/language/zh-CN/admin/general/dashboard.json index 923a573b3f..9a17c65e68 100644 --- a/public/language/zh-CN/admin/general/dashboard.json +++ b/public/language/zh-CN/admin/general/dashboard.json @@ -21,6 +21,7 @@ "upgrade-available": "新的版本已经发布 (v%1). 请考虑更新你的 NodeBB。
", "prerelease-upgrade-available": "你正在使用NodeBB过期的测试版。新的版本已经发布 (v%1). 请考虑更新你的 NodeBB。
", "prerelease-warning": "正在使用测试版 NodeBB。可能会出现意外的 Bug。
", + "running-in-development": "论坛正处于开发模式,这可能使其暴露于潜在的危险之中;请联系您的系统管理员。", "notices": "提醒", "restart-not-required": "不需要重启", @@ -32,7 +33,7 @@ "control-panel": "系统控制", "reload": "重载", "restart": "重启", - "restart-warning": "重新载入或重启 NodeBB 会丢弃数秒内所有的连接。", + "restart-warning": "重载或重启 NodeBB 会丢失数秒内所有的连接。", "maintenance-mode": "维护模式", "maintenance-mode-title": "点击此处设置 NodeBB 的维护模式", "realtime-chart-updates": "实时图表更新", diff --git a/public/language/zh-CN/admin/manage/categories.json b/public/language/zh-CN/admin/manage/categories.json index a881fce346..77aa93ec68 100644 --- a/public/language/zh-CN/admin/manage/categories.json +++ b/public/language/zh-CN/admin/manage/categories.json @@ -12,57 +12,57 @@ "ext-link": "外部链接", "upload-image": "上传图片", "delete-image": "移除", - "category-image": "板块图片", - "parent-category": "父板块", - "optional-parent-category": "(可选)父板块", + "category-image": "版块图片", + "parent-category": "父版块", + "optional-parent-category": "(可选)父版块", "parent-category-none": "(无)", "copy-settings": "复制设置", - "optional-clone-settings": "(可选) 从板块复制设置", - "purge": "删除板块", + "optional-clone-settings": "(可选) 从版块复制设置", + "purge": "删除版块", "enable": "启用", "disable": "禁用", "edit": "编辑", - "select-category": "选择板块", - "set-parent-category": "设置父板块", + "select-category": "选择版块", + "set-parent-category": "设置父版块", - "privileges.description": "您可以在此部分中配置此板块的访问控制权限。 可以根据每个用户或每个组授予权限。 您可以通过在下面的表格中搜索,将新用户添加到此表中。", - "privileges.warning": "注意 strong>:权限设置会立即生效。 调整这些设置后,无需保存。", + "privileges.description": "您可以在此部分中配置此版块的访问控制权限。 可以根据每个用户或每个组授予权限。 您可以通过在下面的表格中搜索,将新用户添加到此表中。", + "privileges.warning": "注意:权限设置会立即生效。 调整这些设置后,无需保存。", "privileges.section-viewing": "查看权限", "privileges.section-posting": "发帖权限", "privileges.section-moderation": "审核权限", "privileges.section-user": "用户", "privileges.search-user": "添加用户", - "privileges.no-users": "此类别中没有用户特定的权限。", - "privileges.section-group": "用户组", - "privileges.group-private": "这个用户组是私密的", - "privileges.search-group": "添加用户组", + "privileges.no-users": "此版块中没有用户特定的权限。", + "privileges.section-group": "群组", + "privileges.group-private": "这个群组是私密的", + "privileges.search-group": "添加群组", "privileges.copy-to-children": "复制到子版块", - "privileges.copy-from-category": "从板块复制", - "privileges.inherit": "如果registered-users code> 组被授予特定权限,所有其他组都会收到隐式权限 strong>,即使它们未被明确定义/检查。 将显示此隐式权限,因为所有用户都是 registered-users code> 用户组的一部分,因此无需显式授予其他组的权限。",
+ "privileges.copy-from-category": "从版块复制",
+ "privileges.inherit": "如果 registered-users 组被授予特定权限,所有其他组都会收到隐式权限,即使它们未被明确定义/检查。 将显示此隐式权限,因为所有用户都是 registered-users 群组的一部分,因此无需显式授予其他组的权限。",
- "analytics.back": "返回板块列表",
- "analytics.title": "“%1”板块的统计",
- "analytics.pageviews-hourly": "图1 strong> – 此板块的每小时页面浏览量 small>",
- "analytics.pageviews-daily": "图2 strong> – 此板块的每日页面浏览量",
- "analytics.topics-daily": "图3 strong> – 每日在此板块中创建的主题 small>",
- "analytics.posts-daily": "图4 strong> – 每日在此板块中每日发布的帖子 small>",
+ "analytics.back": "返回版块列表",
+ "analytics.title": "“%1”版块的统计",
+ "analytics.pageviews-hourly": "图1 – 此版块的每小时页面浏览量",
+ "analytics.pageviews-daily": "图2 – 此版块的每日页面浏览量",
+ "analytics.topics-daily": "图3 – 每日在此版块中创建的主题",
+ "analytics.posts-daily": "图4 – 每日在此版块中每日发布的帖子",
"alert.created": "创建",
- "alert.create-success": "板块创建成功!",
- "alert.none-active": "您没有有效的板块。",
- "alert.create": "创建一个板块",
- "alert.confirm-moderate": "您确定要将审核权限授予此用户组吗? strong>此群组是公开的,任何用户都可以随意加入。",
- "alert.confirm-purge": "您确定要清除此板块“%1”吗? p>
警告! strong> 板块将被清除! h5> 清除板块将删除所有主题和帖子,并从数据库中删除板块。 如果您想暂时 em>移除板块,请使用停用板块。 p>",
- "alert.purge-success": "板块已删除!",
+ "alert.create-success": "版块创建成功!",
+ "alert.none-active": "您没有有效的版块。",
+ "alert.create": "创建一个版块",
+ "alert.confirm-moderate": "您确定要将审核权限授予此群组吗?此群组是公开的,任何用户都可以随意加入。",
+ "alert.confirm-purge": "您确定要清除此版块“%1”吗?
警告! 版块将被清除!
清除版块将删除所有主题和帖子,并从数据库中删除版块。 如果您想暂时移除版块,请使用停用版块。
",
+ "alert.purge-success": "版块已删除!",
"alert.copy-success": "设置已复制!",
- "alert.set-parent-category": "设置父板块",
- "alert.updated": "板块已更新",
- "alert.updated-success": "板块ID %1 成功更新。",
- "alert.upload-image": "上传板块图片",
+ "alert.set-parent-category": "设置父版块",
+ "alert.updated": "版块已更新",
+ "alert.updated-success": "版块ID %1 成功更新。",
+ "alert.upload-image": "上传版块图片",
"alert.find-user": "查找用户",
"alert.user-search": "在这里查找用户…",
- "alert.find-group": "查找用户组",
- "alert.group-search": "在此处搜索用户组..."
+ "alert.find-group": "查找群组",
+ "alert.group-search": "在此处搜索群组..."
}
\ No newline at end of file
diff --git a/public/language/zh-CN/admin/manage/flags.json b/public/language/zh-CN/admin/manage/flags.json
index 7c5a744488..e7274032ab 100644
--- a/public/language/zh-CN/admin/manage/flags.json
+++ b/public/language/zh-CN/admin/manage/flags.json
@@ -4,8 +4,8 @@
"by-user-search": "根据用户名搜索被举报帖子",
"category": "版块",
"sort-by": "排序",
- "sort-by.most-flags": "最多举报",
- "sort-by.most-recent": "最近",
+ "sort-by.most-flags": "次数最多",
+ "sort-by.most-recent": "提交时间",
"search": "搜索",
"dismiss-all": "全部忽略",
"none-flagged": "没有被举报的帖子!",
@@ -13,7 +13,7 @@
"read-more": "阅读更多",
"flagged-x-times": "该贴已被举报 %1 次:",
"dismiss": "忽略该举报",
- "delete-post": "删除该贴",
+ "delete-post": "删除此贴",
- "alerts.confirm-delete-post": "确认删除该贴?"
+ "alerts.confirm-delete-post": "确定删除此贴吗?"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/admin/manage/groups.json b/public/language/zh-CN/admin/manage/groups.json
index f2b90b98a0..131199f22c 100644
--- a/public/language/zh-CN/admin/manage/groups.json
+++ b/public/language/zh-CN/admin/manage/groups.json
@@ -1,31 +1,31 @@
{
- "name": "用户组名",
- "description": "用户组描述",
- "system": "系统用户组",
+ "name": "群组名",
+ "description": "群组描述",
+ "system": "系统群组",
"edit": "编辑",
- "search-placeholder": "索索",
- "create": "创建用户组",
- "description-placeholder": "一个关于你的用户组的简短描述",
+ "search-placeholder": "搜索",
+ "create": "创建群组",
+ "description-placeholder": "一个关于你的群组的简短描述",
"create-button": "创建",
- "alerts.create-failure": "哦不!创建您的用户组时出现问题。 请稍后再试!
",
- "alerts.confirm-delete": "确认要删除这个用户组么?",
+ "alerts.create-failure": "哦不!创建您的群组时出现问题。 请稍后再试!
",
+ "alerts.confirm-delete": "确认要删除这个群组么?",
"edit.name": "名字",
"edit.description": "描述",
"edit.user-title": "成员标题",
- "edit.icon": "用户组标志",
+ "edit.icon": "群组标志",
"edit.label-color": "群组标签颜色",
"edit.show-badge": "显示徽章",
- "edit.private-details": "启用此选项后,加入用户组的请求将需要组长审批。",
- "edit.private-override": "警告:系统禁用了私有用户组,优先于该选项。",
+ "edit.private-details": "启用此选项后,加入群组的请求将需要群组所有者审批。",
+ "edit.private-override": "警告:系统已禁用了私有群组,优先级高于该选项。",
"edit.disable-requests": "禁止加入请求",
"edit.hidden": "隐藏",
- "edit.hidden-details": "启用此选项后,此用户组将不在用户组列表展现,并且用户只能被手动邀请加入",
- "edit.add-user": "向此小组添加成员",
+ "edit.hidden-details": "启用此选项后,此群组将不在群组列表展现,并且用户只能被手动邀请加入",
+ "edit.add-user": "向此群组添加成员",
"edit.add-user-search": "搜索用户",
"edit.members": "成员列表",
- "control-panel": "小组控制面板",
+ "control-panel": "群组控制面板",
"revert": "重置",
"edit.no-users-found": "没有找到用户",
diff --git a/public/language/zh-CN/admin/manage/registration.json b/public/language/zh-CN/admin/manage/registration.json
index 26ec422c98..aa46fcdb49 100644
--- a/public/language/zh-CN/admin/manage/registration.json
+++ b/public/language/zh-CN/admin/manage/registration.json
@@ -1,6 +1,6 @@
{
- "queue": "队列",
- "description": "注册队列里面没有用户。
要开启这项功能,请去设置 → 用户 → 用户注册 并设置注册类型为“管理员批准”。",
+ "queue": "申请",
+ "description": "注册申请队列里面还没有用户申请。
要开启这项功能,请去设置 → 用户 → 用户注册 并设置注册类型为“管理员批准”。",
"list.name": "姓名",
"list.email": "邮件",
diff --git a/public/language/zh-CN/admin/manage/users.json b/public/language/zh-CN/admin/manage/users.json
index bb4ceadcbd..8201df27c6 100644
--- a/public/language/zh-CN/admin/manage/users.json
+++ b/public/language/zh-CN/admin/manage/users.json
@@ -10,7 +10,7 @@
"temp-ban": "暂时封禁用户",
"unban": "解禁用户",
"reset-lockout": "重设闭锁",
- "reset-flags": "重设标记",
+ "reset-flags": "重设举报",
"delete": "删除用户",
"purge": "删除用户和内容",
"download-csv": "下载CSV",
@@ -23,16 +23,16 @@
"pills.top-posters": "发帖最多",
"pills.top-rep": "声望最高",
"pills.inactive": "不活跃",
- "pills.flagged": "最多举报",
+ "pills.flagged": "举报最多",
"pills.banned": "被封禁",
"pills.search": "搜寻用户",
"search.username": "通过用户名",
"search.username-placeholder": "输入你想找的用户名",
"search.email": "通过邮箱",
- "search.email-placeholder": "输入你想找的邮箱地址",
+ "search.email-placeholder": "输入你想查询的邮箱地址",
"search.ip": "通过IP地址",
- "search.ip-placeholder": "输入你想找的IP",
+ "search.ip-placeholder": "输入你想查询的IP",
"search.not-found": "未找到用户!",
"inactive.3-months": "3个月",
@@ -43,7 +43,7 @@
"users.username": "用户名",
"users.email": "电子邮件",
"users.postcount": "发帖数",
- "users.reputation": "威望",
+ "users.reputation": "声望",
"users.flags": "举报",
"users.joined": "注册时间",
"users.last-online": "最后在线",
@@ -67,7 +67,7 @@
"alerts.button-ban-x": "封禁 %1 名用户",
"alerts.unban-success": "用户已解封!",
"alerts.lockout-reset-success": "闭锁已重置!",
- "alerts.flag-reset-success": "标记已重置!",
+ "alerts.flag-reset-success": "举报已重置!",
"alerts.no-remove-yourself-admin": "你无法撤销自己的管理员身份!",
"alerts.make-admin-success": "这些用户现在是管理员了。",
"alerts.confirm-remove-admin": "你确定要移除管理员吗?",
diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json
index 1a6771b20e..37f31c027a 100644
--- a/public/language/zh-CN/admin/menu.json
+++ b/public/language/zh-CN/admin/menu.json
@@ -11,8 +11,8 @@
"manage/categories": "版块",
"manage/tags": "话题",
"manage/users": "用户",
- "manage/registration": "注册队列",
- "manage/groups": "用户组",
+ "manage/registration": "注册申请",
+ "manage/groups": "群组",
"manage/ip-blacklist": "IP 黑名单",
"section-settings": "设置",
@@ -20,7 +20,7 @@
"settings/reputation": "声望",
"settings/email": "邮件",
"settings/user": "用户",
- "settings/group": "用户组",
+ "settings/group": "群组",
"settings/guest": "游客",
"settings/uploads": "上传",
"settings/post": "发帖",
diff --git a/public/language/zh-CN/admin/settings/advanced.json b/public/language/zh-CN/admin/settings/advanced.json
index 07184f136b..eb9bced36e 100644
--- a/public/language/zh-CN/admin/settings/advanced.json
+++ b/public/language/zh-CN/admin/settings/advanced.json
@@ -10,7 +10,7 @@
"headers.acam": "Access-Control-Allow-Methods",
"headers.acah": "Access-Control-Allow-Headers",
"traffic-management": "流量管理",
- "traffic.help": "NodeBB 拥有在高流量情况下自动拒绝请求的模块。 您可以在这里调整这些设置,虽然默认值就很棒。",
+ "traffic.help": "NodeBB 拥有在高流量情况下自动拒绝请求的模块。尽管默认值就很棒,但您可以在这里调整这些设置。",
"traffic.enable": "启用流量管理",
"traffic.event-lag": "事件循环滞后阈值(毫秒)",
"traffic.event-lag-help": "降低此值会减少页面加载的等待时间,但也会向更多用户显示“过载”消息。(需要重新启动)",
diff --git a/public/language/zh-CN/admin/settings/cookies.json b/public/language/zh-CN/admin/settings/cookies.json
index a03212d78d..d8b00e8295 100644
--- a/public/language/zh-CN/admin/settings/cookies.json
+++ b/public/language/zh-CN/admin/settings/cookies.json
@@ -6,6 +6,6 @@
"consent.link-text": "政策链接文本",
"consent.blank-localised-default": "留空以便使用 NodeBB 本地默认值",
"settings": "设置",
- "cookie-domain": "会话 cookie 域名",
+ "cookie-domain": "Session cookie 域名",
"blank-default": "留空以保持默认"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/admin/settings/general.json b/public/language/zh-CN/admin/settings/general.json
index 6addbf4f38..cbb324c9e7 100644
--- a/public/language/zh-CN/admin/settings/general.json
+++ b/public/language/zh-CN/admin/settings/general.json
@@ -27,5 +27,6 @@
"touch-icon.help": "推荐的尺寸和格式:192x192,仅限PNG格式。 如果没有指定触摸图标,NodeBB将回退到使用站点图标。",
"outgoing-links": "站外链接",
"outgoing-links.warning-page": "使用站外链接警告页",
- "search-default-sort-by": "默认搜索排序"
+ "search-default-sort-by": "默认搜索排序",
+ "outgoing-links.whitelist": "添加域名到白名单以绕过警告页面"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/admin/settings/group.json b/public/language/zh-CN/admin/settings/group.json
index d19d417f86..bd1771dd57 100644
--- a/public/language/zh-CN/admin/settings/group.json
+++ b/public/language/zh-CN/admin/settings/group.json
@@ -1,12 +1,12 @@
{
"general": "通用",
- "private-groups": "私有用户组",
- "private-groups.help": "启用此选项后,加入用户组需要组长审批(默认启用)。",
- "private-groups.warning": "注意!如果这个选项未启用并且你有私有用户组,那么你的用户组将变为公共的。",
- "allow-creation": "允许创建用户组",
- "allow-creation-help": "如果启用,用户就可以创建用户组(默认:不启用)",
- "max-name-length": "用户组名字的最大长度",
- "cover-image": "用户组封面图片",
+ "private-groups": "私有群组",
+ "private-groups.help": "启用此选项后,加入用户组需要群组所有者审批(默认启用)。",
+ "private-groups.warning": "注意!如果这个选项未启用并且你有私有群组,那么你的群组将变为公共的。",
+ "allow-creation": "允许创建群组",
+ "allow-creation-help": "如果启用,用户就可以创建群组(默认:不启用)",
+ "max-name-length": "群组名字的最大长度",
+ "cover-image": "群组封面图片",
"default-cover": "默认封面图片",
"default-cover-help": "为没有上传封面图片的群组添加以逗号分隔的默认封面图片"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/admin/settings/pagination.json b/public/language/zh-CN/admin/settings/pagination.json
index ec44dd3661..b4e16d4f7f 100644
--- a/public/language/zh-CN/admin/settings/pagination.json
+++ b/public/language/zh-CN/admin/settings/pagination.json
@@ -3,7 +3,7 @@
"enable": "在主题和帖子使用分页替代无限滚动浏览。",
"topics": "话题分页",
"posts-per-page": "每页帖子数",
- "categories": "板块分页",
+ "categories": "版块分页",
"topics-per-page": "每页主题数",
"initial-num-load": "最初加载未读,最新,热门的话题"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/admin/settings/post.json b/public/language/zh-CN/admin/settings/post.json
index a5869c1fc1..857f72b98e 100644
--- a/public/language/zh-CN/admin/settings/post.json
+++ b/public/language/zh-CN/admin/settings/post.json
@@ -6,21 +6,21 @@
"sorting.most-votes": "最多投票",
"sorting.topic-default": "默认主题排序",
"restrictions": "发帖限制",
- "restrictions.seconds-between": "发帖间隔",
- "restrictions.seconds-between-new": "对于新用户的发帖间隔",
+ "restrictions.seconds-between": "发帖间隔(单位:秒)",
+ "restrictions.seconds-between-new": "对于新用户的发帖间隔(单位:秒)",
"restrictions.rep-threshold": "取消发帖限制所需的声望值",
- "restrictions.seconds-defore-new": "见习时间",
- "restrictions.seconds-edit-after": "用户在发布后允许编辑帖子的秒数。 (0为禁用) ",
- "restrictions.seconds-delete-after": "允许在发布后删除帖子的秒数。 (0为禁用) ",
+ "restrictions.seconds-defore-new": "见习时间(单位:秒)",
+ "restrictions.seconds-edit-after": "用户在发布后允许编辑帖子的时间(0为禁用,单位:秒)",
+ "restrictions.seconds-delete-after": "用户在发布后允许删除帖子的时间(0为禁用,单位:秒)",
"restrictions.replies-no-delete": "在用户被禁止删除自己的主题后的回复数。 (0为禁用) ",
"restrictions.min-title-length": "最小标题长度",
"restrictions.max-title-length": "最大标题长度",
"restrictions.min-post-length": "最小帖子长度",
"restrictions.max-post-length": "最大帖子长度",
- "restrictions.days-until-stale": "主题过期时间",
+ "restrictions.days-until-stale": "主题过期时间(单位:天)",
"restrictions.stale-help": "如果某个主题被视为“过时”,则会向尝试回复该主题的用户显示警告。",
"timestamp": "时间戳",
- "timestamp.cut-off": "日期截止日期 (天) ",
+ "timestamp.cut-off": "日期截止日期(单位:天)",
"timestamp.cut-off-help": "日期&时间将以相对方式 (例如,“3小时前” / “5天前”) 显示,并且会依照访客语言时区转换。在某一时刻之后,可以切换该文本以显示本地化日期本身 (例如2016年11月5日15:30) 。
(默认值: 30 或一个月) 。 设置为0可始终显示日期,留空以始终显示相对时间。",
"teaser": "预览帖子",
"teaser.last-post": "最后– 显示最新的帖子,包括原帖,如果没有回复",
@@ -35,7 +35,7 @@
"signature.no-images": "禁用签名中的图片",
"signature.max-length": "签名最大长度",
"composer": "编辑器设置",
- "composer-help": "以下设置控制所示后期编辑器的功能和/或外观\n\\t\\t\\t\\t当用户创建新主题或回复现有主题时。",
+ "composer-help": "以下设置控制所示后期编辑器的功能和/或外观\n\t\t\t\t当用户创建新主题或回复现有主题时。",
"composer.show-help": "显示“帮助”选项卡",
"composer.enable-plugin-help": "允许插件将内容添加到帮助选项卡",
"composer.custom-help": "自定义帮助文本",
diff --git a/public/language/zh-CN/admin/settings/reputation.json b/public/language/zh-CN/admin/settings/reputation.json
index dc3ed12168..ec3f657d1e 100644
--- a/public/language/zh-CN/admin/settings/reputation.json
+++ b/public/language/zh-CN/admin/settings/reputation.json
@@ -2,7 +2,8 @@
"reputation": "声望设置",
"disable": "禁用声望系统",
"disable-down-voting": "禁用 踩",
- "thresholds": "活动阈值",
+ "votes-are-public": "所有投票是公开的",
+ "thresholds": "活动闸值",
"min-rep-downvote": "踩帖子所需要声望的最小值",
- "min-rep-flag": "举报帖子所需要声望的最小值"
+ "min-rep-flag": "举报帖子需要的最小声望"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/admin/settings/uploads.json b/public/language/zh-CN/admin/settings/uploads.json
index 6c52e63b11..2a4c42f933 100644
--- a/public/language/zh-CN/admin/settings/uploads.json
+++ b/public/language/zh-CN/admin/settings/uploads.json
@@ -3,7 +3,7 @@
"allow-files": "允许用户上传普通文件",
"private": "使上传的文件私有化",
"max-image-width": "缩小图片到指定宽度(单位像素)",
- "max-image-width-help": "(像素单位,默认760像素,设置为0以禁用)",
+ "max-image-width-help": "(像素单位,默认 760 px,设置为0以禁用)",
"max-file-size": "最大文件尺寸(单位 KiB)",
"max-file-size-help": "(单位 KiB,默认2048KiB)",
"allow-topic-thumbnails": "允许用户上传主题缩略图",
@@ -16,11 +16,11 @@
"default-avatar": "访客默认头像",
"upload": "上传",
"profile-image-dimension": "个人资料相片尺寸",
- "profile-image-dimension-help": "(使用像素作为单位,默认:128px)",
+ "profile-image-dimension-help": "(使用 px 作为单位,默认:128px)",
"max-profile-image-size": "个人资料相片最大大小",
- "max-profile-image-size-help": "(单位KiB,默认256KiB)",
+ "max-profile-image-size-help": "(单位 KiB ,默认256KiB)",
"max-cover-image-size": "最大封面图片文件大小",
- "max-cover-image-size-help": "(单位kb,默认:2048KiB)",
+ "max-cover-image-size-help": "(单位 KiB ,默认:2048KiB)",
"keep-all-user-images": "在服务器上保留旧头像和旧的资料封面",
"profile-covers": "资料封面",
"default-covers": "默认封面图片",
diff --git a/public/language/zh-CN/admin/settings/user.json b/public/language/zh-CN/admin/settings/user.json
index 8d30a90366..7b13c89b95 100644
--- a/public/language/zh-CN/admin/settings/user.json
+++ b/public/language/zh-CN/admin/settings/user.json
@@ -33,11 +33,11 @@
"registration-type.help": "通常 - 用户可以通过/register页面注册
\n管理员批准 - 用户注册请求会被放入 请求队列 待管理员批准。
\n管理员批准 IP地址 - 新用户不受影响,已存在帐户的IP地址注册需要管理员批准。
\n邀请制 - 用户可以通过 用户 页面邀请其它用户。
\n管理员邀请制 - 只有管理员可以通过 用户 和 admin/manage/users 页面邀请其它用户。
\n无注册 - 不开放用户注册。
",
"registration.max-invites": "每个用户最大邀请数",
"max-invites": "每个用户最大邀请数",
- "max-invites-help": "无限制填0。管理员没有邀请限制
仅在邀请制时可用",
+ "max-invites-help": "无限制填 0 。管理员没有邀请限制
仅在邀请制时可用",
"min-username-length": "最小用户名长度",
"max-username-length": "最大用户名长度",
"min-password-length": "最小密码长度",
- "max-about-me-length": "最大自我介绍长度",
+ "max-about-me-length": "自我介绍的最大长度",
"terms-of-use": "论坛使用条款 (留空即可禁用)",
"user-search": "用户搜索",
"user-search-results-per-page": "展示的结果数量",
diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json
index d7f706ff2c..a59beaf451 100644
--- a/public/language/zh-CN/error.json
+++ b/public/language/zh-CN/error.json
@@ -8,7 +8,7 @@
"invalid-pid": "无效帖子 ID",
"invalid-uid": "无效用户 ID",
"invalid-username": "无效用户名",
- "invalid-email": "无效电子邮箱",
+ "invalid-email": "无效的电子邮箱",
"invalid-title": "无效标题!",
"invalid-user-data": "无效用户数据",
"invalid-password": "无效密码",
@@ -29,14 +29,14 @@
"username-too-long": "用户名太长",
"password-too-long": "密码太长",
"user-banned": "用户已禁止",
- "user-banned-reason": "抱歉,此帐号已经被封号 (原因:%1)",
+ "user-banned-reason": "抱歉,此帐号已经被封禁 (原因:%1)",
"user-too-new": "抱歉,您需要等待 %1 秒后,才可以发帖!",
"blacklisted-ip": "对不起,您的 IP 地址已被社区禁用。如果您认为这是一个错误,请与管理员联系。",
"ban-expiry-missing": "请提供此次禁言结束日期",
"no-category": "版块不存在",
"no-topic": "主题不存在",
"no-post": "帖子不存在",
- "no-group": "用户组不存在",
+ "no-group": "群组不存在",
"no-user": "用户不存在",
"no-teaser": "主题预览不存在",
"no-privileges": "您没有权限执行此操作。",
@@ -80,13 +80,13 @@
"invalid-image-type": "无效的图像类型。允许的类型有:%1",
"invalid-image-extension": "无效的图像扩展",
"invalid-file-type": "无效文件格式,允许的格式有:%1",
- "group-name-too-short": "用户组名太短",
- "group-name-too-long": "用户组名太长",
- "group-already-exists": "用户组已存在",
- "group-name-change-not-allowed": "不允许更改用户组名称",
- "group-already-member": "已经是此用户组的成员",
- "group-not-member": "不是此用户组的成员",
- "group-needs-owner": "用户组需要指定至少一名组长",
+ "group-name-too-short": "群组名太短",
+ "group-name-too-long": "群组名太长",
+ "group-already-exists": "群组已存在",
+ "group-name-change-not-allowed": "不允许更改群组名称",
+ "group-already-member": "已经是此群组的成员",
+ "group-not-member": "不是此群组的成员",
+ "group-needs-owner": "群组需要指定至少一名群组所有者",
"group-already-invited": "您已邀请该用户",
"group-already-requested": "已提交您的请求",
"post-already-deleted": "此帖已被删除",
diff --git a/public/language/zh-CN/global.json b/public/language/zh-CN/global.json
index f864947bf4..6555431231 100644
--- a/public/language/zh-CN/global.json
+++ b/public/language/zh-CN/global.json
@@ -31,7 +31,7 @@
"header.tags": "话题",
"header.popular": "热门",
"header.users": "会员",
- "header.groups": "用户组",
+ "header.groups": "群组",
"header.chats": "聊天",
"header.notifications": "通知",
"header.search": "搜索",
@@ -45,7 +45,7 @@
"alert.success": "成功",
"alert.error": "错误",
"alert.banned": "封禁",
- "alert.banned.message": "您刚刚被封禁,现在您将退出登录。",
+ "alert.banned.message": "您刚刚被封禁了,现在您将登出站点。",
"alert.unfollow": "您已取消关注 %1!",
"alert.follow": "您已关注 %1!",
"online": "在线",
diff --git a/public/language/zh-CN/groups.json b/public/language/zh-CN/groups.json
index 22da18c205..3deaf8cb3a 100644
--- a/public/language/zh-CN/groups.json
+++ b/public/language/zh-CN/groups.json
@@ -1,34 +1,35 @@
{
- "groups": "用户组",
- "view_group": "查看用户组",
- "owner": "组长",
- "new_group": "创建用户组",
- "no_groups_found": "尚无用户组信息",
+ "groups": "群组",
+ "view_group": "查看群组",
+ "owner": "群组所有者",
+ "new_group": "创建群组",
+ "no_groups_found": "尚无群组信息",
"pending.accept": "接受",
"pending.reject": "拒绝",
- "pending.accept_all": "接受全部",
- "pending.reject_all": "拒绝全部",
+ "pending.accept_all": "全部同意",
+ "pending.reject_all": "全部拒绝",
"pending.none": "暂时没有待加入的成员",
"invited.none": "暂时没有接受邀请的成员",
"invited.uninvite": "取消邀请",
- "invited.search": "选择用户加入用户组",
+ "invited.search": "选择用户加入群组",
"invited.notification_title": "您已被邀请加入 %1",
- "request.notification_title": "来自 %1 的用户组成员请求",
+ "request.notification_title": "来自 %1 的群组成员请求",
"request.notification_text": "%1 已被邀请加入 %2",
"cover-save": "保存",
"cover-saving": "正在保存",
- "details.title": "用户组信息",
+ "details.title": "群组信息",
"details.members": "成员列表",
"details.pending": "待加入成员",
"details.invited": "已邀请成员",
- "details.has_no_posts": "此用户组的会员尚未发表任何帖子。",
+ "details.has_no_posts": "此群组的会员尚未发表任何帖子。",
"details.latest_posts": "最新帖子",
"details.private": "私有",
"details.disableJoinRequests": "禁止申请加入用户组",
"details.grant": "授予/取消管理权",
"details.kick": "踢出用户组",
- "details.owner_options": "用户组管理",
- "details.group_name": "用户组名",
+ "details.kick_confirm": "您确定要将此成员从群组中移除吗?",
+ "details.owner_options": "群组管理",
+ "details.group_name": "群组名",
"details.member_count": "用户组成员数",
"details.creation_date": "创建时间",
"details.description": "描述",
@@ -37,21 +38,21 @@
"details.change_colour": "更改颜色",
"details.badge_text": "徽章文本",
"details.userTitleEnabled": "显示组内称号",
- "details.private_help": "启用此选项后,加入用户组需要组长审批。",
+ "details.private_help": "启用此选项后,加入群组需要组长审批。",
"details.hidden": "隐藏",
- "details.hidden_help": "启用此选项后,用户组将不在用户组列表中展现,成员只能通过邀请加入。",
- "details.delete_group": "删除用户组",
- "details.private_system_help": "系统禁用了私有用户组,这个选项不起任何作用",
- "event.updated": "用户组信息已更新",
- "event.deleted": "用户组 \"%1\" 已被删除",
+ "details.hidden_help": "启用此选项后,群组将不在群组列表中展现,成员只能通过邀请加入。",
+ "details.delete_group": "删除群组",
+ "details.private_system_help": "系统禁用了私有群组,这个选项不起任何作用",
+ "event.updated": "群组信息已更新",
+ "event.deleted": "群组 \"%1\" 已被删除",
"membership.accept-invitation": "接受邀请",
"membership.invitation-pending": "邀请中",
- "membership.join-group": "加入用户组",
- "membership.leave-group": "退出用户组",
+ "membership.join-group": "加入群组",
+ "membership.leave-group": "退出群组",
"membership.reject": "拒绝",
- "new-group.group_name": "组名: ",
- "upload-group-cover": "上传组封面",
- "bulk-invite-instructions": "输入您要邀请加入此用户组的用户名,多个用户以逗号分隔",
+ "new-group.group_name": "群组名: ",
+ "upload-group-cover": "上传群组封面",
+ "bulk-invite-instructions": "输入您要邀请加入此群组的用户名,多个用户以逗号分隔",
"bulk-invite": "批量邀请",
"remove_group_cover_confirm": "确定要移除封面图片吗?"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/modules.json b/public/language/zh-CN/modules.json
index 94874032f2..235ec2c80b 100644
--- a/public/language/zh-CN/modules.json
+++ b/public/language/zh-CN/modules.json
@@ -20,7 +20,7 @@
"chat.three_months": "3个月",
"chat.delete_message_confirm": "确认删除此消息吗?",
"chat.add-users-to-room": "向此聊天室中添加成员",
- "composer.compose": "编写",
+ "composer.compose": "编写帮助",
"composer.show_preview": "显示预览",
"composer.hide_preview": "隐藏预览",
"composer.user_said_in": "%1 在 %2 中说:",
@@ -38,7 +38,7 @@
"composer.upload-picture": "上传图片",
"composer.upload-file": "上传文件",
"composer.zen_mode": "无干扰模式",
- "composer.select_category": "选择一个板块",
+ "composer.select_category": "选择一个版块",
"bootbox.ok": "确认",
"bootbox.cancel": "取消",
"bootbox.confirm": "确认",
diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json
index 39f6acb3a1..850c504005 100644
--- a/public/language/zh-CN/notifications.json
+++ b/public/language/zh-CN/notifications.json
@@ -10,15 +10,24 @@
"return_to": "返回 %1",
"new_notification": "新通知",
"you_have_unread_notifications": "您有未读的通知。",
+ "all": "所有",
+ "topics": "主题",
+ "replies": "回复",
+ "chat": "聊天",
+ "follows": "关注",
+ "upvote": "顶",
+ "new-flags": "新举报",
+ "my-flags": "指派举报给我",
+ "bans": "封禁",
"new_message_from": "来自 %1 的新消息",
"upvoted_your_post_in": "%1 在 %2 点赞了您的帖子。",
"upvoted_your_post_in_dual": "%1 和 %2 在 %3 赞了您的帖子。",
"upvoted_your_post_in_multiple": "%1 和 %2 个其他人在 %3 赞了您的帖子。",
"moved_your_post": "您的帖子已被 %1 移动到了 %2",
- "moved_your_topic": "%1 移动到了 %2",
+ "moved_your_topic": "%1 移动了 %2",
"user_flagged_post_in": "%1 在 %2 标记了一个帖子",
- "user_flagged_post_in_dual": "%1 和 %2 在 %3 标记了一个帖子",
- "user_flagged_post_in_multiple": "%1 和 %2 个其他人在 %3 标记了一个帖子",
+ "user_flagged_post_in_dual": "%1 和 %2 在 %3 举报了一个帖子",
+ "user_flagged_post_in_multiple": "%1 和 %2 个其他人在 %3 举报了一个帖子",
"user_flagged_user": "%1 举报了 (%2) 的用户资料",
"user_flagged_user_dual": "%1 和 %2 举报了 (%3) 的用户资料",
"user_flagged_user_multiple": "%1 和其他 %2 人举报了 (%3) 的用户资料",
@@ -31,8 +40,9 @@
"user_started_following_you_multiple": "%1 和 %2 个其他人关注了您。",
"new_register": "%1 发出了注册请求",
"new_register_multiple": "有 %1 条注册申请等待批准。",
+ "flag_assigned_to_you": "举报 %1 已经被指派给你",
"email-confirmed": "电子邮箱已确认",
- "email-confirmed-message": "感谢您验证您的电子邮箱。您的帐户现已全面激活。",
- "email-confirm-error-message": "验证您电子邮箱地址时出现了问题。可能是因为验证码无效或已过期。",
+ "email-confirmed-message": "感谢您验证您的电子邮箱。您的帐户现已完全激活。",
+ "email-confirm-error-message": "验证的您电子邮箱地址时出现了问题。可能是因为验证码无效或已过期。",
"email-confirm-sent": "确认邮件已发送。"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/pages.json b/public/language/zh-CN/pages.json
index 533df5539c..c76c550395 100644
--- a/public/language/zh-CN/pages.json
+++ b/public/language/zh-CN/pages.json
@@ -22,9 +22,9 @@
"registration-complete": "注册完成",
"login": "登录帐号",
"reset": "重置帐户密码",
- "categories": "板块",
- "groups": "用户组",
- "group": "%1 的用户组",
+ "categories": "版块",
+ "groups": "群组",
+ "group": "%1 的群组",
"chats": "聊天",
"chat": "与 %1 聊天",
"flags": "举报",
@@ -38,7 +38,7 @@
"account/followers": "关注 %1 的人",
"account/posts": "%1 发布的帖子",
"account/topics": "%1 创建的主题",
- "account/groups": "%1 的用户组",
+ "account/groups": "%1 的群组",
"account/bookmarks": "%1 收藏的帖子",
"account/settings": "用户设置",
"account/watched": "主题已被 %1 关注",
diff --git a/public/language/zh-CN/register.json b/public/language/zh-CN/register.json
index 11a0706cc9..af02bf10dd 100644
--- a/public/language/zh-CN/register.json
+++ b/public/language/zh-CN/register.json
@@ -12,7 +12,7 @@
"password_placeholder": "输入密码",
"confirm_password": "确认密码",
"confirm_password_placeholder": "再次输入密码",
- "register_now_button": "马上注册",
+ "register_now_button": "立即注册",
"alternative_registration": "其他方式注册",
"terms_of_use": "使用条款",
"agree_to_terms_of_use": "我同意使用条款",
diff --git a/public/language/zh-CN/search.json b/public/language/zh-CN/search.json
index 4633e600ed..2d6b500297 100644
--- a/public/language/zh-CN/search.json
+++ b/public/language/zh-CN/search.json
@@ -6,8 +6,8 @@
"titles": "标题",
"titles-posts": "标题和回帖",
"posted-by": "发表",
- "in-categories": "在版面",
- "search-child-categories": "搜索子版面",
+ "in-categories": "在版块",
+ "search-child-categories": "搜索子版块",
"has-tags": "有标签",
"reply-count": "回复数",
"at-least": "至少",
@@ -31,7 +31,7 @@
"number-of-views": "查看数",
"topic-start-date": "主题开始日期",
"username": "用户名",
- "category": "板块",
+ "category": "版块",
"descending": "倒序",
"ascending": "顺序",
"save-preferences": "保存设置",
diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json
index 5491cffe0d..cbd70048ef 100644
--- a/public/language/zh-CN/topic.json
+++ b/public/language/zh-CN/topic.json
@@ -38,7 +38,7 @@
"login_to_subscribe": "请注册或登录后,再订阅此主题。",
"markAsUnreadForAll.success": "将全部主题标为未读。",
"mark_unread": "标记为未读",
- "mark_unread.success": "未读话题",
+ "mark_unread.success": "主题已被标记为未读。",
"watch": "关注",
"unwatch": "取消关注",
"watch.title": "当此主题有新回复时,通知我",
@@ -48,7 +48,7 @@
"not-watching": "未关注",
"ignoring": "忽略中",
"watching.description": "有新回复时通知我。
在未读主题中显示。",
- "not-watching.description": "不要在有新回复时通知我。
如果这个分类未被忽略则在未读主题中显示。",
+ "not-watching.description": "不要在有新回复时通知我。
如果这个版块未被忽略则在未读主题中显示。",
"ignoring.description": "不要在有新回复时通知我。
不要在未读主题中显示该主题。",
"thread_tools.title": "主题工具",
"thread_tools.markAsUnreadForAll": "标记全部未读",
@@ -70,8 +70,8 @@
"post_delete_confirm": "确定删除此帖吗?",
"post_restore_confirm": "确定恢复此帖吗?",
"post_purge_confirm": "确认清除此回帖吗?",
- "load_categories": "正在载入板块",
- "disabled_categories_note": "停用的板块为灰色",
+ "load_categories": "正在载入版块",
+ "disabled_categories_note": "停用的版块为灰色",
"confirm_move": "移动",
"confirm_fork": "分割",
"bookmark": "书签",
diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json
index 30a707014c..1f7842a16c 100644
--- a/public/language/zh-CN/user.json
+++ b/public/language/zh-CN/user.json
@@ -1,5 +1,5 @@
{
- "banned": "封禁",
+ "banned": "已封禁",
"offline": "离线",
"username": "用户名",
"joindate": "注册日期",
@@ -8,7 +8,7 @@
"confirm_email": "确认电子邮箱",
"account_info": "账户信息",
"ban_account": "封禁账户",
- "ban_account_confirm": "您确定封禁这位用户吗?",
+ "ban_account_confirm": "您确定要封禁这位用户吗?",
"unban_account": "解禁账户",
"delete_account": "删除帐号",
"delete_account_confirm": "确认要删除您的帐户吗?
此操作是不可逆转的,您将无法恢复您的任何数据
请输入您的用户名,确认您想要删除此帐户。",
@@ -108,8 +108,8 @@
"scroll_to_my_post": "在提交回复之后显示新回复",
"follow_topics_you_reply_to": "关注你回复过的主题",
"follow_topics_you_create": "关注你创建的主题",
- "grouptitle": "用户组标题",
- "no-group-title": "不展示用户组称号",
+ "grouptitle": "群组标题",
+ "no-group-title": "不展示群组称号",
"select-skin": "选择皮肤",
"select-homepage": "选择首页",
"homepage": "首页",
@@ -117,8 +117,8 @@
"custom_route": "自定义首页路由",
"custom_route_help": "输入路由名称,前面不需要斜杠 ( 例如, \"recent\" 或 \"popular\" )",
"sso.title": "单点登录服务",
- "sso.associated": "关联到",
- "sso.not-associated": "点击这里关联",
+ "sso.associated": "已关联到",
+ "sso.not-associated": "点击这里来关联",
"info.latest-flags": "最新举报",
"info.no-flags": "没有找到被举报的帖子",
"info.ban-history": "最近封禁历史",
@@ -129,6 +129,7 @@
"info.banned-no-reason": "没有原因",
"info.username-history": "历史用户名",
"info.email-history": "历史邮箱",
- "info.moderation-note": "版主留言",
- "info.moderation-note.success": "修改未保存"
+ "info.moderation-note": "版主备注",
+ "info.moderation-note.success": "版主备注已保存",
+ "info.moderation-note.add": "添加备注"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/users.json b/public/language/zh-CN/users.json
index 253d4db756..bdc9eda8de 100644
--- a/public/language/zh-CN/users.json
+++ b/public/language/zh-CN/users.json
@@ -2,7 +2,7 @@
"latest_users": "最新会员",
"top_posters": "发帖排行",
"most_reputation": "声望排行",
- "most_flags": "最多举报",
+ "most_flags": "举报最多",
"search": "搜索",
"enter_username": "输入用户名搜索",
"load_more": "加载更多",
@@ -15,7 +15,7 @@
"recent_topics": "最新主题",
"popular_topics": "热门主题",
"unread_topics": "未读主题",
- "categories": "版面",
+ "categories": "版块",
"tags": "话题",
"no-users-found": "未找到匹配的用户!"
}
\ No newline at end of file
diff --git a/public/language/zh-TW/admin/general/dashboard.json b/public/language/zh-TW/admin/general/dashboard.json
index a70dda322e..02046bd17a 100644
--- a/public/language/zh-TW/admin/general/dashboard.json
+++ b/public/language/zh-TW/admin/general/dashboard.json
@@ -21,6 +21,7 @@
"upgrade-available": "A new version (v%1) has been released. Consider upgrading your NodeBB.
",
"prerelease-upgrade-available": "This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB.
",
"prerelease-warning": "This is a pre-release version of NodeBB. Unintended bugs may occur.
",
+ "running-in-development": "Forum is running in development mode. The forum may be open to potential vulnerabilities; please contact your system administrator.",
"notices": "Notices",
"restart-not-required": "Restart not required",
diff --git a/public/language/zh-TW/admin/settings/general.json b/public/language/zh-TW/admin/settings/general.json
index 72ecfe641f..3f2814bd88 100644
--- a/public/language/zh-TW/admin/settings/general.json
+++ b/public/language/zh-TW/admin/settings/general.json
@@ -27,5 +27,6 @@
"touch-icon.help": "Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"outgoing-links": "Outgoing Links",
"outgoing-links.warning-page": "Use Outgoing Links Warning Page",
- "search-default-sort-by": "Search default sort by"
+ "search-default-sort-by": "Search default sort by",
+ "outgoing-links.whitelist": "Domains to whitelist for bypassing the warning page"
}
\ No newline at end of file
diff --git a/public/language/zh-TW/admin/settings/reputation.json b/public/language/zh-TW/admin/settings/reputation.json
index 11d6184721..f0e59e8db9 100644
--- a/public/language/zh-TW/admin/settings/reputation.json
+++ b/public/language/zh-TW/admin/settings/reputation.json
@@ -2,6 +2,7 @@
"reputation": "Reputation Settings",
"disable": "Disable Reputation System",
"disable-down-voting": "Disable Down Voting",
+ "votes-are-public": "All Votes Are Public",
"thresholds": "Activity Thresholds",
"min-rep-downvote": "Minimum reputation to downvote posts",
"min-rep-flag": "Minimum reputation to flag posts"
diff --git a/public/language/zh-TW/groups.json b/public/language/zh-TW/groups.json
index c5eee4c161..187cf4fd7e 100644
--- a/public/language/zh-TW/groups.json
+++ b/public/language/zh-TW/groups.json
@@ -27,6 +27,7 @@
"details.disableJoinRequests": "禁止加入要求",
"details.grant": "准許/撤銷 所有權",
"details.kick": "剔除",
+ "details.kick_confirm": "Are you sure you want to remove this member from the group?",
"details.owner_options": "群組管理員",
"details.group_name": "群組名稱",
"details.member_count": "成員數",
diff --git a/public/language/zh-TW/notifications.json b/public/language/zh-TW/notifications.json
index 3e96be1089..36f9ee1dbc 100644
--- a/public/language/zh-TW/notifications.json
+++ b/public/language/zh-TW/notifications.json
@@ -10,6 +10,15 @@
"return_to": "返回 %1",
"new_notification": "新訊息通知",
"you_have_unread_notifications": "你有未讀的通知。",
+ "all": "All",
+ "topics": "Topics",
+ "replies": "Replies",
+ "chat": "Chats",
+ "follows": "Follows",
+ "upvote": "Upvotes",
+ "new-flags": "New Flags",
+ "my-flags": "Flags assigned to me",
+ "bans": "Bans",
"new_message_from": "來自 %1 的新訊息",
"upvoted_your_post_in": "%1 對你在 %2的張貼文投了正向票。",
"upvoted_your_post_in_dual": "%1 與 %2 已經對你在%3的張貼作正向投票。",
@@ -31,6 +40,7 @@
"user_started_following_you_multiple": "%1 與 %2 其他的開始跟隨你。",
"new_register": "%1傳送了註冊要求。",
"new_register_multiple": "目前有 %1 個註冊要求等待審核中。",
+ "flag_assigned_to_you": "Flag %1 has been assigned to you",
"email-confirmed": "已確認電子郵件",
"email-confirmed-message": "感謝你驗證電子郵件。你的帳戶現已完整的啟動。",
"email-confirm-error-message": "驗證你的電子郵件地址時發生問題。也許是啟動碼無效或是已過期。",
diff --git a/public/language/zh-TW/user.json b/public/language/zh-TW/user.json
index 631a63d81c..e0010019f8 100644
--- a/public/language/zh-TW/user.json
+++ b/public/language/zh-TW/user.json
@@ -130,5 +130,6 @@
"info.username-history": "Username History",
"info.email-history": "Email History",
"info.moderation-note": "Moderation Note",
- "info.moderation-note.success": "Moderation note saved"
+ "info.moderation-note.success": "Moderation note saved",
+ "info.moderation-note.add": "Add note"
}
\ No newline at end of file
diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less
index bcf6ddca58..a37682ab83 100644
--- a/public/less/admin/admin.less
+++ b/public/less/admin/admin.less
@@ -1,5 +1,6 @@
-@import "./bootstrap/bootstrap";
-@import "./bootswatch";
+@import "../../node_modules/bootstrap/less/bootstrap";
+@import "./paper/variables";
+@import "./paper/bootswatch";
@import "./mixins";
@import "./vars";
diff --git a/public/less/admin/bootstrap/.csscomb.json b/public/less/admin/bootstrap/.csscomb.json
deleted file mode 100644
index 40695a4782..0000000000
--- a/public/less/admin/bootstrap/.csscomb.json
+++ /dev/null
@@ -1,304 +0,0 @@
-{
- "always-semicolon": true,
- "block-indent": 2,
- "color-case": "lower",
- "color-shorthand": true,
- "element-case": "lower",
- "eof-newline": true,
- "leading-zero": false,
- "remove-empty-rulesets": true,
- "space-after-colon": 1,
- "space-after-combinator": 1,
- "space-before-selector-delimiter": 0,
- "space-between-declarations": "\n",
- "space-after-opening-brace": "\n",
- "space-before-closing-brace": "\n",
- "space-before-colon": 0,
- "space-before-combinator": 1,
- "space-before-opening-brace": 1,
- "strip-spaces": true,
- "unitless-zero": true,
- "vendor-prefix-align": true,
- "sort-order": [
- [
- "position",
- "top",
- "right",
- "bottom",
- "left",
- "z-index",
- "display",
- "float",
- "width",
- "min-width",
- "max-width",
- "height",
- "min-height",
- "max-height",
- "-webkit-box-sizing",
- "-moz-box-sizing",
- "box-sizing",
- "-webkit-appearance",
- "padding",
- "padding-top",
- "padding-right",
- "padding-bottom",
- "padding-left",
- "margin",
- "margin-top",
- "margin-right",
- "margin-bottom",
- "margin-left",
- "overflow",
- "overflow-x",
- "overflow-y",
- "-webkit-overflow-scrolling",
- "-ms-overflow-x",
- "-ms-overflow-y",
- "-ms-overflow-style",
- "clip",
- "clear",
- "font",
- "font-family",
- "font-size",
- "font-style",
- "font-weight",
- "font-variant",
- "font-size-adjust",
- "font-stretch",
- "font-effect",
- "font-emphasize",
- "font-emphasize-position",
- "font-emphasize-style",
- "font-smooth",
- "-webkit-hyphens",
- "-moz-hyphens",
- "hyphens",
- "line-height",
- "color",
- "text-align",
- "-webkit-text-align-last",
- "-moz-text-align-last",
- "-ms-text-align-last",
- "text-align-last",
- "text-emphasis",
- "text-emphasis-color",
- "text-emphasis-style",
- "text-emphasis-position",
- "text-decoration",
- "text-indent",
- "text-justify",
- "text-outline",
- "-ms-text-overflow",
- "text-overflow",
- "text-overflow-ellipsis",
- "text-overflow-mode",
- "text-shadow",
- "text-transform",
- "text-wrap",
- "-webkit-text-size-adjust",
- "-ms-text-size-adjust",
- "letter-spacing",
- "-ms-word-break",
- "word-break",
- "word-spacing",
- "-ms-word-wrap",
- "word-wrap",
- "-moz-tab-size",
- "-o-tab-size",
- "tab-size",
- "white-space",
- "vertical-align",
- "list-style",
- "list-style-position",
- "list-style-type",
- "list-style-image",
- "pointer-events",
- "-ms-touch-action",
- "touch-action",
- "cursor",
- "visibility",
- "zoom",
- "flex-direction",
- "flex-order",
- "flex-pack",
- "flex-align",
- "table-layout",
- "empty-cells",
- "caption-side",
- "border-spacing",
- "border-collapse",
- "content",
- "quotes",
- "counter-reset",
- "counter-increment",
- "resize",
- "-webkit-user-select",
- "-moz-user-select",
- "-ms-user-select",
- "-o-user-select",
- "user-select",
- "nav-index",
- "nav-up",
- "nav-right",
- "nav-down",
- "nav-left",
- "background",
- "background-color",
- "background-image",
- "-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
- "filter:progid:DXImageTransform.Microsoft.gradient",
- "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
- "filter",
- "background-repeat",
- "background-attachment",
- "background-position",
- "background-position-x",
- "background-position-y",
- "-webkit-background-clip",
- "-moz-background-clip",
- "background-clip",
- "background-origin",
- "-webkit-background-size",
- "-moz-background-size",
- "-o-background-size",
- "background-size",
- "border",
- "border-color",
- "border-style",
- "border-width",
- "border-top",
- "border-top-color",
- "border-top-style",
- "border-top-width",
- "border-right",
- "border-right-color",
- "border-right-style",
- "border-right-width",
- "border-bottom",
- "border-bottom-color",
- "border-bottom-style",
- "border-bottom-width",
- "border-left",
- "border-left-color",
- "border-left-style",
- "border-left-width",
- "border-radius",
- "border-top-left-radius",
- "border-top-right-radius",
- "border-bottom-right-radius",
- "border-bottom-left-radius",
- "-webkit-border-image",
- "-moz-border-image",
- "-o-border-image",
- "border-image",
- "-webkit-border-image-source",
- "-moz-border-image-source",
- "-o-border-image-source",
- "border-image-source",
- "-webkit-border-image-slice",
- "-moz-border-image-slice",
- "-o-border-image-slice",
- "border-image-slice",
- "-webkit-border-image-width",
- "-moz-border-image-width",
- "-o-border-image-width",
- "border-image-width",
- "-webkit-border-image-outset",
- "-moz-border-image-outset",
- "-o-border-image-outset",
- "border-image-outset",
- "-webkit-border-image-repeat",
- "-moz-border-image-repeat",
- "-o-border-image-repeat",
- "border-image-repeat",
- "outline",
- "outline-width",
- "outline-style",
- "outline-color",
- "outline-offset",
- "-webkit-box-shadow",
- "-moz-box-shadow",
- "box-shadow",
- "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
- "-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
- "opacity",
- "-ms-interpolation-mode",
- "-webkit-transition",
- "-moz-transition",
- "-ms-transition",
- "-o-transition",
- "transition",
- "-webkit-transition-delay",
- "-moz-transition-delay",
- "-ms-transition-delay",
- "-o-transition-delay",
- "transition-delay",
- "-webkit-transition-timing-function",
- "-moz-transition-timing-function",
- "-ms-transition-timing-function",
- "-o-transition-timing-function",
- "transition-timing-function",
- "-webkit-transition-duration",
- "-moz-transition-duration",
- "-ms-transition-duration",
- "-o-transition-duration",
- "transition-duration",
- "-webkit-transition-property",
- "-moz-transition-property",
- "-ms-transition-property",
- "-o-transition-property",
- "transition-property",
- "-webkit-transform",
- "-moz-transform",
- "-ms-transform",
- "-o-transform",
- "transform",
- "-webkit-transform-origin",
- "-moz-transform-origin",
- "-ms-transform-origin",
- "-o-transform-origin",
- "transform-origin",
- "-webkit-animation",
- "-moz-animation",
- "-ms-animation",
- "-o-animation",
- "animation",
- "-webkit-animation-name",
- "-moz-animation-name",
- "-ms-animation-name",
- "-o-animation-name",
- "animation-name",
- "-webkit-animation-duration",
- "-moz-animation-duration",
- "-ms-animation-duration",
- "-o-animation-duration",
- "animation-duration",
- "-webkit-animation-play-state",
- "-moz-animation-play-state",
- "-ms-animation-play-state",
- "-o-animation-play-state",
- "animation-play-state",
- "-webkit-animation-timing-function",
- "-moz-animation-timing-function",
- "-ms-animation-timing-function",
- "-o-animation-timing-function",
- "animation-timing-function",
- "-webkit-animation-delay",
- "-moz-animation-delay",
- "-ms-animation-delay",
- "-o-animation-delay",
- "animation-delay",
- "-webkit-animation-iteration-count",
- "-moz-animation-iteration-count",
- "-ms-animation-iteration-count",
- "-o-animation-iteration-count",
- "animation-iteration-count",
- "-webkit-animation-direction",
- "-moz-animation-direction",
- "-ms-animation-direction",
- "-o-animation-direction",
- "animation-direction"
- ]
- ]
-}
diff --git a/public/less/admin/bootstrap/.csslintrc b/public/less/admin/bootstrap/.csslintrc
deleted file mode 100644
index 005b86236c..0000000000
--- a/public/less/admin/bootstrap/.csslintrc
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "adjoining-classes": false,
- "box-sizing": false,
- "box-model": false,
- "compatible-vendor-prefixes": false,
- "floats": false,
- "font-sizes": false,
- "gradients": false,
- "important": false,
- "known-properties": false,
- "outline-none": false,
- "qualified-headings": false,
- "regex-selectors": false,
- "shorthand": false,
- "text-indent": false,
- "unique-headings": false,
- "universal-selector": false,
- "unqualified-attributes": false
-}
diff --git a/public/less/admin/bootstrap/alerts.less b/public/less/admin/bootstrap/alerts.less
deleted file mode 100644
index c4199db927..0000000000
--- a/public/less/admin/bootstrap/alerts.less
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// Alerts
-// --------------------------------------------------
-
-
-// Base styles
-// -------------------------
-
-.alert {
- padding: @alert-padding;
- margin-bottom: @line-height-computed;
- border: 1px solid transparent;
- border-radius: @alert-border-radius;
-
- // Headings for larger alerts
- h4 {
- margin-top: 0;
- // Specified for the h4 to prevent conflicts of changing @headings-color
- color: inherit;
- }
-
- // Provide class for links that match alerts
- .alert-link {
- font-weight: @alert-link-font-weight;
- }
-
- // Improve alignment and spacing of inner content
- > p,
- > ul {
- margin-bottom: 0;
- }
-
- > p + p {
- margin-top: 5px;
- }
-}
-
-// Dismissible alerts
-//
-// Expand the right padding and account for the close button's positioning.
-
-.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
-.alert-dismissible {
- padding-right: (@alert-padding + 20);
-
- // Adjust close link position
- .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
- }
-}
-
-// Alternate styles
-//
-// Generate contextual modifier classes for colorizing the alert.
-
-.alert-success {
- .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
-}
-
-.alert-info {
- .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
-}
-
-.alert-warning {
- .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
-}
-
-.alert-danger {
- .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
-}
diff --git a/public/less/admin/bootstrap/badges.less b/public/less/admin/bootstrap/badges.less
deleted file mode 100644
index 6ee16dca41..0000000000
--- a/public/less/admin/bootstrap/badges.less
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// Badges
-// --------------------------------------------------
-
-
-// Base class
-.badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: @font-size-small;
- font-weight: @badge-font-weight;
- color: @badge-color;
- line-height: @badge-line-height;
- vertical-align: middle;
- white-space: nowrap;
- text-align: center;
- background-color: @badge-bg;
- border-radius: @badge-border-radius;
-
- // Empty badges collapse automatically (not available in IE8)
- &:empty {
- display: none;
- }
-
- // Quick fix for badges in buttons
- .btn & {
- position: relative;
- top: -1px;
- }
-
- .btn-xs &,
- .btn-group-xs > .btn & {
- top: 0;
- padding: 1px 5px;
- }
-
- // Hover state, but only for links
- a& {
- &:hover,
- &:focus {
- color: @badge-link-hover-color;
- text-decoration: none;
- cursor: pointer;
- }
- }
-
- // Account for badges in navs
- .list-group-item.active > &,
- .nav-pills > .active > a > & {
- color: @badge-active-color;
- background-color: @badge-active-bg;
- }
-
- .list-group-item > & {
- float: right;
- }
-
- .list-group-item > & + & {
- margin-right: 5px;
- }
-
- .nav-pills > li > a > & {
- margin-left: 3px;
- }
-}
diff --git a/public/less/admin/bootstrap/bootstrap.less b/public/less/admin/bootstrap/bootstrap.less
deleted file mode 100644
index f0aa08f3a6..0000000000
--- a/public/less/admin/bootstrap/bootstrap.less
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
- * Bootstrap v3.3.7 (http://getbootstrap.com)
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-// Core variables and mixins
-@import "variables.less";
-@import "mixins.less";
-
-// Reset and dependencies
-@import "normalize.less";
-@import "print.less";
-@import "glyphicons.less";
-
-// Core CSS
-@import "scaffolding.less";
-@import "type.less";
-@import "code.less";
-@import "grid.less";
-@import "tables.less";
-@import "forms.less";
-@import "buttons.less";
-
-// Components
-@import "component-animations.less";
-@import "dropdowns.less";
-@import "button-groups.less";
-@import "input-groups.less";
-@import "navs.less";
-@import "navbar.less";
-@import "breadcrumbs.less";
-@import "pagination.less";
-@import "pager.less";
-@import "labels.less";
-@import "badges.less";
-@import "jumbotron.less";
-@import "thumbnails.less";
-@import "alerts.less";
-@import "progress-bars.less";
-@import "media.less";
-@import "list-group.less";
-@import "panels.less";
-@import "responsive-embed.less";
-@import "wells.less";
-@import "close.less";
-
-// Components w/ JavaScript
-@import "modals.less";
-@import "tooltip.less";
-@import "popovers.less";
-@import "carousel.less";
-
-// Utility classes
-@import "utilities.less";
-@import "responsive-utilities.less";
diff --git a/public/less/admin/bootstrap/breadcrumbs.less b/public/less/admin/bootstrap/breadcrumbs.less
deleted file mode 100644
index cb01d503fb..0000000000
--- a/public/less/admin/bootstrap/breadcrumbs.less
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// Breadcrumbs
-// --------------------------------------------------
-
-
-.breadcrumb {
- padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
- margin-bottom: @line-height-computed;
- list-style: none;
- background-color: @breadcrumb-bg;
- border-radius: @border-radius-base;
-
- > li {
- display: inline-block;
-
- + li:before {
- content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
- padding: 0 5px;
- color: @breadcrumb-color;
- }
- }
-
- > .active {
- color: @breadcrumb-active-color;
- }
-}
diff --git a/public/less/admin/bootstrap/button-groups.less b/public/less/admin/bootstrap/button-groups.less
deleted file mode 100644
index 16db0c6135..0000000000
--- a/public/less/admin/bootstrap/button-groups.less
+++ /dev/null
@@ -1,244 +0,0 @@
-//
-// Button groups
-// --------------------------------------------------
-
-// Make the div behave like a button
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle; // match .btn alignment given font-size hack above
- > .btn {
- position: relative;
- float: left;
- // Bring the "active" button to the front
- &:hover,
- &:focus,
- &:active,
- &.active {
- z-index: 2;
- }
- }
-}
-
-// Prevent double borders when buttons are next to each other
-.btn-group {
- .btn + .btn,
- .btn + .btn-group,
- .btn-group + .btn,
- .btn-group + .btn-group {
- margin-left: -1px;
- }
-}
-
-// Optional: Group multiple button groups together for a toolbar
-.btn-toolbar {
- margin-left: -5px; // Offset the first child's margin
- &:extend(.clearfix all);
-
- .btn,
- .btn-group,
- .input-group {
- float: left;
- }
- > .btn,
- > .btn-group,
- > .input-group {
- margin-left: 5px;
- }
-}
-
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
-}
-
-// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
-.btn-group > .btn:first-child {
- margin-left: 0;
- &:not(:last-child):not(.dropdown-toggle) {
- .border-right-radius(0);
- }
-}
-// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
- .border-left-radius(0);
-}
-
-// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
-.btn-group > .btn-group {
- float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group > .btn-group:first-child:not(:last-child) {
- > .btn:last-child,
- > .dropdown-toggle {
- .border-right-radius(0);
- }
-}
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
- .border-left-radius(0);
-}
-
-// On active and open, don't show outline
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-
-
-// Sizing
-//
-// Remix the default button sizing classes into new ones for easier manipulation.
-
-.btn-group-xs > .btn { &:extend(.btn-xs); }
-.btn-group-sm > .btn { &:extend(.btn-sm); }
-.btn-group-lg > .btn { &:extend(.btn-lg); }
-
-
-// Split button dropdowns
-// ----------------------
-
-// Give the line between buttons some depth
-.btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
- padding-left: 12px;
- padding-right: 12px;
-}
-
-// The clickable button for toggling the menu
-// Remove the gradient and set the same inset shadow as the :active state
-.btn-group.open .dropdown-toggle {
- .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
-
- // Show no shadow for `.btn-link` since it has no other button styles.
- &.btn-link {
- .box-shadow(none);
- }
-}
-
-
-// Reposition the caret
-.btn .caret {
- margin-left: 0;
-}
-// Carets in other button sizes
-.btn-lg .caret {
- border-width: @caret-width-large @caret-width-large 0;
- border-bottom-width: 0;
-}
-// Upside down carets for .dropup
-.dropup .btn-lg .caret {
- border-width: 0 @caret-width-large @caret-width-large;
-}
-
-
-// Vertical button groups
-// ----------------------
-
-.btn-group-vertical {
- > .btn,
- > .btn-group,
- > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
- }
-
- // Clear floats so dropdown menus can be properly placed
- > .btn-group {
- &:extend(.clearfix all);
- > .btn {
- float: none;
- }
- }
-
- > .btn + .btn,
- > .btn + .btn-group,
- > .btn-group + .btn,
- > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
- }
-}
-
-.btn-group-vertical > .btn {
- &:not(:first-child):not(:last-child) {
- border-radius: 0;
- }
- &:first-child:not(:last-child) {
- .border-top-radius(@btn-border-radius-base);
- .border-bottom-radius(0);
- }
- &:last-child:not(:first-child) {
- .border-top-radius(0);
- .border-bottom-radius(@btn-border-radius-base);
- }
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) {
- > .btn:last-child,
- > .dropdown-toggle {
- .border-bottom-radius(0);
- }
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- .border-top-radius(0);
-}
-
-
-// Justified button groups
-// ----------------------
-
-.btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
- > .btn,
- > .btn-group {
- float: none;
- display: table-cell;
- width: 1%;
- }
- > .btn-group .btn {
- width: 100%;
- }
-
- > .btn-group .dropdown-menu {
- left: auto;
- }
-}
-
-
-// Checkbox and radio options
-//
-// In order to support the browser's form validation feedback, powered by the
-// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
-// `display: none;` or `visibility: hidden;` as that also hides the popover.
-// Simply visually hiding the inputs via `opacity` would leave them clickable in
-// certain cases which is prevented by using `clip` and `pointer-events`.
-// This way, we ensure a DOM element is visible to position the popover from.
-//
-// See https://github.com/twbs/bootstrap/pull/12794 and
-// https://github.com/twbs/bootstrap/pull/14559 for more information.
-
-[data-toggle="buttons"] {
- > .btn,
- > .btn-group > .btn {
- input[type="radio"],
- input[type="checkbox"] {
- position: absolute;
- clip: rect(0,0,0,0);
- pointer-events: none;
- }
- }
-}
diff --git a/public/less/admin/bootstrap/buttons.less b/public/less/admin/bootstrap/buttons.less
deleted file mode 100644
index 9cbb8f416f..0000000000
--- a/public/less/admin/bootstrap/buttons.less
+++ /dev/null
@@ -1,166 +0,0 @@
-//
-// Buttons
-// --------------------------------------------------
-
-
-// Base styles
-// --------------------------------------------------
-
-.btn {
- display: inline-block;
- margin-bottom: 0; // For input.btn
- font-weight: @btn-font-weight;
- text-align: center;
- vertical-align: middle;
- touch-action: manipulation;
- cursor: pointer;
- background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
- border: 1px solid transparent;
- white-space: nowrap;
- .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);
- .user-select(none);
-
- &,
- &:active,
- &.active {
- &:focus,
- &.focus {
- .tab-focus();
- }
- }
-
- &:hover,
- &:focus,
- &.focus {
- color: @btn-default-color;
- text-decoration: none;
- }
-
- &:active,
- &.active {
- outline: 0;
- background-image: none;
- .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
- }
-
- &.disabled,
- &[disabled],
- fieldset[disabled] & {
- cursor: @cursor-disabled;
- .opacity(.65);
- .box-shadow(none);
- }
-
- a& {
- &.disabled,
- fieldset[disabled] & {
- pointer-events: none; // Future-proof disabling of clicks on `` elements
- }
- }
-}
-
-
-// Alternate buttons
-// --------------------------------------------------
-
-.btn-default {
- .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
-}
-.btn-primary {
- .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
-}
-// Success appears as green
-.btn-success {
- .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
-}
-// Info appears as blue-green
-.btn-info {
- .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
-}
-// Warning appears as orange
-.btn-warning {
- .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
-}
-// Danger and error appear as red
-.btn-danger {
- .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
-}
-
-
-// Link buttons
-// -------------------------
-
-// Make a button look and behave like a link
-.btn-link {
- color: @link-color;
- font-weight: normal;
- border-radius: 0;
-
- &,
- &:active,
- &.active,
- &[disabled],
- fieldset[disabled] & {
- background-color: transparent;
- .box-shadow(none);
- }
- &,
- &:hover,
- &:focus,
- &:active {
- border-color: transparent;
- }
- &:hover,
- &:focus {
- color: @link-hover-color;
- text-decoration: @link-hover-decoration;
- background-color: transparent;
- }
- &[disabled],
- fieldset[disabled] & {
- &:hover,
- &:focus {
- color: @btn-link-disabled-color;
- text-decoration: none;
- }
- }
-}
-
-
-// Button Sizes
-// --------------------------------------------------
-
-.btn-lg {
- // line-height: ensure even-numbered height of button next to large input
- .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);
-}
-.btn-sm {
- // line-height: ensure proper height of button next to small input
- .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);
-}
-.btn-xs {
- .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);
-}
-
-
-// Block button
-// --------------------------------------------------
-
-.btn-block {
- display: block;
- width: 100%;
-}
-
-// Vertically space out multiple block buttons
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-
-// Specificity overrides
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
- &.btn-block {
- width: 100%;
- }
-}
diff --git a/public/less/admin/bootstrap/carousel.less b/public/less/admin/bootstrap/carousel.less
deleted file mode 100644
index 252011e9e2..0000000000
--- a/public/less/admin/bootstrap/carousel.less
+++ /dev/null
@@ -1,270 +0,0 @@
-//
-// Carousel
-// --------------------------------------------------
-
-
-// Wrapper for the slide container and indicators
-.carousel {
- position: relative;
-}
-
-.carousel-inner {
- position: relative;
- overflow: hidden;
- width: 100%;
-
- > .item {
- display: none;
- position: relative;
- .transition(.6s ease-in-out left);
-
- // Account for jankitude on images
- > img,
- > a > img {
- &:extend(.img-responsive);
- line-height: 1;
- }
-
- // WebKit CSS3 transforms for supported devices
- @media all and (transform-3d), (-webkit-transform-3d) {
- .transition-transform(~'0.6s ease-in-out');
- .backface-visibility(~'hidden');
- .perspective(1000px);
-
- &.next,
- &.active.right {
- .translate3d(100%, 0, 0);
- left: 0;
- }
- &.prev,
- &.active.left {
- .translate3d(-100%, 0, 0);
- left: 0;
- }
- &.next.left,
- &.prev.right,
- &.active {
- .translate3d(0, 0, 0);
- left: 0;
- }
- }
- }
-
- > .active,
- > .next,
- > .prev {
- display: block;
- }
-
- > .active {
- left: 0;
- }
-
- > .next,
- > .prev {
- position: absolute;
- top: 0;
- width: 100%;
- }
-
- > .next {
- left: 100%;
- }
- > .prev {
- left: -100%;
- }
- > .next.left,
- > .prev.right {
- left: 0;
- }
-
- > .active.left {
- left: -100%;
- }
- > .active.right {
- left: 100%;
- }
-
-}
-
-// Left/right controls for nav
-// ---------------------------
-
-.carousel-control {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- width: @carousel-control-width;
- .opacity(@carousel-control-opacity);
- font-size: @carousel-control-font-size;
- color: @carousel-control-color;
- text-align: center;
- text-shadow: @carousel-text-shadow;
- background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug
- // We can't have this transition here because WebKit cancels the carousel
- // animation if you trip this while in the middle of another animation.
-
- // Set gradients for backgrounds
- &.left {
- #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
- }
- &.right {
- left: auto;
- right: 0;
- #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
- }
-
- // Hover/focus state
- &:hover,
- &:focus {
- outline: 0;
- color: @carousel-control-color;
- text-decoration: none;
- .opacity(.9);
- }
-
- // Toggles
- .icon-prev,
- .icon-next,
- .glyphicon-chevron-left,
- .glyphicon-chevron-right {
- position: absolute;
- top: 50%;
- margin-top: -10px;
- z-index: 5;
- display: inline-block;
- }
- .icon-prev,
- .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
- }
- .icon-next,
- .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
- }
- .icon-prev,
- .icon-next {
- width: 20px;
- height: 20px;
- line-height: 1;
- font-family: serif;
- }
-
-
- .icon-prev {
- &:before {
- content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
- }
- }
- .icon-next {
- &:before {
- content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
- }
- }
-}
-
-// Optional indicator pips
-//
-// Add an unordered list with the following class and add a list item for each
-// slide your carousel holds.
-
-.carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- margin-left: -30%;
- padding-left: 0;
- list-style: none;
- text-align: center;
-
- li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- border: 1px solid @carousel-indicator-border-color;
- border-radius: 10px;
- cursor: pointer;
-
- // IE8-9 hack for event handling
- //
- // Internet Explorer 8-9 does not support clicks on elements without a set
- // `background-color`. We cannot use `filter` since that's not viewed as a
- // background color by the browser. Thus, a hack is needed.
- // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer
- //
- // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
- // set alpha transparency for the best results possible.
- background-color: #000 \9; // IE8
- background-color: rgba(0,0,0,0); // IE9
- }
- .active {
- margin: 0;
- width: 12px;
- height: 12px;
- background-color: @carousel-indicator-active-bg;
- }
-}
-
-// Optional captions
-// -----------------------------
-// Hidden by default for smaller viewports
-.carousel-caption {
- position: absolute;
- left: 15%;
- right: 15%;
- bottom: 20px;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: @carousel-caption-color;
- text-align: center;
- text-shadow: @carousel-text-shadow;
- & .btn {
- text-shadow: none; // No shadow for button elements in carousel-caption
- }
-}
-
-
-// Scale up controls for tablets and up
-@media screen and (min-width: @screen-sm-min) {
-
- // Scale up the controls a smidge
- .carousel-control {
- .glyphicon-chevron-left,
- .glyphicon-chevron-right,
- .icon-prev,
- .icon-next {
- width: (@carousel-control-font-size * 1.5);
- height: (@carousel-control-font-size * 1.5);
- margin-top: (@carousel-control-font-size / -2);
- font-size: (@carousel-control-font-size * 1.5);
- }
- .glyphicon-chevron-left,
- .icon-prev {
- margin-left: (@carousel-control-font-size / -2);
- }
- .glyphicon-chevron-right,
- .icon-next {
- margin-right: (@carousel-control-font-size / -2);
- }
- }
-
- // Show and left align the captions
- .carousel-caption {
- left: 20%;
- right: 20%;
- padding-bottom: 30px;
- }
-
- // Move up the indicators
- .carousel-indicators {
- bottom: 20px;
- }
-}
diff --git a/public/less/admin/bootstrap/close.less b/public/less/admin/bootstrap/close.less
deleted file mode 100644
index 6d5bfe087a..0000000000
--- a/public/less/admin/bootstrap/close.less
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Close icons
-// --------------------------------------------------
-
-
-.close {
- float: right;
- font-size: (@font-size-base * 1.5);
- font-weight: @close-font-weight;
- line-height: 1;
- color: @close-color;
- text-shadow: @close-text-shadow;
- .opacity(.2);
-
- &:hover,
- &:focus {
- color: @close-color;
- text-decoration: none;
- cursor: pointer;
- .opacity(.5);
- }
-
- // Additional properties for button version
- // iOS requires the button element instead of an anchor tag.
- // If you want the anchor version, it requires `href="#"`.
- // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
- button& {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
- }
-}
diff --git a/public/less/admin/bootstrap/code.less b/public/less/admin/bootstrap/code.less
deleted file mode 100644
index a08b4d48c4..0000000000
--- a/public/less/admin/bootstrap/code.less
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// Code (inline and block)
-// --------------------------------------------------
-
-
-// Inline and block code styles
-code,
-kbd,
-pre,
-samp {
- font-family: @font-family-monospace;
-}
-
-// Inline code
-code {
- padding: 2px 4px;
- font-size: 90%;
- color: @code-color;
- background-color: @code-bg;
- border-radius: @border-radius-base;
-}
-
-// User input typically entered via keyboard
-kbd {
- padding: 2px 4px;
- font-size: 90%;
- color: @kbd-color;
- background-color: @kbd-bg;
- border-radius: @border-radius-small;
- box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
-
- kbd {
- padding: 0;
- font-size: 100%;
- font-weight: bold;
- box-shadow: none;
- }
-}
-
-// Blocks of code
-pre {
- display: block;
- padding: ((@line-height-computed - 1) / 2);
- margin: 0 0 (@line-height-computed / 2);
- font-size: (@font-size-base - 1); // 14px to 13px
- line-height: @line-height-base;
- word-break: break-all;
- word-wrap: break-word;
- color: @pre-color;
- background-color: @pre-bg;
- border: 1px solid @pre-border-color;
- border-radius: @border-radius-base;
-
- // Account for some code outputs that place code tags in pre tags
- code {
- padding: 0;
- font-size: inherit;
- color: inherit;
- white-space: pre-wrap;
- background-color: transparent;
- border-radius: 0;
- }
-}
-
-// Enable scrollable blocks of code
-.pre-scrollable {
- max-height: @pre-scrollable-max-height;
- overflow-y: scroll;
-}
diff --git a/public/less/admin/bootstrap/component-animations.less b/public/less/admin/bootstrap/component-animations.less
deleted file mode 100644
index 0bcee910ac..0000000000
--- a/public/less/admin/bootstrap/component-animations.less
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// Component animations
-// --------------------------------------------------
-
-// Heads up!
-//
-// We don't use the `.opacity()` mixin here since it causes a bug with text
-// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
-
-.fade {
- opacity: 0;
- .transition(opacity .15s linear);
- &.in {
- opacity: 1;
- }
-}
-
-.collapse {
- display: none;
-
- &.in { display: block; }
- tr&.in { display: table-row; }
- tbody&.in { display: table-row-group; }
-}
-
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- .transition-property(~"height, visibility");
- .transition-duration(.35s);
- .transition-timing-function(ease);
-}
diff --git a/public/less/admin/bootstrap/dropdowns.less b/public/less/admin/bootstrap/dropdowns.less
deleted file mode 100644
index f6876c1a9b..0000000000
--- a/public/less/admin/bootstrap/dropdowns.less
+++ /dev/null
@@ -1,216 +0,0 @@
-//
-// Dropdown menus
-// --------------------------------------------------
-
-
-// Dropdown arrow/caret
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: @caret-width-base dashed;
- border-top: @caret-width-base solid ~"\9"; // IE8
- border-right: @caret-width-base solid transparent;
- border-left: @caret-width-base solid transparent;
-}
-
-// The dropdown wrapper (div)
-.dropup,
-.dropdown {
- position: relative;
-}
-
-// Prevent the focus on the dropdown toggle when closing dropdowns
-.dropdown-toggle:focus {
- outline: 0;
-}
-
-// The dropdown menu (ul)
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: @zindex-dropdown;
- display: none; // none by default, but block on "open" of the menu
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0; // override default ul
- list-style: none;
- font-size: @font-size-base;
- text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
- background-color: @dropdown-bg;
- border: 1px solid @dropdown-fallback-border; // IE8 fallback
- border: 1px solid @dropdown-border;
- border-radius: @border-radius-base;
- .box-shadow(0 6px 12px rgba(0,0,0,.175));
- background-clip: padding-box;
-
- // Aligns the dropdown menu to right
- //
- // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
- &.pull-right {
- right: 0;
- left: auto;
- }
-
- // Dividers (basically an hr) within the dropdown
- .divider {
- .nav-divider(@dropdown-divider-bg);
- }
-
- // Links within the dropdown menu
- > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: @line-height-base;
- color: @dropdown-link-color;
- white-space: nowrap; // prevent links from randomly breaking onto new lines
- }
-}
-
-// Hover/Focus state
-.dropdown-menu > li > a {
- &:hover,
- &:focus {
- text-decoration: none;
- color: @dropdown-link-hover-color;
- background-color: @dropdown-link-hover-bg;
- }
-}
-
-// Active state
-.dropdown-menu > .active > a {
- &,
- &:hover,
- &:focus {
- color: @dropdown-link-active-color;
- text-decoration: none;
- outline: 0;
- background-color: @dropdown-link-active-bg;
- }
-}
-
-// Disabled state
-//
-// Gray out text and ensure the hover/focus state remains gray
-
-.dropdown-menu > .disabled > a {
- &,
- &:hover,
- &:focus {
- color: @dropdown-link-disabled-color;
- }
-
- // Nuke hover/focus effects
- &:hover,
- &:focus {
- text-decoration: none;
- background-color: transparent;
- background-image: none; // Remove CSS gradient
- .reset-filter();
- cursor: @cursor-disabled;
- }
-}
-
-// Open state for the dropdown
-.open {
- // Show the menu
- > .dropdown-menu {
- display: block;
- }
-
- // Remove the outline when :focus is triggered
- > a {
- outline: 0;
- }
-}
-
-// Menu positioning
-//
-// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
-// menu with the parent.
-.dropdown-menu-right {
- left: auto; // Reset the default from `.dropdown-menu`
- right: 0;
-}
-// With v3, we enabled auto-flipping if you have a dropdown within a right
-// aligned nav component. To enable the undoing of that, we provide an override
-// to restore the default dropdown menu alignment.
-//
-// This is only for left-aligning a dropdown menu within a `.navbar-right` or
-// `.pull-right` nav component.
-.dropdown-menu-left {
- left: 0;
- right: auto;
-}
-
-// Dropdown section headers
-.dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: @font-size-small;
- line-height: @line-height-base;
- color: @dropdown-header-color;
- white-space: nowrap; // as with > li > a
-}
-
-// Backdrop to catch body clicks on mobile, etc.
-.dropdown-backdrop {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
- z-index: (@zindex-dropdown - 10);
-}
-
-// Right aligned dropdowns
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-
-// Allow for dropdowns to go bottom up (aka, dropup-menu)
-//
-// Just add .dropup after the standard .dropdown class and you're set, bro.
-// TODO: abstract this so that the navbar fixed styles are not placed here?
-
-.dropup,
-.navbar-fixed-bottom .dropdown {
- // Reverse the caret
- .caret {
- border-top: 0;
- border-bottom: @caret-width-base dashed;
- border-bottom: @caret-width-base solid ~"\9"; // IE8
- content: "";
- }
- // Different positioning for bottom up menu
- .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 2px;
- }
-}
-
-
-// Component alignment
-//
-// Reiterate per navbar.less and the modified component alignment there.
-
-@media (min-width: @grid-float-breakpoint) {
- .navbar-right {
- .dropdown-menu {
- .dropdown-menu-right();
- }
- // Necessary for overrides of the default right aligned menu.
- // Will remove come v4 in all likelihood.
- .dropdown-menu-left {
- .dropdown-menu-left();
- }
- }
-}
diff --git a/public/less/admin/bootstrap/forms.less b/public/less/admin/bootstrap/forms.less
deleted file mode 100644
index 9377d3846b..0000000000
--- a/public/less/admin/bootstrap/forms.less
+++ /dev/null
@@ -1,613 +0,0 @@
-//
-// Forms
-// --------------------------------------------------
-
-
-// Normalize non-controls
-//
-// Restyle and baseline non-control form elements.
-
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
- // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
- // so we reset that to ensure it behaves more like a standard block element.
- // See https://github.com/twbs/bootstrap/issues/12359.
- min-width: 0;
-}
-
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: @line-height-computed;
- font-size: (@font-size-base * 1.5);
- line-height: inherit;
- color: @legend-color;
- border: 0;
- border-bottom: 1px solid @legend-border-color;
-}
-
-label {
- display: inline-block;
- max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
- margin-bottom: 5px;
- font-weight: bold;
-}
-
-
-// Normalize form controls
-//
-// While most of our form styles require extra classes, some basic normalization
-// is required to ensure optimum display with or without those classes to better
-// address browser inconsistencies.
-
-// Override content-box in Normalize (* isn't specific enough)
-input[type="search"] {
- .box-sizing(border-box);
-}
-
-// Position radios and checkboxes better
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9; // IE8-9
- line-height: normal;
-}
-
-input[type="file"] {
- display: block;
-}
-
-// Make range inputs behave like textual form controls
-input[type="range"] {
- display: block;
- width: 100%;
-}
-
-// Make multiple select elements height not fixed
-select[multiple],
-select[size] {
- height: auto;
-}
-
-// Focus for file, radio, and checkbox
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- .tab-focus();
-}
-
-// Adjust output element
-output {
- display: block;
- padding-top: (@padding-base-vertical + 1);
- font-size: @font-size-base;
- line-height: @line-height-base;
- color: @input-color;
-}
-
-
-// Common form controls
-//
-// Shared size and type resets for form controls. Apply `.form-control` to any
-// of the following form controls:
-//
-// select
-// textarea
-// input[type="text"]
-// input[type="password"]
-// input[type="datetime"]
-// input[type="datetime-local"]
-// input[type="date"]
-// input[type="month"]
-// input[type="time"]
-// input[type="week"]
-// input[type="number"]
-// input[type="email"]
-// input[type="url"]
-// input[type="search"]
-// input[type="tel"]
-// input[type="color"]
-
-.form-control {
- display: block;
- width: 100%;
- height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
- padding: @padding-base-vertical @padding-base-horizontal;
- font-size: @font-size-base;
- line-height: @line-height-base;
- color: @input-color;
- background-color: @input-bg;
- background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
- border: 1px solid @input-border;
- border-radius: @input-border-radius; // Note: This has no effect on