diff --git a/Gruntfile.js b/Gruntfile.js index be761a16cf..ca5d4dad49 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -27,6 +27,8 @@ module.exports = function (grunt) { compiling = 'js'; } else if (target === 'templatesUpdated') { compiling = 'tpl'; + } else if (target === 'langUpdated') { + compiling = 'lang'; } else if (target === 'serverUpdated') { // Do nothing, just restart } @@ -93,7 +95,19 @@ module.exports = function (grunt) { '!node_modules/nodebb-*/node_modules/**', '!node_modules/nodebb-*/.git/**' ] - } + }, + langUpdated: { + files: [ + 'public/language/en-GB/*.json', + 'public/language/en-GB/**/*.json', + 'node_modules/nodebb-*/**/*.json', + '!node_modules/nodebb-*/node_modules/**', + '!node_modules/nodebb-*/.git/**', + '!node_modules/nodebb-*/plugin.json', + '!node_modules/nodebb-*/package.json', + '!node_modules/nodebb-*/theme.json', + ], + }, } }); diff --git a/app.js b/app.js index 55cc0dbecf..77da25936d 100644 --- a/app.js +++ b/app.js @@ -75,7 +75,7 @@ if (nconf.get('setup') || nconf.get('install')) { } else if (nconf.get('reset')) { async.waterfall([ async.apply(require('./src/reset').reset), - async.apply(require('./build').buildAll) + async.apply(require('./src/meta/build').buildAll) ], function (err) { process.exit(err ? 1 : 0); }); @@ -84,7 +84,7 @@ if (nconf.get('setup') || nconf.get('install')) { } else if (nconf.get('plugins')) { listPlugins(); } else if (nconf.get('build')) { - require('./build').build(nconf.get('build')); + require('./src/meta/build').build(nconf.get('build')); } else { require('./src/start').start(); } @@ -126,7 +126,7 @@ function setup() { winston.info('NodeBB Setup Triggered via Command Line'); var install = require('./src/install'); - var build = require('./build'); + var build = require('./src/meta/build'); process.stdout.write('\nWelcome to NodeBB!\n'); process.stdout.write('\nThis looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.\n'); @@ -174,7 +174,7 @@ function upgrade() { var db = require('./src/database'); var meta = require('./src/meta'); var upgrade = require('./src/upgrade'); - var build = require('./build'); + var build = require('./src/meta/build'); async.series([ async.apply(db.init), diff --git a/loader.js b/loader.js index df528871e9..592a15c490 100644 --- a/loader.js +++ b/loader.js @@ -151,9 +151,25 @@ function getPorts() { Loader.restart = function () { killWorkers(); + + var pathToConfig = path.join(__dirname, '/config.json'); nconf.remove('file'); - nconf.use('file', { file: path.join(__dirname, '/config.json') }); - Loader.start(); + nconf.use('file', { file: pathToConfig }); + + fs.readFile(pathToConfig, {encoding: 'utf-8'}, function (err, configFile) { + if (err) { + console.log('Error reading config : ' + err.message); + process.exit(); + } + + var conf = JSON.parse(configFile); + + nconf.stores.env.readOnly = false; + nconf.set('url', conf.url); + nconf.stores.env.readOnly = true; + + Loader.start(); + }); }; Loader.reload = function () { diff --git a/nodebb b/nodebb index 7f1d2941a3..ee87b24288 100755 --- a/nodebb +++ b/nodebb @@ -1,15 +1,17 @@ #!/usr/bin/env node +'use strict'; + try { - var colors = require('colors'), - cproc = require('child_process'), - argv = require('minimist')(process.argv.slice(2)), - fs = require('fs'), - path = require('path'), - request = require('request'), - semver = require('semver'), - prompt = require('prompt'), - async = require('async'); + 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'); } 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'); @@ -21,407 +23,460 @@ try { } } -var getRunningPid = function (callback) { - fs.readFile(__dirname + '/pidfile', { - encoding: 'utf-8' - }, function (err, pid) { - if (err) { - return callback(err); +if (args.dev) { + process.env.NODE_ENV = 'development'; +} + +function getRunningPid(callback) { + fs.readFile(__dirname + '/pidfile', { + encoding: 'utf-8' + }, function (err, pid) { + if (err) { + return callback(err); + } + + try { + process.kill(parseInt(pid, 10), 0); + callback(null, parseInt(pid, 10)); + } catch(e) { + callback(e); + } + }); +} +function getCurrentVersion(callback) { + fs.readFile(path.join(__dirname, 'package.json'), { encoding: 'utf-8' }, function (err, pkg) { + if (err) { + return callback(err); + } + + try { + pkg = JSON.parse(pkg); + return callback(null, pkg.version); + } catch(err) { + return callback(err); + } + }); +} +function fork(args) { + return cproc.fork('app.js', args, { + cwd: __dirname, + 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' }) + }, function (err, payload) { + if (err) { + return callback(err); + } + + var isNbbModule = /^nodebb-(?:plugin|theme|widget|rewards)-[\w\-]+$/, + moduleName, isGitRepo; + + payload.files = payload.files.filter(function (file) { + return isNbbModule.test(file); + }); + + try { + payload.deps = JSON.parse(payload.deps).dependencies; + payload.bundled = []; + payload.installed = []; + } catch (err) { + return callback(err); + } + + for (moduleName in payload.deps) { + if (isNbbModule.test(moduleName)) { + payload.bundled.push(moduleName); + } + } + + // Whittle down deps to send back only extraneously installed plugins/themes/etc + payload.files.forEach(function (moduleName) { + try { + fs.accessSync(path.join(__dirname, 'node_modules/' + moduleName, '.git')); + isGitRepo = true; + } catch(e) { + isGitRepo = false; } - try { - process.kill(parseInt(pid, 10), 0); - callback(null, parseInt(pid, 10)); - } catch(e) { - callback(e); + if ( + payload.files.indexOf(moduleName) !== -1 && // found in `node_modules/` + payload.bundled.indexOf(moduleName) === -1 && // not found in `package.json` + !fs.lstatSync(path.join(__dirname, 'node_modules/' + moduleName)).isSymbolicLink() && // is not a symlink + !isGitRepo // .git/ does not exist, so it is not a git repository + ) { + payload.installed.push(moduleName); } }); - }, - getCurrentVersion = function (callback) { - fs.readFile(path.join(__dirname, 'package.json'), { encoding: 'utf-8' }, function (err, pkg) { + + getModuleVersions(payload.installed, callback); + }); +} +function getModuleVersions(modules, callback) { + var versionHash = {}; + + async.eachLimit(modules, 50, function (module, next) { + fs.readFile(path.join(__dirname, 'node_modules/' + module + '/package.json'), { encoding: 'utf-8' }, function (err, pkg) { if (err) { - return callback(err); + return next(err); } try { pkg = JSON.parse(pkg); - return callback(null, pkg.version); - } catch(err) { - return callback(err); - } - }); - }, - fork = function (args) { - cproc.fork('app.js', args, { - cwd: __dirname, - silent: false - }); - }, - getInstalledPlugins = function (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' }) - }, function (err, payload) { - if (err) { - return callback(err); - } - - var isNbbModule = /^nodebb-(?:plugin|theme|widget|rewards)-[\w\-]+$/, - moduleName, isGitRepo; - - payload.files = payload.files.filter(function (file) { - return isNbbModule.test(file); - }); - - try { - payload.deps = JSON.parse(payload.deps).dependencies; - payload.bundled = []; - payload.installed = []; + versionHash[module] = pkg.version; + next(); } catch (err) { - return callback(err); + next(err); } - - for (moduleName in payload.deps) { - if (isNbbModule.test(moduleName)) { - payload.bundled.push(moduleName); - } - } - - // Whittle down deps to send back only extraneously installed plugins/themes/etc - payload.files.forEach(function (moduleName) { - try { - fs.accessSync(path.join(__dirname, 'node_modules/' + moduleName, '.git')); - isGitRepo = true; - } catch(e) { - isGitRepo = false; - } - - if ( - payload.files.indexOf(moduleName) !== -1 // found in `node_modules/` - && payload.bundled.indexOf(moduleName) === -1 // not found in `package.json` - && !fs.lstatSync(path.join(__dirname, 'node_modules/' + moduleName)).isSymbolicLink() // is not a symlink - && !isGitRepo // .git/ does not exist, so it is not a git repository - ) { - payload.installed.push(moduleName); - } - }); - - getModuleVersions(payload.installed, callback); }); - }, - getModuleVersions = function (modules, callback) { - var versionHash = {}; + }, function (err) { + callback(err, versionHash); + }); +} +function checkPlugins(standalone, callback) { + if (standalone) { + process.stdout.write('Checking installed plugins and themes for updates... '); + } - async.eachLimit(modules, 50, function (module, next) { - fs.readFile(path.join(__dirname, 'node_modules/' + module + '/package.json'), { encoding: 'utf-8' }, function (err, pkg) { + async.waterfall([ + async.apply(async.parallel, { + plugins: async.apply(getInstalledPlugins), + version: async.apply(getCurrentVersion) + }), + function (payload, next) { + var toCheck = Object.keys(payload.plugins); + + if (!toCheck.length) { + process.stdout.write('OK'.green + '\n'.reset); + return next(null, []); // no extraneous plugins installed + } + + request({ + method: 'GET', + url: 'https://packages.nodebb.org/api/v1/suggest?version=' + payload.version + '&package[]=' + toCheck.join('&package[]='), + json: true + }, function (err, res, body) { if (err) { + process.stdout.write('error'.red + '\n'.reset); return next(err); } + process.stdout.write('OK'.green + '\n'.reset); - try { - pkg = JSON.parse(pkg); - versionHash[module] = pkg.version; - next(); - } catch (err) { - next(err); + if (!Array.isArray(body) && toCheck.length === 1) { + body = [body]; } + + var current, suggested, + 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); + + next(null, upgradable); }); - }, function (err) { - callback(err, versionHash); - }); - }, - checkPlugins = function (standalone, callback) { - if (standalone) { - process.stdout.write('Checking installed plugins and themes for updates... '); + } + ], callback); +} +function upgradePlugins(callback) { + var standalone = false; + if (typeof callback !== 'function') { + callback = function () {}; + standalone = true; + } + + checkPlugins(standalone, function (err, found) { + if (err) { + process.stdout.write('\Warning'.yellow + ': An unexpected error occured when attempting to verify plugin upgradability\n'.reset); + return callback(err); } - async.waterfall([ - async.apply(async.parallel, { - plugins: async.apply(getInstalledPlugins), - version: async.apply(getCurrentVersion) - }), - function (payload, next) { - var toCheck = Object.keys(payload.plugins); - - if (!toCheck.length) { - process.stdout.write('OK'.green + '\n'.reset); - return next(null, []); // no extraneous plugins installed - } - - request({ - method: 'GET', - url: 'https://packages.nodebb.org/api/v1/suggest?version=' + payload.version + '&package[]=' + toCheck.join('&package[]='), - json: true - }, function (err, res, body) { - if (err) { - process.stdout.write('error'.red + '\n'.reset); - return next(err); - } - process.stdout.write('OK'.green + '\n'.reset); - - if (!Array.isArray(body) && toCheck.length === 1) { - body = [body]; - } - - var current, suggested, - 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); - - next(null, upgradable); - }); + if (found && found.length) { + process.stdout.write('\nA total of ' + String(found.length).bold + ' package(s) can be upgraded:\n'); + found.forEach(function (suggestObj) { + process.stdout.write(' * '.yellow + suggestObj.name.reset + ' (' + suggestObj.current.yellow + ' -> '.reset + suggestObj.suggested.green + ')\n'.reset); + }); + process.stdout.write('\n'); + } else { + if (standalone) { + process.stdout.write('\nAll packages up-to-date!'.green + '\n'.reset); } - ], callback); - }, - upgradePlugins = function (callback) { - var standalone = false; - if (typeof callback !== 'function') { - callback = function () {}; - standalone = true; - }; + return callback(); + } - checkPlugins(standalone, function (err, found) { + prompt.message = ''; + prompt.delimiter = ''; + + prompt.start(); + prompt.get({ + name: 'upgrade', + description: 'Proceed with upgrade (y|n)?'.reset, + type: 'string' + }, function (err, result) { if (err) { - process.stdout.write('\Warning'.yellow + ': An unexpected error occured when attempting to verify plugin upgradability\n'.reset); return callback(err); } - if (found && found.length) { - process.stdout.write('\nA total of ' + String(found.length).bold + ' package(s) can be upgraded:\n'); + if (['y', 'Y', 'yes', 'YES'].indexOf(result.upgrade) !== -1) { + process.stdout.write('\nUpgrading packages...'); + var args = ['i']; found.forEach(function (suggestObj) { - process.stdout.write(' * '.yellow + suggestObj.name.reset + ' (' + suggestObj.current.yellow + ' -> '.reset + suggestObj.suggested.green + ')\n'.reset); + args.push(suggestObj.name + '@' + suggestObj.suggested); + }); + + cproc.execFile((process.platform === 'win32') ? 'npm.cmd' : 'npm', args, { stdio: 'ignore' }, function (err) { + if (!err) { + process.stdout.write(' OK\n'.green); + } + + callback(err); }); - process.stdout.write('\n'); } else { - if (standalone) { - process.stdout.write('\nAll packages up-to-date!'.green + '\n'.reset); - } - return callback(); + process.stdout.write('\nPackage upgrades skipped'.yellow + '. Check for upgrades at any time by running "'.reset + './nodebb upgrade-plugins'.green + '".\n'.reset); + callback(); } + }); + }); +} - prompt.message = ''; - prompt.delimiter = ''; - - prompt.start(); - prompt.get({ - name: 'upgrade', - description: 'Proceed with upgrade (y|n)?'.reset, - type: 'string' - }, function (err, result) { - if (err) { - return callback(err); - } - - if (['y', 'Y', 'yes', 'YES'].indexOf(result.upgrade) !== -1) { - process.stdout.write('\nUpgrading packages...'); - var args = ['i']; - found.forEach(function (suggestObj) { - args.push(suggestObj.name + '@' + suggestObj.suggested); - }); - - require('child_process').execFile((process.platform === 'win32') ? 'npm.cmd' : 'npm', args, { stdio: 'ignore' }, function (err) { - if (!err) { - process.stdout.write(' OK\n'.green); - } - - callback(err); - }); +var commands = { + status: { + description: 'View the status of the NodeBB server', + usage: 'Usage: ' + './nodebb status'.yellow, + handler: function () { + getRunningPid(function (err, pid) { + if (!err) { + process.stdout.write('\nNodeBB Running '.bold + '(pid '.cyan + pid.toString().cyan + ')\n'.cyan); + process.stdout.write('\t"' + './nodebb stop'.yellow + '" to stop the NodeBB server\n'); + process.stdout.write('\t"' + './nodebb log'.yellow + '" to view server output\n'); + process.stdout.write('\t"' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'); } else { - process.stdout.write('\nPackage upgrades skipped'.yellow + '. Check for upgrades at any time by running "'.reset + './nodebb upgrade-plugins'.green + '".\n'.reset); - callback(); + process.stdout.write('\nNodeBB is not running\n'.bold); + process.stdout.write('\t"' + './nodebb start'.yellow + '" to launch the NodeBB server\n\n'.reset); } }); - }); - }; + }, + }, + start: { + description: 'Start the NodeBB server', + usage: 'Usage: ' + './nodebb start'.yellow, + handler: function () { + process.stdout.write('\nStarting NodeBB\n'.bold); + process.stdout.write(' "' + './nodebb stop'.yellow + '" to stop the NodeBB server\n'); + process.stdout.write(' "' + './nodebb log'.yellow + '" to view server output\n'); + process.stdout.write(' "' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'.reset); -switch(process.argv[2]) { - case 'status': - getRunningPid(function (err, pid) { - if (!err) { - process.stdout.write('\nNodeBB Running '.bold + '(pid '.cyan + pid.toString().cyan + ')\n'.cyan); - process.stdout.write('\t"' + './nodebb stop'.yellow + '" to stop the NodeBB server\n'); - process.stdout.write('\t"' + './nodebb log'.yellow + '" to view server output\n'); - process.stdout.write('\t"' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'); - } else { - process.stdout.write('\nNodeBB is not running\n'.bold); - process.stdout.write('\t"' + './nodebb start'.yellow + '" to launch the NodeBB server\n\n'.reset); + // Spawn a new NodeBB process + cproc.fork(__dirname + '/loader.js', { + env: process.env + }); + }, + }, + stop: { + description: 'Stop the NodeBB server', + usage: 'Usage: ' + './nodebb stop'.yellow, + handler: function () { + getRunningPid(function (err, pid) { + if (!err) { + process.kill(pid, 'SIGTERM'); + process.stdout.write('Stopping NodeBB. Goodbye!\n'); + } else { + process.stdout.write('NodeBB is already stopped.\n'); + } + }); + }, + }, + restart: { + description: 'Restart the NodeBB server', + usage: 'Usage: ' + './nodebb restart'.yellow, + handler: function () { + getRunningPid(function (err, pid) { + if (!err) { + process.kill(pid, 'SIGHUP'); + process.stdout.write('\nRestarting NodeBB\n'.bold); + } else { + process.stdout.write('NodeBB could not be restarted, as a running instance could not be found.\n'); + } + }); + }, + }, + log: { + description: 'Open the output log (useful for debugging)', + usage: 'Usage: ' + './nodebb log'.yellow, + handler: function () { + process.stdout.write('\nHit '.red + 'Ctrl-C '.bold + 'to exit'.red); + process.stdout.write('\n\n'.reset); + cproc.spawn('tail', ['-F', './logs/output.log'], { + cwd: __dirname, + stdio: 'inherit' + }); + }, + }, + slog: { + description: 'Start the NodeBB server and view the live output log', + usage: 'Usage: ' + './nodebb slog'.yellow, + handler: function () { + process.stdout.write('\nStarting NodeBB with logging output\n'.bold); + process.stdout.write('\nHit '.red + 'Ctrl-C '.bold + 'to exit'.red); + process.stdout.write('\n\n'.reset); + + // Spawn a new NodeBB process + cproc.fork(__dirname + '/loader.js', { + env: process.env + }); + cproc.spawn('tail', ['-F', './logs/output.log'], { + cwd: __dirname, + stdio: 'inherit' + }); + }, + }, + dev: { + description: 'Start NodeBB in verbose development mode', + usage: 'Usage: ' + './nodebb dev'.yellow, + handler: function () { + process.env.NODE_ENV = 'development'; + cproc.fork(__dirname + '/loader.js', ['--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' + + ' e.g. ' + './nodebb build js,tpl'.yellow + '\tbuilds JS and templates\n' + + ' ' + './nodebb build'.yellow + '\t\tbuilds all targets\n', + handler: function () { + var arr = ['--build'].concat(process.argv.slice(3)); + fork(arr); + }, + }, + setup: { + description: 'Run the NodeBB setup script', + usage: 'Usage: ' + './nodebb setup'.yellow, + handler: function () { + var arr = ['--setup'].concat(process.argv.slice(3)); + fork(arr); + }, + }, + reset: { + description: 'Disable plugins and restore the default theme', + usage: 'Usage: ' + './nodebb reset '.yellow + '{-t|-p|-w|-s|-a}'.red + '\n' + + ' -t \tuse specified theme\n' + + ' -p \tdisable specified plugin\n' + + '\n' + + ' -t\t\tuse default theme\n' + + ' -p\t\tdisable all but core plugins\n' + + ' -w\t\twidgets\n' + + ' -s\t\tsettings\n' + + ' -a\t\tall of the above\n', + handler: function () { + var arr = ['--reset'].concat(process.argv.slice(3)); + fork(arr); + }, + }, + activate: { + description: 'Activate a plugin for the next startup of NodeBB', + usage: 'Usage: ' + './nodebb activate '.yellow, + handler: function () { + var arr = ['--activate=' + args._[1]].concat(process.argv.slice(4)); + fork(arr); + }, + }, + plugins: { + description: 'List all installed plugins', + usage: 'Usage: ' + './nodebb plugins'.yellow, + handler: function () { + var arr = ['--plugins'].concat(process.argv.slice(3)); + fork(arr); + }, + }, + upgrade: { + description: 'Run NodeBB upgrade scripts, ensure packages are up-to-date', + usage: 'Usage: ' + './nodebb upgrade'.yellow, + handler: function () { + async.series([ + function (next) { + process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... '.yellow); + cproc.exec('npm i --production', { cwd: __dirname, stdio: 'ignore' }, next); + }, + function (next) { + process.stdout.write('OK\n'.green); + process.stdout.write('2. '.bold + 'Checking installed plugins for updates... '.yellow); + upgradePlugins(next); + }, + function (next) { + process.stdout.write('3. '.bold + 'Updating NodeBB data store schema...\n'.yellow); + var arr = ['--upgrade'].concat(process.argv.slice(3)); + var upgradeProc = fork(arr); + + upgradeProc.on('close', next); + } + ], function (err) { + if (err) { + process.stdout.write('\nError'.red + ': ' + err.message + '\n'); + } else { + var message = 'NodeBB Upgrade Complete!'; + // some consoles will return undefined/zero columns, so just use 2 spaces in upgrade script if we can't get our column count + var columns = process.stdout.columns; + var spaces = columns ? new Array(Math.floor(columns / 2) - (message.length / 2) + 1).join(' ') : " "; + + process.stdout.write('OK\n'.green); + process.stdout.write('\n' + spaces + message.green.bold + '\n\n'.reset); + } + }); + }, + }, + upgradePlugins: { + hidden: true, + description: '', + handler: function () { + upgradePlugins(); + }, + }, + help: { + description: 'Display the help message for a given command', + usage: 'Usage: ' + './nodebb help '.yellow, + handler: function () { + var command = commands[args._[1]]; + if (command) { + process.stdout.write(command.description + '\n'.reset); + process.stdout.write(command.usage + '\n'.reset); + + return; } - }); - break; + var keys = Object.keys(commands).filter(function (key) { + return !commands[key].hidden; + }); - case 'start': - process.stdout.write('\nStarting NodeBB\n'.bold); - process.stdout.write(' "' + './nodebb stop'.yellow + '" to stop the NodeBB server\n'); - process.stdout.write(' "' + './nodebb log'.yellow + '" to view server output\n'); - process.stdout.write(' "' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'.reset); + process.stdout.write('\nWelcome to NodeBB\n\n'.bold); + process.stdout.write('Usage: ./nodebb {' + keys.join('|') + '}\n\n'); - // Spawn a new NodeBB process - cproc.fork(__dirname + '/loader.js', { - env: process.env - }); - break; - - case 'slog': - process.stdout.write('\nStarting NodeBB with logging output\n'.bold); - process.stdout.write('\nHit '.red + 'Ctrl-C '.bold + 'to exit'.red); - process.stdout.write('\n\n'.reset); + var usage = keys.map(function (key) { + var line = '\t' + key.yellow + (key.length < 8 ? '\t\t' : '\t'); + return line + commands[key].description; + }).join('\n'); - // Spawn a new NodeBB process - cproc.fork(__dirname + '/loader.js', { - env: process.env - }); - cproc.spawn('tail', ['-F', './logs/output.log'], { - cwd: __dirname, - stdio: 'inherit' - }); - break; + process.stdout.write(usage + '\n'.reset); + }, + }, +}; - case 'stop': - getRunningPid(function (err, pid) { - if (!err) { - process.kill(pid, 'SIGTERM'); - process.stdout.write('Stopping NodeBB. Goodbye!\n'); - } else { - process.stdout.write('NodeBB is already stopped.\n'); - } - }); - break; +commands['upgrade-plugins'] = commands.upgradePlugins; - case 'restart': - getRunningPid(function (err, pid) { - if (!err) { - process.kill(pid, 'SIGHUP'); - process.stdout.write('\nRestarting NodeBB\n'.bold); - } else { - process.stdout.write('NodeBB could not be restarted, as a running instance could not be found.\n'); - } - }); - break; - - case 'reload': - getRunningPid(function (err, pid) { - if (!err) { - process.kill(pid, 'SIGUSR2'); - } else { - process.stdout.write('NodeBB could not be reloaded, as a running instance could not be found.\n'); - } - }); - break; - - case 'dev': - process.env.NODE_ENV = 'development'; - cproc.fork(__dirname + '/loader.js', ['--no-daemon', '--no-silent'], { - env: process.env - }); - break; - - case 'log': - process.stdout.write('\nHit '.red + 'Ctrl-C '.bold + 'to exit'.red); - process.stdout.write('\n\n'.reset); - cproc.spawn('tail', ['-F', './logs/output.log'], { - cwd: __dirname, - stdio: 'inherit' - }); - break; - - case 'build': - var args = process.argv.slice(0); - args[2] = '--' + args[2]; - - fork(args); - break; - - case 'setup': - cproc.fork('app.js', ['--setup'], { - cwd: __dirname, - silent: false - }); - break; - - case 'reset': - var args = process.argv.slice(0); - args.unshift('--reset'); - fork(args); - break; - - case 'activate': - var args = process.argv.slice(0); - args.unshift('--activate=' + process.argv[3]); - fork(args); - break; - - case 'plugins': - var args = process.argv.slice(0); - args.unshift('--plugins'); - fork(args); - break; - - case 'upgrade-plugins': - upgradePlugins(); - break; - - case 'upgrade': - async.series([ - function (next) { - process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... '.yellow); - cproc.exec('npm i --production', { cwd: __dirname, stdio: 'ignore' }, next); - }, - function (next) { - process.stdout.write('OK\n'.green); - process.stdout.write('2. '.bold + 'Checking installed plugins for updates... '.yellow); - upgradePlugins(next); - }, - function (next) { - process.stdout.write('3. '.bold + 'Updating NodeBB data store schema...\n'.yellow); - var upgradeProc = cproc.fork('app.js', ['--upgrade'], { - cwd: __dirname, - silent: false - }); - - upgradeProc.on('close', next); - } - ], function (err) { - if (err) { - process.stdout.write('\nError'.red + ': ' + err.message + '\n'); - } else { - var message = 'NodeBB Upgrade Complete!'; - // some consoles will return undefined/zero columns, so just use 2 spaces in upgrade script if we can't get our column count - var columns = process.stdout.columns; - var spaces = columns ? new Array(Math.floor(columns / 2) - (message.length / 2) + 1).join(' ') : " "; - - process.stdout.write('OK\n'.green); - process.stdout.write('\n' + spaces + message.green.bold + '\n\n'.reset); - } - }); - break; - - default: - process.stdout.write('\nWelcome to NodeBB\n\n'.bold); - process.stdout.write('Usage: ./nodebb {start|slog|stop|reload|restart|log|build|setup|reset|upgrade|dev}\n\n'); - process.stdout.write('\t' + 'start'.yellow + '\t\tStart the NodeBB server\n'); - process.stdout.write('\t' + 'slog'.yellow + '\t\tStarts the NodeBB server and displays the live output log\n'); - process.stdout.write('\t' + 'stop'.yellow + '\t\tStops the NodeBB server\n'); - process.stdout.write('\t' + 'reload'.yellow + '\t\tRestarts NodeBB\n'); - process.stdout.write('\t' + 'restart'.yellow + '\t\tRestarts NodeBB\n'); - process.stdout.write('\t' + 'log'.yellow + '\t\tOpens the logging interface (useful for debugging)\n'); - process.stdout.write('\t' + 'build'.yellow + '\t\tCompiles javascript, css stylesheets, and templates\n'); - process.stdout.write('\t' + 'setup'.yellow + '\t\tRuns the NodeBB setup script\n'); - process.stdout.write('\t' + 'reset'.yellow + '\t\tDisables all plugins, restores the default theme.\n'); - process.stdout.write('\t' + 'activate'.yellow + '\tActivates a plugin for the next startup of NodeBB.\n'); - process.stdout.write('\t' + 'plugins'.yellow + '\t\tList all plugins that have been installed.\n'); - process.stdout.write('\t' + 'upgrade'.yellow + '\t\tRun NodeBB upgrade scripts, ensure packages are up-to-date\n'); - process.stdout.write('\t' + 'dev'.yellow + '\t\tStart NodeBB in interactive development mode\n'); - process.stdout.write('\n'.reset); - break; +if (!commands[args._[0]]) { + commands.help.handler(); +} else { + commands[args._[0]].handler(); } diff --git a/package.json b/package.json index 5601f6d1cf..1395ce329d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "nodebb", "license": "GPL-3.0", "description": "NodeBB Forum", - "version": "1.4.2", + "version": "1.4.3", "homepage": "http://www.nodebb.org", "repository": { "type": "git", @@ -12,7 +12,7 @@ "scripts": { "start": "node loader.js", "lint": "eslint --cache .", - "pretest": "npm run lint", + "pretest": "npm run lint && node app --build", "test": "istanbul cover node_modules/mocha/bin/_mocha -- -R dot", "coveralls": "istanbul cover _mocha --report lcovonly -- -R dot && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage" }, @@ -51,18 +51,18 @@ "morgan": "^1.3.2", "mousetrap": "^1.5.3", "nconf": "~0.8.2", - "nodebb-plugin-composer-default": "4.3.6", - "nodebb-plugin-dbsearch": "1.0.4", + "nodebb-plugin-composer-default": "4.3.8", + "nodebb-plugin-dbsearch": "1.0.5", "nodebb-plugin-emoji-extended": "1.1.1", "nodebb-plugin-emoji-one": "1.1.5", - "nodebb-plugin-markdown": "7.0.1", + "nodebb-plugin-markdown": "7.0.3", "nodebb-plugin-mentions": "1.1.3", "nodebb-plugin-soundpack-default": "0.1.6", "nodebb-plugin-spam-be-gone": "0.4.10", "nodebb-rewards-essentials": "0.0.9", "nodebb-theme-lavender": "3.0.15", "nodebb-theme-persona": "4.1.95", - "nodebb-theme-vanilla": "5.1.58", + "nodebb-theme-vanilla": "5.1.59", "nodebb-widget-essentials": "2.0.13", "nodemailer": "2.6.4", "nodemailer-sendmail-transport": "1.0.0", @@ -81,9 +81,9 @@ "semver": "^5.1.0", "serve-favicon": "^2.1.5", "sitemap": "^1.4.0", - "socket.io": "1.7.1", - "socket.io-client": "1.7.1", - "socket.io-redis": "2.0.0", + "socket.io": "1.7.2", + "socket.io-client": "1.7.2", + "socket.io-redis": "3.1.0", "socketio-wildcard": "~0.3.0", "string": "^3.0.0", "templates.js": "0.3.6", diff --git a/public/language/cs/admin/appearance/skins.json b/public/language/cs/admin/appearance/skins.json index 4db6fbdd8a..64edb7c071 100644 --- a/public/language/cs/admin/appearance/skins.json +++ b/public/language/cs/admin/appearance/skins.json @@ -1,5 +1,5 @@ { - "loading": "Loading Skins...", + "loading": "Načítání motivů…", "homepage": "Homepage", "select-skin": "Select Skin", "current-skin": "Current Skin", diff --git a/public/language/cs/admin/appearance/themes.json b/public/language/cs/admin/appearance/themes.json index 3148a01337..4467410631 100644 --- a/public/language/cs/admin/appearance/themes.json +++ b/public/language/cs/admin/appearance/themes.json @@ -1,5 +1,5 @@ { - "checking-for-installed": "Checking for installed themes...", + "checking-for-installed": "Vyhledávání nainstalovaných motivů…", "homepage": "Homepage", "select-theme": "Select Theme", "current-theme": "Current Theme", diff --git a/public/language/cs/admin/extend/plugins.json b/public/language/cs/admin/extend/plugins.json index 1661a987b7..699fd335fe 100644 --- a/public/language/cs/admin/extend/plugins.json +++ b/public/language/cs/admin/extend/plugins.json @@ -8,7 +8,7 @@ "find-plugins": "Find Plugins", "plugin-search": "Plugin Search", - "plugin-search-placeholder": "Search for plugin...", + "plugin-search-placeholder": "Hledat rozšíření…", "reorder-plugins": "Re-order Plugins", "order-active": "Order Active Plugins", "dev-interested": "Interested in writing plugins for NodeBB?", diff --git a/public/language/cs/admin/general/dashboard.json b/public/language/cs/admin/general/dashboard.json index b82802db1b..4a41012de9 100644 --- a/public/language/cs/admin/general/dashboard.json +++ b/public/language/cs/admin/general/dashboard.json @@ -42,7 +42,7 @@ "user-presence": "User Presence", "on-categories": "On categories list", "reading-posts": "Reading posts", - "browsing-topics": "Browsing topics", + "browsing-topics": "Prohlížení témat", "recent": "Recent", "unread": "Unread", diff --git a/public/language/cs/admin/manage/categories.json b/public/language/cs/admin/manage/categories.json index 7e2a5ce12e..beb2feaf70 100644 --- a/public/language/cs/admin/manage/categories.json +++ b/public/language/cs/admin/manage/categories.json @@ -62,7 +62,7 @@ "alert.updated-success": "Category IDs %1 successfully updated.", "alert.upload-image": "Upload category image", "alert.find-user": "Find a User", - "alert.user-search": "Search for a user here...", + "alert.user-search": "Najít uživatele…", "alert.find-group": "Find a Group", - "alert.group-search": "Search for a group here..." + "alert.group-search": "Hledat skupinu…" } \ No newline at end of file diff --git a/public/language/cs/admin/manage/tags.json b/public/language/cs/admin/manage/tags.json index db40e9f098..c65a88f38f 100644 --- a/public/language/cs/admin/manage/tags.json +++ b/public/language/cs/admin/manage/tags.json @@ -7,7 +7,7 @@ "create": "Create Tag", "modify": "Modify Tags", "delete": "Delete Selected Tags", - "search": "Search for tags...", + "search": "Hledat tagy…", "settings": "Click here to visit the tag settings page.", "name": "Tag Name", diff --git a/public/language/cs/admin/menu.json b/public/language/cs/admin/menu.json index 6a4995ea6e..68ad626681 100644 --- a/public/language/cs/admin/menu.json +++ b/public/language/cs/admin/menu.json @@ -65,11 +65,11 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", - "search.no-results": "No results...", + "search.placeholder": "Hledat", + "search.no-results": "Žádné výsledky…", "search.search-forum": "Search the forum for ", - "search.keep-typing": "Type more to see results...", - "search.start-typing": "Start typing to see results...", + "search.keep-typing": "Pište dále pro zobrazení výsledků…", + "search.start-typing": "Začněte psát pro zobrazení výsledků…", - "connection-lost": "Connection to %1 has been lost, attempting to reconnect..." + "connection-lost": "Připojení k %1 bylo ztraceno. Snaha o opětovné připojení…" } \ No newline at end of file diff --git a/public/language/cs/email.json b/public/language/cs/email.json index 9c456dd30e..1070b21754 100644 --- a/public/language/cs/email.json +++ b/public/language/cs/email.json @@ -5,18 +5,18 @@ "greeting_no_name": "Dobrý den", "greeting_with_name": "Dobrý den %1", "welcome.text1": "Děkujeme vám za registraci na %1!", - "welcome.text2": "Pro úplnou aktivaci vašeho účtu potřebujeme ověřit vaší emailovou adresu.", + "welcome.text2": "Pro úplnou aktivaci vašeho účtu potřebujeme ověřit vaši e-mailovou adresu.", "welcome.text3": "Administrátor právě potvrdil vaší registraci. Nyní se můžete přihlásit jménem a heslem.", - "welcome.cta": "Klikněte zde pro potvrzení vaší emailové adresy", + "welcome.cta": "Klikněte zde pro potvrzení vaší e-mailové adresy", "invitation.text1": "%1 Vás pozval abyste se připojil k %2", "invitation.ctr": "Klikněte zde pro vytvoření vašeho účtu", - "reset.text1": "Obdrželi jsme požadavek na obnovu hesla, pravděpodobně kvůli tomu, že jste ho zapomněli. Pokud to není tento případ, ignorujte, prosím, tento email.", + "reset.text1": "Obdrželi jsme požadavek na obnovu vašeho hesla, pravděpodobně z důvodu jeho zapomenutí. Pokud to není tento případ, ignorujte, prosím, tento e-mail.", "reset.text2": "Přejete-li si pokračovat v obnově vašeho hesla, klikněte, prosím, na následující odkaz:", "reset.cta": "Klikněte zde, chcete-li obnovit vaše heslo", "reset.notify.subject": "Heslo úspěšně změněno", "reset.notify.text1": "Informujeme Vás, že na %1 vaše heslo bylo úspěšně změněno.", "reset.notify.text2": "Pokud jste to neschválil, prosíme neprodleně kontaktujte správce.", - "digest.notifications": "Máte tu nepřečtená oznámení od %1:", + "digest.notifications": "Máte tu nepřečtená upozornění od %1:", "digest.latest_topics": "Nejnovější témata od %1", "digest.cta": "Kliknutím zde navštívíte %1", "digest.unsub.info": "Tento výtah vám byl odeslán, protože jste si to nastavili ve vašich odběrech.", @@ -27,10 +27,10 @@ "digest.subject": "Výběr pro %1", "notif.chat.subject": "Nová zpráva z chatu od %1", "notif.chat.cta": "Chcete-li pokračovat v konverzaci, klikněte zde.", - "notif.chat.unsub.info": "Toto oznámení z chatu vám bylo zasláno, protože jste si to nastavili ve vašich odběrech.", + "notif.chat.unsub.info": "Toto upozornění na chat vám bylo odesláno na základě vašeho nastavení odběru.", "notif.post.cta": "Klikněte zde pro přečtené celého tématu", - "notif.post.unsub.info": "Toto oznámení Vám bylo odesláno na základě vašeho nastavení odběru.", - "test.text1": "Tento testovací email slouží k ověření, že mailer je správně nastaven. NodeBB.", + "notif.post.unsub.info": "Toto upozornění na příspěvek vám bylo odesláno na základě vašeho nastavení odběru.", + "test.text1": "Tento testovací e-mail slouží k ověření, že je e-mailer správně nastaven pro práci s NodeBB.", "unsub.cta": "Chcete-li změnit tyto nastavení, klikněte zde.", "closing": "Díky!" } \ No newline at end of file diff --git a/public/language/cs/error.json b/public/language/cs/error.json index 2957a310a9..690b3423fb 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -8,7 +8,7 @@ "invalid-pid": "Neplatné ID příspěvku", "invalid-uid": "Neplatné ID uživatele", "invalid-username": "Neplatné uživatelské jméno", - "invalid-email": "Neplatný email", + "invalid-email": "Neplatný e-mail", "invalid-title": "Neplatný titulek!", "invalid-user-data": "Neplatná uživatelská data", "invalid-password": "Neplatné heslo", @@ -17,13 +17,13 @@ "csrf-invalid": "We were unable to log you in, likely due to an expired session. Please try again", "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Uživatelské jméno je již použito", - "email-taken": "Email je již použit", - "email-not-confirmed": "Vaše emailová adresa zatím nebyla potvrzena. Kliknutím zde svůj email potvrdíte.", + "email-taken": "E-mail je již používán", + "email-not-confirmed": "Vaše e-mailová adresa zatím nebyla potvrzena. Klepněte zde pro její potvrzení.", "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", - "confirm-email-already-sent": "Potvrzovací email již byl odeslán. Vyčkejte %1 minut pokud chcete odeslat další.", + "confirm-email-already-sent": "Potvrzovací e-mail byl již odeslán. Vyčkejte %1 minut pokud chcete odeslat další.", "sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.", "username-too-short": "Uživatelské jméno je příliš krátké", "username-too-long": "Uživatelské jméno je příliš dlouhé", diff --git a/public/language/cs/global.json b/public/language/cs/global.json index 8987f7ecef..3d6a1fe149 100644 --- a/public/language/cs/global.json +++ b/public/language/cs/global.json @@ -33,7 +33,7 @@ "header.users": "Uživatelé", "header.groups": "Skupiny", "header.chats": "Chaty", - "header.notifications": "Oznámení", + "header.notifications": "Upozornění", "header.search": "Hledat", "header.profile": "Můj profil", "header.navigation": "Navigace", @@ -80,7 +80,7 @@ "dnd": "Nevyrušovat", "invisible": "Neviditelný", "offline": "Offline", - "email": "Email", + "email": "E-mail", "language": "Jazyk", "guest": "Host", "guests": "Hosté", diff --git a/public/language/cs/login.json b/public/language/cs/login.json index c949cf14ac..8d189a2d0e 100644 --- a/public/language/cs/login.json +++ b/public/language/cs/login.json @@ -1,7 +1,7 @@ { - "username-email": "Uživatel / Email", + "username-email": "Uživatelské jméno / e-mail", "username": "Uživatel", - "email": "Email", + "email": "E-mail", "remember_me": "Zapamatovat si mě?", "forgot_password": "Zapomněli jste heslo?", "alternative_logins": "Další způsoby přihlášení", diff --git a/public/language/cs/modules.json b/public/language/cs/modules.json index 2a75db71f6..28a90319de 100644 --- a/public/language/cs/modules.json +++ b/public/language/cs/modules.json @@ -3,7 +3,7 @@ "chat.placeholder": "Zprávu do chatu napište zde, pro odeslání stiskněte enter", "chat.send": "Odeslat", "chat.no_active": "Nemáte žádné aktivní konverzace.", - "chat.user_typing": "%1 píše ...", + "chat.user_typing": "%1 píše…", "chat.user_has_messaged_you": "%1 Vám napsal.", "chat.see_all": "Prohlédnout všechny chaty", "chat.mark_all_read": "Označit vše jako přečtené", diff --git a/public/language/cs/notifications.json b/public/language/cs/notifications.json index 631bdfd5e0..04b05c0c0b 100644 --- a/public/language/cs/notifications.json +++ b/public/language/cs/notifications.json @@ -28,8 +28,8 @@ "user_started_following_you_multiple": "%1 and %2 others started following you.", "new_register": "%1 sent a registration request.", "new_register_multiple": "There are %1 registration requests awaiting review.", - "email-confirmed": "Email potvrzen", - "email-confirmed-message": "Děkujeme za ověření Vaší emailové adresy. Váš účet je nyní aktivován.", - "email-confirm-error-message": "Nastal problém s ověřením Vaší emailové adresy. Pravděpodobně neplatný nebo expirovaný kód.", - "email-confirm-sent": "Ověřovací email odeslán." + "email-confirmed": "E-mail potvrzen", + "email-confirmed-message": "Děkujeme za ověření vaší e-mailové adresy. Váš účet je nyní aktivní.", + "email-confirm-error-message": "Nastal problém s ověřením vaší e-mailové adresy. Kód je pravděpodobně neplatný nebo jeho platnost vypršela.", + "email-confirm-sent": "Ověřovací e-mail odeslán." } \ No newline at end of file diff --git a/public/language/cs/pages.json b/public/language/cs/pages.json index 1a735e94d1..64902c40c0 100644 --- a/public/language/cs/pages.json +++ b/public/language/cs/pages.json @@ -15,7 +15,7 @@ "users/banned": "Zabanovaní uživatelé", "users/most-flags": "Most flagged users", "users/search": "Hledání uživatele", - "notifications": "Oznámení", + "notifications": "Upozornění", "tags": "Tagy", "tag": "Téma označeno pod \"%1\"", "register": "Zaregistrovat účet", @@ -43,7 +43,7 @@ "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Nejlepší příspěvky od %1", - "confirm": "Email potvrzen", + "confirm": "E-mail potvrzen", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:", "throttled.text": "%1 je v současnou chvíli nedostupný pro velkou zátěž. Prosíme zkuste to za chvíli." diff --git a/public/language/cs/register.json b/public/language/cs/register.json index 6aa6c9d5b9..fae5335f6a 100644 --- a/public/language/cs/register.json +++ b/public/language/cs/register.json @@ -1,11 +1,11 @@ { "register": "Registrace", "cancel_registration": "Cancel Registration", - "help.email": "Váš email nebude bez vašeho svolení zveřejněn.", + "help.email": "Ve výchozím nastavení bude váš e-mail skrytý.", "help.username_restrictions": "Jedinečné uživatelské jméno dlouhé %1 až %2 znaků. Ostatní uživatelé Vás mohou zmínit jako @uživatelské-jméno.", "help.minimum_password_length": "Délka vašeho hesla musí být alespoň %1 znaků.", - "email_address": "Email", - "email_address_placeholder": "Zadejte email", + "email_address": "E-mailová adresa", + "email_address_placeholder": "Zadejte e-mailovou adresu", "username": "Uživatelské jméno", "username_placeholder": "Zadejte uživatelské jméno", "password": "Heslo", diff --git a/public/language/cs/reset_password.json b/public/language/cs/reset_password.json index 87e85611d1..288550bd87 100644 --- a/public/language/cs/reset_password.json +++ b/public/language/cs/reset_password.json @@ -7,10 +7,10 @@ "wrong_reset_code.message": "Byl zadán špatný kód. Zadejte ho prosím znovu, nebo si nechte poslat nový.", "new_password": "Nové heslo", "repeat_password": "Potvrzení hesla", - "enter_email": "Zadejte svou emailovou adresu a my Vám pošleme informace, jak můžete obnovit své heslo.", - "enter_email_address": "Zadejte emailovou adresu", + "enter_email": "Zadejte svou e-mailovou adresu a my vám pošleme informace, jak můžete obnovit svůj účet.", + "enter_email_address": "Zadejte e-mailovou adresu", "password_reset_sent": "Obnova hesla odeslána", - "invalid_email": "Špatný email / Email neexistuje!", + "invalid_email": "Neplatný e-mail / E-mail neexistuje!", "password_too_short": "Zadané heslo je příliš krátké, zvolte si prosím jiné.", "passwords_do_not_match": "Vámi zadaná hesla se neshodují.", "password_expired": "Platnost Vašeho hesla vypršela, zvolte si prosím nové." diff --git a/public/language/cs/tags.json b/public/language/cs/tags.json index 59b7f40c43..9e7cb73dc8 100644 --- a/public/language/cs/tags.json +++ b/public/language/cs/tags.json @@ -2,6 +2,6 @@ "no_tag_topics": "Není zde žádné téma s tímto tagem.", "tags": "Tagy", "enter_tags_here": "Zde vložte tagy, každý o délce %1 až %2 znaků.", - "enter_tags_here_short": "Vložte tagy ...", + "enter_tags_here_short": "Zadejte tagy…", "no_tags": "Zatím tu není žádný tag." } \ No newline at end of file diff --git a/public/language/cs/topic.json b/public/language/cs/topic.json index 8642d67c51..cdebbe7c33 100644 --- a/public/language/cs/topic.json +++ b/public/language/cs/topic.json @@ -105,13 +105,13 @@ "fork_pid_count": "%1 post(s) selected", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "delete_posts_instruction": "Click the posts you want to delete/purge", - "composer.title_placeholder": "Zadejte název tématu...", + "composer.title_placeholder": "Zadejte název tématu…", "composer.handle_placeholder": "Jméno", "composer.discard": "Zrušit", "composer.submit": "Odeslat", "composer.replying_to": "Replying to %1", "composer.new_topic": "Nové téma", - "composer.uploading": "nahrávání...", + "composer.uploading": "nahrávání…", "composer.thumb_url_label": "Vložit URL náhled tématu", "composer.thumb_title": "Přidat k tématu náhled", "composer.thumb_url_placeholder": "http://example.com/thumb.png", diff --git a/public/language/cs/uploads.json b/public/language/cs/uploads.json index 0adbf0d9f0..f0b4b0cb80 100644 --- a/public/language/cs/uploads.json +++ b/public/language/cs/uploads.json @@ -1,5 +1,5 @@ { - "uploading-file": "Nahrávání souboru...", + "uploading-file": "Nahrávání souboru…", "select-file-to-upload": "Vyberte soubor pro nahrání!", "upload-success": "Soubor byl úspěšně nahrán!", "maximum-file-size": "Maximum %1 kb" diff --git a/public/language/cs/user.json b/public/language/cs/user.json index 2752f09274..4551664422 100644 --- a/public/language/cs/user.json +++ b/public/language/cs/user.json @@ -4,8 +4,8 @@ "username": "Uživatelské jméno", "joindate": "Datum ragistrace", "postcount": "Počet příspěvků", - "email": "Email", - "confirm_email": "Potvrdit email", + "email": "E-mail", + "confirm_email": "Potvrdit e-mail", "account_info": "Account Info", "ban_account": "Zablokovat účet", "ban_account_confirm": "Opravdu chcete zablokovat tohoto uživatele?", @@ -39,7 +39,7 @@ "profile_update_success": "Profil byl úspěšně aktualizován!", "change_picture": "Změnit obrázek", "change_username": "Změnit uživatelské jméno", - "change_email": "Změnit email", + "change_email": "Změnit e-mail", "edit": "Upravit", "edit-profile": "Editovat profil", "default_picture": "Výchozí ikonka", @@ -58,14 +58,14 @@ "password": "Heslo", "username_taken_workaround": "Zvolené uživatelské jméno je již zabrané, takže jsme ho trochu upravili. Nyní jste znám jako %1", "password_same_as_username": "Vaše heslo je stejné jako vaše přihlašovací jméno. Zvolte si prosím jiné heslo.", - "password_same_as_email": "Vaše heslo je stejné jako email. Vyberte si prosím jiné heslo.", + "password_same_as_email": "Vaše heslo je stejné jako váš e-mail. Zvolte si prosím jiné heslo.", "upload_picture": "Nahrát obrázek", "upload_a_picture": "Nahrát obrázek", "remove_uploaded_picture": "Odstranit nahraný obrázek", "upload_cover_picture": "Náhrát titulní obrázek", "remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?", "settings": "Nastavení", - "show_email": "Zobrazovat můj email v profilu", + "show_email": "Zobrazovat můj e-mail v profilu", "show_fullname": "Zobrazovat celé jméno", "restrict_chats": "Povolit chatovací zprávy pouze od uživatelů, které sleduji.", "digest_label": "Odebírat přehled", @@ -85,7 +85,7 @@ "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": "Skrytý email", + "email_hidden": "E-mail skryt", "hidden": "skrytý", "paginate_description": "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "Témat na stránce", @@ -96,7 +96,7 @@ "outgoing-message-sound": "Outgoing message sound", "notification-sound": "Notification sound", "no-sound": "No sound", - "browsing": "Browsing Settings", + "browsing": "Nastavení prohlížení", "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", diff --git a/public/language/da/admin/admin.json b/public/language/da/admin/admin.json index 394f60f3b6..5ead0f0144 100644 --- a/public/language/da/admin/admin.json +++ b/public/language/da/admin/admin.json @@ -1,6 +1,6 @@ { - "alert.confirm-reload": "Er du sikker på du ønsker at genindlæse NodeBB?", - "alert.confirm-restart": "Er du sikker på du ønsker at genstarte NodeBB?", + "alert.confirm-reload": "Er du sikker på at du ønsker at genindlæse NodeBB?", + "alert.confirm-restart": "Er du sikker på at du ønsker at genstarte NodeBB?", "acp-title": "%1 | NodeBB Admin Kontrol Panel", "settings-header-contents": "Indhold" diff --git a/public/language/da/admin/advanced/cache.json b/public/language/da/admin/advanced/cache.json index 5a954f1232..1194307544 100644 --- a/public/language/da/admin/advanced/cache.json +++ b/public/language/da/admin/advanced/cache.json @@ -1,11 +1,11 @@ { - "post-cache": "Post Cache", - "posts-in-cache": "Posts in Cache", - "average-post-size": "Average Post Size", - "length-to-max": "Length / Max", - "percent-full": "%1% Full", - "post-cache-size": "Post Cache Size", - "items-in-cache": "Items in Cache", - "control-panel": "Control Panel", - "update-settings": "Update Cache Settings" + "post-cache": "Indlægs Cache", + "posts-in-cache": "Indlæg i Cache", + "average-post-size": "Gennemsnitlig Størrelse af Indlæg", + "length-to-max": "Længde / Max", + "percent-full": "%1% Fuld", + "post-cache-size": "Indlægs Cache Størrelse", + "items-in-cache": "Ting i Cache", + "control-panel": "Kontrol Panel", + "update-settings": "Opdater Cache Indstillinger" } \ No newline at end of file diff --git a/public/language/da/admin/advanced/database.json b/public/language/da/admin/advanced/database.json index f7db6220ee..59742a0158 100644 --- a/public/language/da/admin/advanced/database.json +++ b/public/language/da/admin/advanced/database.json @@ -1,35 +1,35 @@ { "x-b": "%1 b", "x-mb": "%1 mb", - "uptime-seconds": "Uptime in Seconds", - "uptime-days": "Uptime in Days", + "uptime-seconds": "Oppetid i Sekunder", + "uptime-days": "Oppetid i Dage", "mongo": "Mongo", "mongo.version": "MongoDB Version", "mongo.storage-engine": "Storage Engine", - "mongo.collections": "Collections", - "mongo.objects": "Objects", - "mongo.avg-object-size": "Avg. Object Size", - "mongo.data-size": "Data Size", - "mongo.storage-size": "Storage Size", - "mongo.index-size": "Index Size", - "mongo.file-size": "File Size", - "mongo.resident-memory": "Resident Memory", - "mongo.virtual-memory": "Virtual Memory", - "mongo.mapped-memory": "Mapped Memory", - "mongo.raw-info": "MongoDB Raw Info", + "mongo.collections": "Kollektioner", + "mongo.objects": "Objekter", + "mongo.avg-object-size": "Gennemsnitlig Objekt Størrelse", + "mongo.data-size": "Data Størrelse", + "mongo.storage-size": "Lager Størrelse", + "mongo.index-size": "Index Størrelse", + "mongo.file-size": "Fil Størrelse", + "mongo.resident-memory": "Resident Hukommelse", + "mongo.virtual-memory": "Virtuel Hukommelse", + "mongo.mapped-memory": "Kortlagt Hukommelse", + "mongo.raw-info": "MongoDB Rå Info", "redis": "Redis", "redis.version": "Redis Version", - "redis.connected-clients": "Connected Clients", - "redis.connected-slaves": "Connected Slaves", - "redis.blocked-clients": "Blocked Clients", - "redis.used-memory": "Used Memory", - "redis.memory-frag-ratio": "Memory Fragmentation Ratio", - "redis.total-connections-recieved": "Total Connections Received", - "redis.total-commands-processed": "Total Commands Processed", - "redis.iops": "Instantaneous Ops. Per Second", - "redis.keyspace-hits": "Keyspace Hits", - "redis.keyspace-misses": "Keyspace Misses", - "redis.raw-info": "Redis Raw Info" + "redis.connected-clients": "Forbundne Klienter", + "redis.connected-slaves": "Forbundne Slaver", + "redis.blocked-clients": "Blokerede Klienter", + "redis.used-memory": "Brugt Hukommelse", + "redis.memory-frag-ratio": "Hukommelses Fragmentations Forhold", + "redis.total-connections-recieved": "Totale Forbindelser Modtaget", + "redis.total-commands-processed": "Totale Kommandoer Behandlet", + "redis.iops": "Øjeblikkelige Ops. pr. sekund", + "redis.keyspace-hits": "Mellemrums Tryk", + "redis.keyspace-misses": "Mellemrums Misses", + "redis.raw-info": "Redis Rå Info" } \ No newline at end of file diff --git a/public/language/da/admin/general/dashboard.json b/public/language/da/admin/general/dashboard.json index b82802db1b..1ceda1053c 100644 --- a/public/language/da/admin/general/dashboard.json +++ b/public/language/da/admin/general/dashboard.json @@ -1,30 +1,30 @@ { - "forum-traffic": "Forum Traffic", - "page-views": "Page Views", - "unique-visitors": "Unique Visitors", - "page-views-last-month": "Page views Last Month", - "page-views-this-month": "Page views This Month", - "page-views-last-day": "Page views in last 24 hours", + "forum-traffic": "Forum Traffik", + "page-views": "Side Visninger", + "unique-visitors": "Unikke Besøgere", + "page-views-last-month": "Side Visninger Sidste Måned", + "page-views-this-month": "Side Visninger Denne Måned", + "page-views-last-day": "Side visninger i de sidste 24 timer", - "stats.day": "Day", - "stats.week": "Week", - "stats.month": "Month", + "stats.day": "Dag", + "stats.week": "Uge", + "stats.month": "Måned", "stats.all": "All Time", - "updates": "Updates", - "running-version": "You are running NodeBB v%1.", - "keep-updated": "Always make sure that your NodeBB is up to date for the latest security patches and bug fixes.", - "up-to-date": "

You are up-to-date

", - "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.

", + "updates": "Opdateringer", + "running-version": "Du kører NodeBB v%1.", + "keep-updated": "Altid sikrer dig at din NodeBB er opdateret for de seneste sikkerheds og bug rettelser.", + "up-to-date": "

Du er opdateret

", + "upgrade-available": "

En ny version (v%1) er blevet udgivet. Overvej at opgradere din NodeBB.

", + "prerelease-upgrade-available": "

Dette er en uddateret pre-release version af NodeBB. En ny version (v%1) er blevet udgivet. Overvej at opdatere din NodeBB.

", + "prerelease-warning": "

Dette er en pre-release udgave af NodeBB. Uforventede bugs kan forekomme.

", - "notices": "Notices", + "notices": "Varsler", - "control-panel": "System Control", - "reload": "Reload", - "restart": "Restart", - "restart-warning": "Reloading or Restarting your NodeBB will drop all existing connections for a few seconds.", + "control-panel": "System Kontrol", + "reload": "Genindlæs", + "restart": "Genstart", + "restart-warning": "At genindlæse eller genstarte din NodeBB vil droppe alle eksisterende forbindelser i et par sekunder.", "maintenance-mode": "Maintenance Mode", "maintenance-mode-title": "Click here to set up maintenance mode for NodeBB", "realtime-chart-updates": "Realtime Chart Updates", diff --git a/public/language/da/login.json b/public/language/da/login.json index 55e572ee65..20d0fae8e3 100644 --- a/public/language/da/login.json +++ b/public/language/da/login.json @@ -8,5 +8,5 @@ "failed_login_attempt": "Log Ind Mislykkedes", "login_successful": "Du har successfuldt logged in!", "dont_have_account": "Har du ikke en konto?", - "logged-out-due-to-inactivity": "You have been logged out of the Admin Control Panel due to inactivity" + "logged-out-due-to-inactivity": "Du er blevet logged af Admin Kontrol Panelet, på grund af din inaktiviet." } \ No newline at end of file diff --git a/public/language/de/admin/admin.json b/public/language/de/admin/admin.json index 9c01f56006..70c096f86b 100644 --- a/public/language/de/admin/admin.json +++ b/public/language/de/admin/admin.json @@ -1,7 +1,7 @@ { - "alert.confirm-reload": "Are you sure you wish to reload NodeBB?", - "alert.confirm-restart": "Are you sure you wish to restart NodeBB?", + "alert.confirm-reload": "Bist du sicher, dass du NodeBB neu laden möchtest?", + "alert.confirm-restart": "Bist du sicher, dass du NodeBB neu starten möchtest?", "acp-title": "%1 | NodeBB Admin Control Panel", - "settings-header-contents": "Contents" + "settings-header-contents": "Inhalte" } \ No newline at end of file diff --git a/public/language/de/admin/advanced/cache.json b/public/language/de/admin/advanced/cache.json index ecdd3825b3..75a8f8a48c 100644 --- a/public/language/de/admin/advanced/cache.json +++ b/public/language/de/admin/advanced/cache.json @@ -1,5 +1,5 @@ { - "post-cache": "Post Cache", + "post-cache": "Eintrag Zwischenspeicher", "posts-in-cache": "Einträge im Zwischenspeicher", "average-post-size": "Durchschnittliche Forum Eintrags Größe", "length-to-max": "Länge / Maximum", diff --git a/public/language/de/admin/advanced/database.json b/public/language/de/admin/advanced/database.json index f7db6220ee..71c4feb1a1 100644 --- a/public/language/de/admin/advanced/database.json +++ b/public/language/de/admin/advanced/database.json @@ -1,35 +1,35 @@ { "x-b": "%1 b", "x-mb": "%1 mb", - "uptime-seconds": "Uptime in Seconds", - "uptime-days": "Uptime in Days", + "uptime-seconds": "Laufzeit in Sekunden", + "uptime-days": "Laufzeit in Tagen", "mongo": "Mongo", "mongo.version": "MongoDB Version", - "mongo.storage-engine": "Storage Engine", + "mongo.storage-engine": "Speicherengine", "mongo.collections": "Collections", - "mongo.objects": "Objects", - "mongo.avg-object-size": "Avg. Object Size", - "mongo.data-size": "Data Size", - "mongo.storage-size": "Storage Size", - "mongo.index-size": "Index Size", - "mongo.file-size": "File Size", + "mongo.objects": "Objekte", + "mongo.avg-object-size": "Durchschnittliche Objektgröße", + "mongo.data-size": "Datengröße", + "mongo.storage-size": "Speichergröße", + "mongo.index-size": "Indexgröße", + "mongo.file-size": "Dateigröße", "mongo.resident-memory": "Resident Memory", - "mongo.virtual-memory": "Virtual Memory", + "mongo.virtual-memory": "virtueller Speicher", "mongo.mapped-memory": "Mapped Memory", - "mongo.raw-info": "MongoDB Raw Info", + "mongo.raw-info": "MongoDB Rohinfo", "redis": "Redis", "redis.version": "Redis Version", - "redis.connected-clients": "Connected Clients", - "redis.connected-slaves": "Connected Slaves", - "redis.blocked-clients": "Blocked Clients", - "redis.used-memory": "Used Memory", - "redis.memory-frag-ratio": "Memory Fragmentation Ratio", - "redis.total-connections-recieved": "Total Connections Received", - "redis.total-commands-processed": "Total Commands Processed", - "redis.iops": "Instantaneous Ops. Per Second", + "redis.connected-clients": "Verbundene Clients", + "redis.connected-slaves": "Verbundene Slaves", + "redis.blocked-clients": "Blockierte Clients", + "redis.used-memory": "Speicherverbrauch", + "redis.memory-frag-ratio": "Speicherfragmentierungsgrad", + "redis.total-connections-recieved": "Insgesamt Verbindungen empfangen", + "redis.total-commands-processed": "Insgesamt Kommandos ausgeführt", + "redis.iops": "Durchschnittliche Anzahl von Ein-/Ausgaben pro Sekunde", "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", - "redis.raw-info": "Redis Raw Info" + "redis.raw-info": "Redis Rohinfo" } \ No newline at end of file diff --git a/public/language/de/admin/advanced/errors.json b/public/language/de/admin/advanced/errors.json index 963e68b116..837b211595 100644 --- a/public/language/de/admin/advanced/errors.json +++ b/public/language/de/admin/advanced/errors.json @@ -1,14 +1,14 @@ { - "figure-x": "Figure %1", - "error-events-per-day": "%1 events per day", + "figure-x": "Abbildung %1", + "error-events-per-day": "%1 Ereignisse pro Tag", "error.404": "404 Not Found", "error.503": "503 Service Unavailable", - "manage-error-log": "Manage Error Log", - "export-error-log": "Export Error Log (CSV)", - "clear-error-log": "Clear Error Log", - "route": "Route", - "count": "Count", - "no-routes-not-found": "Hooray! There are no routes that were not found.", - "clear404-confirm": "Are you sure you wish to clear the 404 error logs?", - "clear404-success": "\"404 Not Found\" errors cleared" + "manage-error-log": "Aktionen Fehlerprotokoll", + "export-error-log": "Exportiere das Fehlerprotokoll (CSV)", + "clear-error-log": "Lösche Fehlerprotokoll", + "route": "Zielroute", + "count": "Anzahl", + "no-routes-not-found": "Hurra! Es gibt keine Zielrouten, die nicht gefunden wurden.", + "clear404-confirm": "Bist du dir sicher, dass du das 404 Fehlerprotokoll löschen möchtest?", + "clear404-success": "\"404 Not Found\" Fehler gelöscht" } \ No newline at end of file diff --git a/public/language/de/admin/advanced/events.json b/public/language/de/admin/advanced/events.json index 766eb5e951..15976369c3 100644 --- a/public/language/de/admin/advanced/events.json +++ b/public/language/de/admin/advanced/events.json @@ -1,6 +1,6 @@ { - "events": "Events", - "no-events": "There are no events", - "control-panel": "Events Control Panel", - "delete-events": "Delete Events" + "events": "Veranstaltungen", + "no-events": "Es gibt keine Veranstaltungen", + "control-panel": "Veranstaltungen Steuerung", + "delete-events": "Veranstaltungen löschen" } \ No newline at end of file diff --git a/public/language/de/admin/advanced/logs.json b/public/language/de/admin/advanced/logs.json index b9de400e1c..7399c68b46 100644 --- a/public/language/de/admin/advanced/logs.json +++ b/public/language/de/admin/advanced/logs.json @@ -1,7 +1,7 @@ { - "logs": "Logs", - "control-panel": "Logs Control Panel", - "reload": "Reload Logs", - "clear": "Clear Logs", - "clear-success": "Logs Cleared!" + "logs": "Protokoll", + "control-panel": "Protokoll Steuerung", + "reload": "Protokoll neu laden", + "clear": "Protokoll leeren", + "clear-success": "Protokoll geleert" } \ No newline at end of file diff --git a/public/language/de/admin/appearance/customise.json b/public/language/de/admin/appearance/customise.json index 767d443e29..8d04a48eb8 100644 --- a/public/language/de/admin/appearance/customise.json +++ b/public/language/de/admin/appearance/customise.json @@ -1,9 +1,9 @@ { - "custom-css": "Custom CSS", - "custom-css.description": "Enter your own CSS declarations here, which will be applied after all other styles.", - "custom-css.enable": "Enable Custom CSS", + "custom-css": "Benutzerdefiniertes CSS", + "custom-css.description": "Füge hier deine eigenen CSS-Eigenschaften ein, sie werden als letztes angewendet.", + "custom-css.enable": "Aktiviere benutzerdefiniertes CSS", - "custom-header": "Custom Header", - "custom-header.description": "Enter custom HTML here (ex. JavaScript, Meta Tags, etc.), which will be appended to the <head> section of your forum's markup.", - "custom-header.enable": "Enable Custom Header" + "custom-header": "Benutzerdefinierter Kopfbereich", + "custom-header.description": "Füge hier dein benutzerdefiniertes HTML (z.B. Javascript, Meta Tags, usw.) ein, welches vor dem <head> Tag eingefügt wird.", + "custom-header.enable": "Aktiviere benutzerdefinierten Kopfbereich" } \ No newline at end of file diff --git a/public/language/de/admin/appearance/skins.json b/public/language/de/admin/appearance/skins.json index 4db6fbdd8a..c82e310246 100644 --- a/public/language/de/admin/appearance/skins.json +++ b/public/language/de/admin/appearance/skins.json @@ -1,9 +1,9 @@ { - "loading": "Loading Skins...", + "loading": "Lade Aussehen...", "homepage": "Homepage", - "select-skin": "Select Skin", - "current-skin": "Current Skin", - "skin-updated": "Skin Updated", - "applied-success": "%1 skin was succesfully applied", - "revert-success": "Skin reverted to base colours" + "select-skin": "Wähle Aussehen", + "current-skin": "Aktuelles Aussehen", + "skin-updated": "Aussehen aktualisiert", + "applied-success": "%1 Aussehen wurde erfolgreich angewendet", + "revert-success": "Aussehen wieder auf Basisfarben zurückgestellt." } \ No newline at end of file diff --git a/public/language/de/admin/appearance/themes.json b/public/language/de/admin/appearance/themes.json index 3148a01337..adff70212a 100644 --- a/public/language/de/admin/appearance/themes.json +++ b/public/language/de/admin/appearance/themes.json @@ -1,11 +1,11 @@ { - "checking-for-installed": "Checking for installed themes...", + "checking-for-installed": "Prüfe auf installierte Designs...", "homepage": "Homepage", - "select-theme": "Select Theme", - "current-theme": "Current Theme", - "no-themes": "No installed themes found", - "revert-confirm": "Are you sure you wish to restore the default NodeBB theme?", - "theme-changed": "Theme Changed", - "revert-success": "You have successfully reverted your NodeBB back to it's default theme.", - "restart-to-activate": "Please restart your NodeBB to fully activate this theme" + "select-theme": "Wähle Design", + "current-theme": "Aktuelles Design", + "no-themes": "Keine installierten Designs gefunden.", + "revert-confirm": "Bist du dir sicher, dass du das standard NodeBB Design wieder herstellen willst?", + "theme-changed": "Design geändert", + "revert-success": "Du hast erfolgreich dein NodeBB wieder auf das Standarddesign gewechselt.", + "restart-to-activate": "Bitte starte dein NodeBB neu um das Design voll zu aktivieren." } \ No newline at end of file diff --git a/public/language/de/admin/general/dashboard.json b/public/language/de/admin/general/dashboard.json index b82802db1b..6c87767148 100644 --- a/public/language/de/admin/general/dashboard.json +++ b/public/language/de/admin/general/dashboard.json @@ -1,55 +1,55 @@ { "forum-traffic": "Forum Traffic", - "page-views": "Page Views", - "unique-visitors": "Unique Visitors", - "page-views-last-month": "Page views Last Month", - "page-views-this-month": "Page views This Month", - "page-views-last-day": "Page views in last 24 hours", + "page-views": "Seitenaufrufe", + "unique-visitors": "Besucher", + "page-views-last-month": "Aufrufe im letzten Monat", + "page-views-this-month": "Aufrufe in diesem Monat", + "page-views-last-day": "Aufrufe in den letzten 24 Stunden", - "stats.day": "Day", - "stats.week": "Week", - "stats.month": "Month", - "stats.all": "All Time", + "stats.day": "diesen Tag", + "stats.week": "diese Woche", + "stats.month": "diesen Monat", + "stats.all": "Alle", "updates": "Updates", - "running-version": "You are running NodeBB v%1.", - "keep-updated": "Always make sure that your NodeBB is up to date for the latest security patches and bug fixes.", - "up-to-date": "

You are up-to-date

", - "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-version": "Es läuft NodeBB v%1.", + "keep-updated": "Stelle immer sicher, dass dein NodeBB auf dem neuesten Stand ist für die neuesten Sicherheits-Patches und Bug-fixes.", + "up-to-date": "

System ist aktuell

", + "upgrade-available": "

Version (v%1) wurde veröffentlicht. Beachte um ein NodeBB Upgrade durchzuführen.

", + "prerelease-upgrade-available": "

Das ist eine veraltete pre-release Version von NodeBB. Version (v%1) wurde veröffentlicht. Beachte um ein NodeBB Upgrade durchzuführen.

", + "prerelease-warning": "

Das ist eine pre-release Version von NodeBB. Es können ungewollte Fehler auftreten.

", - "notices": "Notices", + "notices": "Hinweise", - "control-panel": "System Control", + "control-panel": "Systemsteuerung", "reload": "Reload", - "restart": "Restart", - "restart-warning": "Reloading or Restarting your NodeBB will drop all existing connections for a few seconds.", - "maintenance-mode": "Maintenance Mode", - "maintenance-mode-title": "Click here to set up maintenance mode for NodeBB", - "realtime-chart-updates": "Realtime Chart Updates", + "restart": "Neustart", + "restart-warning": "Ein Reload oder Neustart trennt die Verbindung für ein paar Sekunden.", + "maintenance-mode": "Wartungsmodus", + "maintenance-mode-title": "Hier klicken um NodeBB in den Wartungsmodus zu setzen", + "realtime-chart-updates": "Echtzeit Chartaktualisierung", - "active-users": "Active Users", - "active-users.users": "Users", - "active-users.guests": "Guests", - "active-users.total": "Total", - "active-users.connections": "Connections", + "active-users": "aktive Benutzer", + "active-users.users": "Benutzer", + "active-users.guests": "Gäste", + "active-users.total": "Gesamt", + "active-users.connections": "Verbindungen", - "anonymous-registered-users": "Anonymous vs Registered Users", - "anonymous": "Anonymous", - "registered": "Registered", + "anonymous-registered-users": "anonyme vs registrierte Benutzer", + "anonymous": "Anonym", + "registered": "Registriert", - "user-presence": "User Presence", - "on-categories": "On categories list", - "reading-posts": "Reading posts", - "browsing-topics": "Browsing topics", - "recent": "Recent", - "unread": "Unread", + "user-presence": "Benutzerpräsenz", + "on-categories": "auf Kategorie Übersicht", + "reading-posts": "Beiträge lesen", + "browsing-topics": "Themen durchsuchen", + "recent": "Aktuell", + "unread": "Ungelesen", - "high-presence-topics": "High Presence Topics", + "high-presence-topics": "Meist besuchte Themen", - "graphs.page-views": "Page Views", - "graphs.unique-visitors": "Unique Visitors", - "graphs.registered-users": "Registered Users", - "graphs.anonymous-users": "Anonymous Users" + "graphs.page-views": "Seitenaufrufe", + "graphs.unique-visitors": "verschiedene Besucher", + "graphs.registered-users": "registrierte Benutzer", + "graphs.anonymous-users": "anonyme Benutzer" } \ No newline at end of file diff --git a/public/language/de/admin/general/homepage.json b/public/language/de/admin/general/homepage.json index 4866b8baf6..737296b223 100644 --- a/public/language/de/admin/general/homepage.json +++ b/public/language/de/admin/general/homepage.json @@ -1,7 +1,7 @@ { - "home-page": "Home Page", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", - "home-page-route": "Home Page Route", - "custom-route": "Custom Route", - "allow-user-home-pages": "Allow User Home Pages" + "home-page": "Startseite", + "description": "Wähle aus, welche Seite angezeigt werden soll, wenn Nutzer zur Startseite des Forums navigieren.", + "home-page-route": "Startseitenpfad", + "custom-route": "Eigener Startseitenpfad", + "allow-user-home-pages": "Benutzer eigene Startseiten erlauben" } \ No newline at end of file diff --git a/public/language/de/admin/general/languages.json b/public/language/de/admin/general/languages.json index da45cade2c..6940df18c3 100644 --- a/public/language/de/admin/general/languages.json +++ b/public/language/de/admin/general/languages.json @@ -1,5 +1,5 @@ { - "language-settings": "Language Settings", - "description": "The default language determines the language settings for all users who are visiting your forum.
Individual users can override the default language on their account settings page.", - "default-language": "Default Language" + "language-settings": "Spracheinstellungen", + "description": "Die Standardsprache legt die Spracheinstellungen für alle Benutzer fest, die das Forum besuchen.
Einzelne Benutzer können die Standardsprache auf der Seite mit den Kontoeinstellungen überschreiben.", + "default-language": "Standartsprache" } \ No newline at end of file diff --git a/public/language/de/admin/general/navigation.json b/public/language/de/admin/general/navigation.json index c4ba0d09ac..7848f3aa43 100644 --- a/public/language/de/admin/general/navigation.json +++ b/public/language/de/admin/general/navigation.json @@ -1,27 +1,27 @@ { "icon": "Icon:", - "change-icon": "change", - "route": "Route:", + "change-icon": "ändern", + "route": "Pfad:", "tooltip": "Tooltip:", "text": "Text:", - "text-class": "Text Class: optional", + "text-class": "Text Stil: optional", "id": "ID: optional", - "properties": "Properties:", - "only-admins": "Only display to Admins", - "only-global-mods-and-admins": "Only display to Global Moderators and Admins", - "only-logged-in": "Only display to logged in users", - "open-new-window": "Open in a new window", + "properties": "Eigenschaften:", + "only-admins": "Nur sichtbar für Admins", + "only-global-mods-and-admins": "Nur sichtbar für Globale Moderatoren und Admins", + "only-logged-in": "Nur sichtbar für angemeldete Benutzer", + "open-new-window": "In neuem Fenster öffnen", - "installed-plugins-required": "Installed Plugins Required:", + "installed-plugins-required": "Installierte Plugins notwendig:", "search-plugin": "Search plugin", - "btn.delete": "Delete", - "btn.disable": "Disable", - "btn.enable": "Enable", + "btn.delete": "Löschen", + "btn.disable": "Deaktivieren", + "btn.enable": "Aktivieren", - "available-menu-items": "Available Menu Items", - "custom-route": "Custom Route", - "core": "core", - "plugin": "plugin" + "available-menu-items": "Verfügbare Menüpunkte", + "custom-route": "Benutzerdefinierter Pfad", + "core": "Kern", + "plugin": "Plugin" } \ No newline at end of file diff --git a/public/language/de/admin/general/social.json b/public/language/de/admin/general/social.json index 23aedfcfaa..5f5d7b28e8 100644 --- a/public/language/de/admin/general/social.json +++ b/public/language/de/admin/general/social.json @@ -1,5 +1,5 @@ { - "post-sharing": "Post Sharing", - "info-plugins-additional": "Plugins can add additional networks for sharing posts.", - "save-success": "Successfully saved Post Sharing Networks!" + "post-sharing": "Beiträge teilen", + "info-plugins-additional": "Plugins können zusätzliche Netzwerke für das Teilen von Beiträgen hinzufügen.", + "save-success": "Erfolgreich gespeichert!" } \ No newline at end of file diff --git a/public/language/de/admin/general/sounds.json b/public/language/de/admin/general/sounds.json index 95ccbde0f1..22cbf29f14 100644 --- a/public/language/de/admin/general/sounds.json +++ b/public/language/de/admin/general/sounds.json @@ -1,9 +1,9 @@ { - "notifications": "Notifications", - "chat-messages": "Chat Messages", - "play-sound": "Play", - "incoming-message": "Incoming Message", - "outgoing-message": "Outgoing Message", - "upload-new-sound": "Upload New Sound", - "saved": "Settings Saved" + "notifications": "Benachrichtigungen", + "chat-messages": "Chat Nachrichten", + "play-sound": "Abspielen", + "incoming-message": "Eingehende Nachricht", + "outgoing-message": "Gesendete Nachricht", + "upload-new-sound": "Sound hochladen", + "saved": "Einstellungen gespeichert!" } \ No newline at end of file diff --git a/public/language/de/admin/manage/categories.json b/public/language/de/admin/manage/categories.json index 7e2a5ce12e..aea5937fb5 100644 --- a/public/language/de/admin/manage/categories.json +++ b/public/language/de/admin/manage/categories.json @@ -1,68 +1,68 @@ { - "settings": "Category Settings", - "privileges": "Privileges", + "settings": "Kategorie Einstellungen", + "privileges": "Berechtigungen", - "name": "Category Name", - "description": "Category Description", - "bg-color": "Background Colour", - "text-color": "Text Colour", - "bg-image-size": "Background Image Size", - "custom-class": "Custom Class", - "num-recent-replies": "# of Recent Replies", - "ext-link": "External Link", - "upload-image": "Upload Image", - "delete-image": "Remove", - "category-image": "Category Image", - "parent-category": "Parent Category", - "optional-parent-category": "(Optional) Parent Category", - "parent-category-none": "(None)", - "copy-settings": "Copy Settings From", - "optional-clone-settings": "(Optional) Clone Settings From Category", - "purge": "Purge Category", + "name": "Kategorie Name", + "description": "Kategorie Beschreibung", + "bg-color": "Hintergrundfarbe", + "text-color": "Textfarbe", + "bg-image-size": "Größe Hintergrundbild", + "custom-class": "Benutzderdefinierter Stil", + "num-recent-replies": "Anzahl neuer Antworten", + "ext-link": "Externer Link", + "upload-image": "Bild hochladen", + "delete-image": "Entfernen", + "category-image": "Kategorie Bild", + "parent-category": "Übergeordnete Kategorie", + "optional-parent-category": "(Optional) Übergeordnete Kategorie", + "parent-category-none": "(Keine)", + "copy-settings": "kopiere Einstellungen von", + "optional-clone-settings": "(Optional) dubliziere Einstellungen von Kategorie", + "purge": "Kategorie löschen", - "enable": "Enable", - "disable": "Disable", - "edit": "Edit", + "enable": "Aktivieren", + "disable": "Deaktivieren", + "edit": "Bearbeiten", - "select-category": "Select Category", - "set-parent-category": "Set Parent Category", + "select-category": "Wähle Kategorie", + "set-parent-category": "Übergeordnete Kategorie festlegen", - "privileges.description": "You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or a per-group basis. You can add a new user to this table by searching for them in the form below.", - "privileges.warning": "Note: Privilege settings take effect immediately. It is not necessary to save the category after adjusting these settings.", - "privileges.section-viewing": "Viewing Privileges", - "privileges.section-posting": "Posting Privileges", - "privileges.section-moderation": "Moderation Privileges", - "privileges.section-user": "User", - "privileges.search-user": "Add User", - "privileges.no-users": "No user-specific privileges in this category.", - "privileges.section-group": "Group", - "privileges.group-private": "This group is private", - "privileges.search-group": "Add Group", - "privileges.copy-to-children": "Copy to Children", - "privileges.copy-from-category": "Copy from Category", - "privileges.inherit": "If the registered-users group is granted a specific privilege, all other groups receive an implicit privilege, even if they are not explicitly defined/checked. This implicit privilege is shown to you because all users are part of the registered-users user group, and so, privileges for additional groups need not be explicitly granted.", + "privileges.description": "In diesem Bereich können die Zugriffsberechtigungen für diese Kategorie konfiguriert werden. Berechtigungen können pro-Benutzer oder pro-Gruppe gewährt werden. Du kannst einen neuen Benutzer zu dieser Tabelle hinzufügen, indem du sie in dem folgenden Formular suchst.", + "privileges.warning": "Hinweis: Die Zugriffsberechtigungen werden sofort wirksam. Es ist nicht notwendig, die Kategorie zu speichern, nachdem du die Einstellungen angepasst hast.", + "privileges.section-viewing": "Ansichtsberechtigungen", + "privileges.section-posting": "Schreibberechtigungen", + "privileges.section-moderation": "Moderationsberechtigungen", + "privileges.section-user": "Benutzer", + "privileges.search-user": "Benutzer hinzufügen", + "privileges.no-users": "Keine benutzerspezifischen Berechtigungen in dieser Kategorie.", + "privileges.section-group": "Gruppe", + "privileges.group-private": "Diese Gruppe ist privat", + "privileges.search-group": "Gruppe hinzufügen", + "privileges.copy-to-children": "In Untergeordnete kopieren", + "privileges.copy-from-category": "Kopiere von Kategorie", + "privileges.inherit": "Wenn der Gruppe registered-users eine bestimmte Berechtigung erteilt wird, erhalten alle anderen Gruppen eine implizite Berechtigung, auch wenn sie nicht explizit definiert / ausgewählt werden. Diese implizite Berechtigung wird dir angezeigt, da alle Benutzer Teil der Gruppe registered-users sind und daher keine Berechtigungen für zusätzliche Gruppen explizit erteilt werden müssen.", - "analytics.back": "Back to Categories List", - "analytics.title": "Analytics for \"%1\" category", - "analytics.pageviews-hourly": "Figure 1 – Hourly page views for this category", - "analytics.pageviews-daily": "Figure 2 – Daily page views for this category", - "analytics.topics-daily": "Figure 3 – Daily topics created in this category", - "analytics.posts-daily": "Figure 4 – Daily posts made in this category", + "analytics.back": "Zurück zur Kategorien Übersicht", + "analytics.title": "Analyse für \\\"%1\\\" Kategorie", + "analytics.pageviews-hourly": "Diagramm 1 – Stündliche Seitenaufrufe in dieser Kategorie", + "analytics.pageviews-daily": "Diagramm 2 – Tägliche Seitenaufrufe in dieser Kategorie", + "analytics.topics-daily": "Diagramm 3 – Täglich erstellte Themen in dieser Kategorie", + "analytics.posts-daily": "Diagramm 4 – Täglich erstellte Beiträge in dieser Kategorie", - "alert.created": "Created", - "alert.create-success": "Category successfully created!", - "alert.none-active": "You have no active categories.", - "alert.create": "Create a Category", - "alert.confirm-moderate": "Are you sure you wish to grant the moderation privilege to this user group? This group is public, and any users can join at will.", - "alert.confirm-purge": "

Do you really want to purge this category \"%1\"?

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

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

", - "alert.purge-success": "Category purged!", - "alert.copy-success": "Settings Copied!", - "alert.set-parent-category": "Set Parent Category", - "alert.updated": "Updated Categories", - "alert.updated-success": "Category IDs %1 successfully updated.", - "alert.upload-image": "Upload category image", - "alert.find-user": "Find a User", - "alert.user-search": "Search for a user here...", - "alert.find-group": "Find a Group", - "alert.group-search": "Search for a group here..." + "alert.created": "Erstellt", + "alert.create-success": "Kategorie erfolgreich erstellt!", + "alert.none-active": "Du hast keine aktiven Kategorien.", + "alert.create": "Erstelle eine Kategorie", + "alert.confirm-moderate": "Bist du sicher, dass du dieser Gruppe das Moderationsrecht gewähren möchtest? Diese Gruppe ist öffentlich, und alle Benutzer können nach Belieben beitreten.", + "alert.confirm-purge": "

Möchtest du die Kategorie \\\"%1\\\" wirklich löschen?

Warnung! Alle Themen und Beiträge in dieser Kategorie werden gelöscht!

Löschen einer Kategorie wird alle Themen und Beiträge zu entfernen, und die Kategorie aus der Datenbank löschen. Falls du eine Kategorie temporär entfernen möchstest, dann kannst du sie stattdessen \\\"deaktivieren\\\".", + "alert.purge-success": "Kategorie gelöscht!", + "alert.copy-success": "Einstellungen kopiert!", + "alert.set-parent-category": "Übergeordnete Kategorie festlegen", + "alert.updated": "Kategorien aktualisiert", + "alert.updated-success": "Kategorie IDs %1 erfolgreich aktualisiert.", + "alert.upload-image": "Kategorie Bild hochladen", + "alert.find-user": "Benutzer finden", + "alert.user-search": "Hier nach einem Benutzer suchen...", + "alert.find-group": "Gruppe finden", + "alert.group-search": "Hier nach einer Gruppe suchen..." } \ No newline at end of file diff --git a/public/language/de/admin/menu.json b/public/language/de/admin/menu.json index 6a4995ea6e..fa0afa7405 100644 --- a/public/language/de/admin/menu.json +++ b/public/language/de/admin/menu.json @@ -1,75 +1,75 @@ { - "section-general": "General", - "general/dashboard": "Dashboard", - "general/homepage": "Home Page", + "section-general": "Allgemein", + "general/dashboard": "Übersicht", + "general/homepage": "Startseite", "general/navigation": "Navigation", - "general/languages": "Languages", - "general/sounds": "Sounds", - "general/social": "Social", + "general/languages": "Sprachen", + "general/sounds": "Töne", + "general/social": "Soziale Medien", - "section-manage": "Manage", - "manage/categories": "Categories", - "manage/tags": "Tags", - "manage/users": "Users", - "manage/registration": "Registration Queue", - "manage/groups": "Groups", - "manage/flags": "Flags", + "section-manage": "Verwalten", + "manage/categories": "Kategorien", + "manage/tags": "Schlagworte", + "manage/users": "Benutzer", + "manage/registration": "Warteliste", + "manage/groups": "Gruppen", + "manage/flags": "Markierungen", "manage/ip-blacklist": "IP Blacklist", - "section-settings": "Settings", - "settings/general": "General", + "section-settings": "Einstellungen", + "settings/general": "Allgemein", "settings/reputation": "Reputation", - "settings/email": "Email", - "settings/user": "User", - "settings/group": "Group", - "settings/guest": "Guests", + "settings/email": "E-Mail", + "settings/user": "Benutzer", + "settings/group": "Gruppe", + "settings/guest": "Gäste", "settings/uploads": "Uploads", - "settings/post": "Post", + "settings/post": "Beiträge", "settings/chat": "Chat", - "settings/pagination": "Pagination", - "settings/tags": "Tags", - "settings/notifications": "Notifications", + "settings/pagination": "Seitennummerierung", + "settings/tags": "Schlagworte", + "settings/notifications": "Benachrichtigungen", "settings/cookies": "Cookies", "settings/web-crawler": "Web Crawler", "settings/sockets": "Sockets", - "settings/advanced": "Advanced", + "settings/advanced": "Erweitert", - "settings.page-title": "%1 Settings", + "settings.page-title": "%1 Einstellungen", - "section-appearance": "Appearance", + "section-appearance": "Aussehen", "appearance/themes": "Themes", "appearance/skins": "Skins", - "appearance/customise": "Custom HTML & CSS", + "appearance/customise": "Eigene HTML & CSS", - "section-extend": "Extend", + "section-extend": "Erweitert", "extend/plugins": "Plugins", "extend/widgets": "Widgets", - "extend/rewards": "Rewards", + "extend/rewards": "Belohnungen", - "section-social-auth": "Social Authentication", + "section-social-auth": "Soziale Authentifizierung", "section-plugins": "Plugins", - "extend/plugins.install": "Install Plugins", + "extend/plugins.install": "Plugins installieren", - "section-advanced": "Advanced", - "advanced/database": "Database", - "advanced/events": "Events", - "advanced/logs": "Logs", - "advanced/errors": "Errors", + "section-advanced": "System", + "advanced/database": "Datenbank", + "advanced/events": "Ereignisse", + "advanced/logs": "Protokoll", + "advanced/errors": "Fehler", "advanced/cache": "Cache", "development/logger": "Logger", "development/info": "Info", - "reload-forum": "Reload Forum", - "restart-forum": "Restart Forum", - "logout": "Log out", - "view-forum": "View Forum", + "reload-forum": "Forum neu laden", + "restart-forum": "Forum neu starten", + "logout": "Abmelden", + "view-forum": "Forum anzeigen", - "search.placeholder": "Search...", - "search.no-results": "No results...", - "search.search-forum": "Search the forum for ", - "search.keep-typing": "Type more to see results...", - "search.start-typing": "Start typing to see results...", + "search.placeholder": "Suchen...", + "search.no-results": "Keine Ergebnisse...", + "search.search-forum": "Suche im Forum nach ", + "search.keep-typing": "Gib mehr ein, um die Ergebnisse zu sehen...", + "search.start-typing": "Starte die Eingabe, um die Ergebnisse zu sehen...", - "connection-lost": "Connection to %1 has been lost, attempting to reconnect..." + "connection-lost": "Verbindung zu %1 verloren, wird wieder hergestellt..." } \ No newline at end of file diff --git a/public/language/de/admin/settings/user.json b/public/language/de/admin/settings/user.json index bdabb075e9..3c0124ff89 100644 --- a/public/language/de/admin/settings/user.json +++ b/public/language/de/admin/settings/user.json @@ -1,59 +1,59 @@ { - "authentication": "Authentication", - "allow-local-login": "Allow local login", - "require-email-confirmation": "Require Email Confirmation", - "email-confirm-interval": "User may not resend a confirmation email until", - "email-confirm-email2": "minutes have elapsed", - "allow-login-with": "Allow login with", - "allow-login-with.username-email": "Username or Email", - "allow-login-with.username": "Username Only", - "allow-login-with.email": "Email Only", - "account-settings": "Account Settings", - "disable-username-changes": "Disable username changes", - "disable-email-changes": "Disable email changes", - "disable-password-changes": "Disable password changes", - "allow-account-deletion": "Allow account deletion", - "user-info-private": "Make user info private", + "authentication": "Authentifizierung", + "allow-local-login": "Erlaube Lokalen Login", + "require-email-confirmation": "Benötigt E-Mail Bestätigung", + "email-confirm-interval": "Der Benutzer kann für ", + "email-confirm-email2": " Minuten keine Bestätigungsmail erneut senden.", + "allow-login-with": "Erlaube Login mit", + "allow-login-with.username-email": "Benutzername oder E-Mail", + "allow-login-with.username": "Nur Benutzername", + "allow-login-with.email": "Nur E-Mail", + "account-settings": "Kontoeinstellungen", + "disable-username-changes": "Deaktiviere Änderungen des Benutzernames", + "disable-email-changes": "Deaktiviere Änderungen der E-Mail Adresse", + "disable-password-changes": "Deaktiviere Änderungen des Passwortes", + "allow-account-deletion": "Erlaube löschen des Kontos", + "user-info-private": "Stelle Benutzerinformationen auf Privat", "themes": "Themes", - "disable-user-skins": "Prevent users from choosing a custom skin", - "account-protection": "Account Protection", - "login-attempts": "Login attempts per hour", + "disable-user-skins": "Verhindere das Benutzer eigene Skins verwenden", + "account-protection": "Kontosicherheit", + "login-attempts": "Login-Versuche pro Stunde", "login-attempts-help": "If login attempts to a user's account exceeds this threshold, that account will be locked for a pre-configured amount of time", - "lockout-duration": "Account Lockout Duration (minutes)", + "lockout-duration": "Account Aussperrzeitraum (Minuten)", "login-days": "Days to remember user login sessions", - "password-expiry-days": "Force password reset after a set number of days", - "registration": "User Registration", - "registration-type": "Registration Type", + "password-expiry-days": "Erzwinge ein Passwortreset nach x Tagen", + "registration": "Benutzer Registrierung", + "registration-type": "Registrierungart", "registration-type.normal": "Normal", - "registration-type.admin-approval": "Admin Approval", - "registration-type.admin-approval-ip": "Admin Approval for IPs", - "registration-type.invite-only": "Invite Only", - "registration-type.admin-invite-only": "Admin Invite Only", - "registration-type.disabled": "No registration", - "registration-type.help": "Normal - Users can register from the /register page.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", - "registration.max-invites": "Maximum Invitations per User", - "max-invites": "Maximum Invitations per User", - "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", - "min-username-length": "Minimum Username Length", - "max-username-length": "Maximum Username Length", - "min-password-length": "Minimum Password Length", - "max-about-me-length": "Maximum About Me Length", - "terms-of-use": "Forum Terms of Use (Leave blank to disable)", - "user-search": "User Search", - "user-search-results-per-page": "Number of results to display", - "default-user-settings": "Default User Settings", - "show-email": "Show email", - "show-fullname": "Show fullname", - "restrict-chat": "Only allow chat messages from users I follow", - "outgoing-new-tab": "Open outgoing links in new tab", - "topic-search": "Enable In-Topic Searching", - "digest-freq": "Subscribe to Digest", - "digest-freq.off": "Off", - "digest-freq.daily": "Daily", - "digest-freq.weekly": "Weekly", - "digest-freq.monthly": "Monthly", - "email-chat-notifs": "Send an email if a new chat message arrives and I am not online", - "email-post-notif": "Send an email when replies are made to topics I am subscribed to", - "follow-created-topics": "Follow topics you create", - "follow-replied-topics": "Follow topics that you reply to" + "registration-type.admin-approval": "Admin Genehmigung", + "registration-type.admin-approval-ip": "Admin Genehmigung für IPs", + "registration-type.invite-only": "Nur Einladungen", + "registration-type.admin-invite-only": "Nur Admin Einladungen", + "registration-type.disabled": "Keine Registrierung", + "registration-type.help": "Normal - Benutzer kann sich über die /register Seite registrieren.
\nFreischaltung durch einen Admin - Benutzerregistrationen werden in der Bestätigungswarteschlange für die Admins plaziert.
\nNur Einladung - Benutzer können andere auf der Benutzer Seite einladen.
\nNur Admineinladung - Nur Administratoren können andere auf der Benutzer und der admin/manage/users Seite einladen.
\nKeine Registrierung- Keine Benutzerregistrierung.
", + "registration.max-invites": "Maximale Einladungen pro Benutzer", + "max-invites": "Maximale Einladungen pro Benutzer", + "max-invites-help": "0 für keine Beschränkung. Admins haben keine beschränkung.
Nur praktikabel für \"Nur Einladungen\".", + "min-username-length": "Minimale länge des Benutzernamens", + "max-username-length": "Maximale länge des Benutzernamens", + "min-password-length": "Minimale länge des Passwortes", + "max-about-me-length": "Maximale länge von Über Mich", + "terms-of-use": "Forum Nutzungsbedingungen (Leer lassen um es zu deaktivieren)", + "user-search": "Benutzersuche", + "user-search-results-per-page": "Anzahl anzuzeigener Ergebnisse", + "default-user-settings": "Standard Benutzer Einstellungen", + "show-email": "Zeige E-Mail-Adresse", + "show-fullname": "Zeige vollen Namen", + "restrict-chat": "Erlaube nur Chatnachrichten von Benutzern denen ich folge", + "outgoing-new-tab": "Öffne externe Links in einem neuen Tab", + "topic-search": "Suchen innerhalb von Themen aktivieren", + "digest-freq": "Zusammenfassung abonnieren", + "digest-freq.off": "Aus", + "digest-freq.daily": "Täglich", + "digest-freq.weekly": "Wöchentlich", + "digest-freq.monthly": "Monatlich", + "email-chat-notifs": "Sende eine E-Mail, wenn eine neue Chat-Nachricht eingeht und ich nicht online bin", + "email-post-notif": "Sende eine E-Mail wenn auf Themen die ich abonniert habe geantwortet wird", + "follow-created-topics": "Themen folgen, die du erstellst", + "follow-replied-topics": "Themen folgen, auf die du antwortest" } \ No newline at end of file diff --git a/public/language/de/admin/settings/web-crawler.json b/public/language/de/admin/settings/web-crawler.json index 2e0d31d12b..c5808d268e 100644 --- a/public/language/de/admin/settings/web-crawler.json +++ b/public/language/de/admin/settings/web-crawler.json @@ -1,10 +1,10 @@ { - "crawlability-settings": "Crawlability Settings", - "robots-txt": "Custom Robots.txt Leave blank for default", - "sitemap-feed-settings": "Sitemap & Feed Settings", - "disable-rss-feeds": "Disable RSS Feeds", - "disable-sitemap-xml": "Disable Sitemap.xml", - "sitemap-topics": "Number of Topics to display in the Sitemap", - "clear-sitemap-cache": "Clear Sitemap Cache", - "view-sitemap": "View Sitemap" + "crawlability-settings": "Crawlability Einstellung", + "robots-txt": "Benutzerdefinierte Robots.txtLeer lassen für Standardeinstellung", + "sitemap-feed-settings": "Seitenübersicht & Feed Einstellungen", + "disable-rss-feeds": "Deaktiviere RSS Feeds", + "disable-sitemap-xml": "Deaktiviere Seitenübersicht.xml", + "sitemap-topics": "Anzahl der Themen die auf der Seitenübersicht angezeigt werden", + "clear-sitemap-cache": "Leere Seitenübersicht Cache", + "view-sitemap": "Zeige Seitenübersicht" } \ No newline at end of file diff --git a/public/language/de/error.json b/public/language/de/error.json index 85f6507fd6..105b48a3a8 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -29,7 +29,7 @@ "username-too-long": "Benutzername ist zu lang", "password-too-long": "Passwort ist zu lang", "user-banned": "Benutzer ist gesperrt", - "user-banned-reason": "Sorry, this account has been banned (Reason: %1)", + "user-banned-reason": "Entschuldige, dieses Konto wurde gebannt (Grund: %1)", "user-too-new": "Entschuldigung, du musst %1 Sekunde(n) warten, bevor du deinen ersten Beitrag schreiben kannst.", "blacklisted-ip": "Deine IP-Adresse ist für diese Plattform gesperrt. Sollte dies ein Irrtum sein, dann kontaktiere bitte einen Administrator.", "ban-expiry-missing": "Bitte gebe ein Enddatum für diesen Ban an", diff --git a/public/language/de/global.json b/public/language/de/global.json index b53636512d..98a65c6687 100644 --- a/public/language/de/global.json +++ b/public/language/de/global.json @@ -100,8 +100,8 @@ "unsaved-changes": "Es gibt ungespeicherte Änderungen. Bist du dir sicher, dass du die Seite verlassen willst?", "reconnecting-message": "Es scheint als hättest du die Verbindung zu %1 verloren, bitte warte während wir versuchen sie wieder aufzubauen.", "play": "Play", - "cookies.message": "This website uses cookies to ensure you get the best experience on our website.", - "cookies.accept": "Got it!", - "cookies.learn_more": "Learn More", - "edited": "Edited" + "cookies.message": "Diese Website verwendet Cookies, um sicherzustellen, dass du die besten Erfahrungen auf unserer Website machst.", + "cookies.accept": "Verstanden!", + "cookies.learn_more": "Erfahre mehr", + "edited": "Bearbeitet" } \ No newline at end of file diff --git a/public/language/de/groups.json b/public/language/de/groups.json index 49c9b5dd35..8d3f7b822b 100644 --- a/public/language/de/groups.json +++ b/public/language/de/groups.json @@ -53,5 +53,5 @@ "upload-group-cover": "Gruppentitelbild hochladen", "bulk-invite-instructions": "Gib eine mit Kommata getrennte Liste von Benutzernamen ein, um sie in diese Gruppe aufzunehmen", "bulk-invite": "Mehrere einladen", - "remove_group_cover_confirm": "Are you sure you want to remove the cover picture?" + "remove_group_cover_confirm": "Bist du sicher, dass du dein Titelbild entfernen möchtest?" } \ No newline at end of file diff --git a/public/language/de/modules.json b/public/language/de/modules.json index fb542ff56a..47cf83d5c9 100644 --- a/public/language/de/modules.json +++ b/public/language/de/modules.json @@ -13,7 +13,7 @@ "chat.contacts": "Kontakte", "chat.message-history": "Nachrichtenverlauf", "chat.pop-out": "Chat als Pop-out anzeigen", - "chat.minimize": "Minimize", + "chat.minimize": "Minimieren", "chat.maximize": "Maximieren", "chat.seven_days": "7 Tage", "chat.thirty_days": "30 Tage", diff --git a/public/language/de/search.json b/public/language/de/search.json index 336e9d5695..40a25a6f83 100644 --- a/public/language/de/search.json +++ b/public/language/de/search.json @@ -8,7 +8,7 @@ "posted-by": "Geschrieben von", "in-categories": "In Kategorien", "search-child-categories": "Suche in Unterkategorien", - "has-tags": "Has tags", + "has-tags": "Hat Markierungen", "reply-count": "Anzahl Antworten", "at-least": "Mindestens", "at-most": "Höchstens", diff --git a/public/language/de/topic.json b/public/language/de/topic.json index 7d5ab08e47..736ae69582 100644 --- a/public/language/de/topic.json +++ b/public/language/de/topic.json @@ -13,7 +13,7 @@ "notify_me": "Erhalte eine Benachrichtigung bei neuen Antworten zu diesem Thema.", "quote": "Zitieren", "reply": "Antworten", - "replies_to_this_post": "Replies: %1", + "replies_to_this_post": "Antworten: %1", "reply-as-topic": "In einem neuen Thema antworten", "guest-login-reply": "Anmelden zum Antworten", "edit": "Bearbeiten", diff --git a/public/language/de/user.json b/public/language/de/user.json index f6ef830aa8..2d3361df73 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -31,8 +31,8 @@ "signature": "Signatur", "birthday": "Geburtstag", "chat": "Chat", - "chat_with": "Continue chat with %1", - "new_chat_with": "Start new chat with %1", + "chat_with": "Führe deinen Chat mit %1 fort", + "new_chat_with": "Beginne einen neuen Chat mit %1", "follow": "Folgen", "unfollow": "Nicht mehr folgen", "more": "Mehr", @@ -63,7 +63,7 @@ "upload_a_picture": "Ein Bild hochladen", "remove_uploaded_picture": "Hochgeladenes Bild entfernen", "upload_cover_picture": "Titelbild hochladen", - "remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?", + "remove_cover_picture_confirm": "Bist du sicher, dass du dein Titelbild entfernen möchtest?", "settings": "Einstellungen", "show_email": "Zeige meine E-Mail Adresse an.", "show_fullname": "Zeige meinen kompletten Namen an", diff --git a/public/language/en-GB/admin/general/dashboard.json b/public/language/en-GB/admin/general/dashboard.json index b82802db1b..a70dda322e 100644 --- a/public/language/en-GB/admin/general/dashboard.json +++ b/public/language/en-GB/admin/general/dashboard.json @@ -2,6 +2,9 @@ "forum-traffic": "Forum Traffic", "page-views": "Page Views", "unique-visitors": "Unique Visitors", + "users": "Users", + "posts": "Posts", + "topics": "Topics", "page-views-last-month": "Page views Last Month", "page-views-this-month": "Page views This Month", "page-views-last-day": "Page views in last 24 hours", @@ -20,6 +23,11 @@ "prerelease-warning": "

This is a pre-release version of NodeBB. Unintended bugs may occur.

", "notices": "Notices", + "restart-not-required": "Restart not required", + "restart-required": "Restart required", + "search-plugin-installed": "Search Plugin installed", + "search-plugin-not-installed": "Search Plugin not installed", + "search-plugin-tooltip": "Install a search plugin from the plugin page in order to activate search functionality", "control-panel": "System Control", "reload": "Reload", @@ -52,4 +60,4 @@ "graphs.unique-visitors": "Unique Visitors", "graphs.registered-users": "Registered Users", "graphs.anonymous-users": "Anonymous Users" -} \ No newline at end of file +} diff --git a/public/language/en-GB/admin/settings/uploads.json b/public/language/en-GB/admin/settings/uploads.json index 8a56c85663..35eaa5a58f 100644 --- a/public/language/en-GB/admin/settings/uploads.json +++ b/public/language/en-GB/admin/settings/uploads.json @@ -9,7 +9,7 @@ "allow-topic-thumbnails": "Allow users to upload topic thumbnails", "topic-thumb-size": "Topic Thumb Size", "allowed-file-extensions": "Allowed File Extensions", - "allowed-file-extensions-help": "Enter comma-separated list of file extensions here (e.g. pdf,xls,doc).\n\t\t\t\t\tAn empty list means all extensions are allowed.", + "allowed-file-extensions-help": "Enter comma-separated list of file extensions here (e.g. pdf,xls,doc). An empty list means all extensions are allowed.", "profile-avatars": "Profile Avatars", "allow-profile-image-uploads": "Allow users to upload profile images", "convert-profile-image-png": "Convert profile image uploads to PNG", @@ -25,4 +25,4 @@ "profile-covers": "Profile Covers", "default-covers": "Default Cover Images", "default-covers-help": "Add comma-separated default cover images for accounts that don't have an uploaded cover image" -} \ No newline at end of file +} diff --git a/public/language/es/admin/menu.json b/public/language/es/admin/menu.json index 77bc046079..41bbd5ee3b 100644 --- a/public/language/es/admin/menu.json +++ b/public/language/es/admin/menu.json @@ -1,7 +1,7 @@ { "section-general": "General", "general/dashboard": "Panel", - "general/homepage": "Página Inicial", + "general/homepage": "Inicio", "general/navigation": "Navegación", "general/languages": "Lenguajes", "general/sounds": "Sonidos", @@ -13,7 +13,7 @@ "manage/users": "Usuarios", "manage/registration": "Cola de Registro", "manage/groups": "Grupos", - "manage/flags": "Banderas", + "manage/flags": "Reportes", "manage/ip-blacklist": "Lista negra de IP", "section-settings": "Opciones", @@ -24,39 +24,39 @@ "settings/group": "Grupo", "settings/guest": "Invitados", "settings/uploads": "Subidas", - "settings/post": "Anuncio", + "settings/post": "Mensaje", "settings/chat": "Chat", "settings/pagination": "Paginación", "settings/tags": "Etiquetas", "settings/notifications": "Notificaciones", "settings/cookies": "Cookies", - "settings/web-crawler": "Web Crawler", - "settings/sockets": "Zócalos", + "settings/web-crawler": "Rastreador web", + "settings/sockets": "Sockets", "settings/advanced": "Avanzado", "settings.page-title": "%1 Opciones", "section-appearance": "Apariencia", "appearance/themes": "Temas", - "appearance/skins": "Skins", + "appearance/skins": "Pieles", "appearance/customise": "HTML & CSS personalizado", "section-extend": "Extender", - "extend/plugins": "Plugins", + "extend/plugins": "Extensiones", "extend/widgets": "Widgets", "extend/rewards": "Recompensas", "section-social-auth": "Autentificación Social", - "section-plugins": "Plugins", - "extend/plugins.install": "Instalar plugins", + "section-plugins": "Extensiones", + "extend/plugins.install": "Instalar extensiones", "section-advanced": "Avanzado", "advanced/database": "Base de datos", "advanced/events": "Eventos", "advanced/logs": "Registros", "advanced/errors": "Errores", - "advanced/cache": "Cache", + "advanced/cache": "Caché", "development/logger": "Registro", "development/info": "Información", @@ -67,9 +67,9 @@ "search.placeholder": "Buscar...", "search.no-results": "Sin resultados...", - "search.search-forum": "Search the forum for ", + "search.search-forum": "Buscar en el foro ", "search.keep-typing": "Escribe más para ver resultados...", "search.start-typing": "Empieza a escribir para ver resultados...", - "connection-lost": "La connexión a %1 se ha perdido, intentando reconectarse..." + "connection-lost": "La conexión a %1 se ha perdido, intentando reconectar..." } \ No newline at end of file diff --git a/public/language/et/admin/admin.json b/public/language/et/admin/admin.json index 9c01f56006..28df5c3bb8 100644 --- a/public/language/et/admin/admin.json +++ b/public/language/et/admin/admin.json @@ -1,7 +1,7 @@ { - "alert.confirm-reload": "Are you sure you wish to reload NodeBB?", - "alert.confirm-restart": "Are you sure you wish to restart NodeBB?", + "alert.confirm-reload": "Oled kindel, et soovid taaslaadida NodeBB?", + "alert.confirm-restart": "Oled kindel, et soovid taaslaadida NodeBB?", - "acp-title": "%1 | NodeBB Admin Control Panel", - "settings-header-contents": "Contents" + "acp-title": "%1 | NodeBB Administraatori kontrollpaneel", + "settings-header-contents": "Sisu" } \ No newline at end of file diff --git a/public/language/et/admin/advanced/cache.json b/public/language/et/admin/advanced/cache.json index 5a954f1232..d82f6688a6 100644 --- a/public/language/et/admin/advanced/cache.json +++ b/public/language/et/admin/advanced/cache.json @@ -1,11 +1,11 @@ { - "post-cache": "Post Cache", - "posts-in-cache": "Posts in Cache", - "average-post-size": "Average Post Size", - "length-to-max": "Length / Max", - "percent-full": "%1% Full", - "post-cache-size": "Post Cache Size", - "items-in-cache": "Items in Cache", - "control-panel": "Control Panel", - "update-settings": "Update Cache Settings" + "post-cache": "Postituste vahemälu", + "posts-in-cache": "Postitused vahemälus", + "average-post-size": "Keskmine postituse suurus", + "length-to-max": "Pikkus / Maksimuum", + "percent-full": "%1% Täis", + "post-cache-size": "Postituse vahemälu suurus", + "items-in-cache": "Esemed vahemälus", + "control-panel": "Kontrollpaneel", + "update-settings": "Uuendatud vahemälu seaded" } \ No newline at end of file diff --git a/public/language/et/admin/advanced/events.json b/public/language/et/admin/advanced/events.json index 766eb5e951..83704a77c5 100644 --- a/public/language/et/admin/advanced/events.json +++ b/public/language/et/admin/advanced/events.json @@ -1,6 +1,6 @@ { - "events": "Events", - "no-events": "There are no events", - "control-panel": "Events Control Panel", - "delete-events": "Delete Events" + "events": "Sündmused", + "no-events": "Sündmused puuduvad", + "control-panel": "Sündmuste kontrollpaneel", + "delete-events": "Kustuta sündmus" } \ No newline at end of file diff --git a/public/language/et/admin/manage/users.json b/public/language/et/admin/manage/users.json index f1651a814b..3529716dc8 100644 --- a/public/language/et/admin/manage/users.json +++ b/public/language/et/admin/manage/users.json @@ -1,91 +1,91 @@ { - "users": "Users", - "edit": "Edit", - "make-admin": "Make Admin", - "remove-admin": "Remove Admin", - "validate-email": "Validate Email", - "send-validation-email": "Send Validation Email", - "password-reset-email": "Send Password Reset Email", - "ban": "Ban User(s)", - "temp-ban": "Ban User(s) Temporarily", - "unban": "Unban User(s)", - "reset-lockout": "Reset Lockout", - "reset-flags": "Reset Flags", - "delete": "Delete User(s)", - "purge": "Delete User(s) and Content", - "download-csv": "Download CSV", - "invite": "Invite", - "new": "New User", + "users": "Kasutajad", + "edit": "Muuda", + "make-admin": "Ülenda administraatoriks", + "remove-admin": "Eemalda administraator", + "validate-email": "Kinnita email", + "send-validation-email": "Saada kinnituskiri", + "password-reset-email": "Saada parooli taastamise email", + "ban": "Keelusta Kasutaja(d)", + "temp-ban": "Keelusta Kasutaja(d) ajutiselt", + "unban": "Tühista keeld Kasutaja(tel)", + "reset-lockout": "Taaslae blokeering", + "reset-flags": "Taasta raporteerimised", + "delete": "Kustuta Kasutaja(d)", + "purge": "Kustuta Kasutaja(d) ja Sisu", + "download-csv": "Lae alla CSV", + "invite": "Kutsu", + "new": "Uus kasutaja", - "pills.latest": "Latest Users", - "pills.unvalidated": "Not Validated", - "pills.no-posts": "No Posts", - "pills.top-posters": "Top Posters", - "pills.top-rep": "Most Reputation", - "pills.inactive": "Inactive", - "pills.flagged": "Most Flagged", - "pills.banned": "Banned", - "pills.search": "User Search", + "pills.latest": "Hiljutised kasutajad", + "pills.unvalidated": "Valideerimata", + "pills.no-posts": "Pole postitusi", + "pills.top-posters": "Top postitajad", + "pills.top-rep": "Kõige rohkem reputatsiooni", + "pills.inactive": "Ebaaktiivne", + "pills.flagged": "Enim raporteeritud", + "pills.banned": "Keelustatud", + "pills.search": "Kasutajate otsing", - "search.username": "By User Name", - "search.username-placeholder": "Enter a username to search", - "search.email": "By Email", - "search.email-placeholder": "Enter a email to search", - "search.ip": "By IP Address", - "search.ip-placeholder": "Enter an IP Address to search", - "search.not-found": "User not found!", + "search.username": "Kasutajanime järgi", + "search.username-placeholder": "Sisesta kasutajanimi, keda soovid otsida", + "search.email": "Emaili kaudu", + "search.email-placeholder": "Sisesta email, mida soovid otsida", + "search.ip": "IP Aadressi järgi", + "search.ip-placeholder": "Sisesta IP Aadress, mida soovid otsida", + "search.not-found": "Kasutajat ei leitud!", - "inactive.3-months": "3 months", - "inactive.6-months": "6 months", - "inactive.12-months": "12 months", + "inactive.3-months": "3 kuud", + "inactive.6-months": "6 kuud", + "inactive.12-months": "12 kuud", "users.uid": "uid", - "users.username": "username", + "users.username": "Kasutajanimi", "users.email": "email", - "users.postcount": "postcount", - "users.reputation": "reputation", - "users.flags": "flags", - "users.joined": "joined", - "users.last-online": "last online", - "users.banned": "banned", + "users.postcount": "Postituste arv", + "users.reputation": "Reputatsioon", + "users.flags": "Raporteerimised", + "users.joined": "Liitunud", + "users.last-online": "Viimati sees", + "users.banned": "keelustatud", - "create.username": "User Name", + "create.username": "Kasutajanimi", "create.email": "Email", - "create.email-placeholder": "Email of this user", - "create.password": "Password", - "create.password-confirm": "Confirm Password", + "create.email-placeholder": "Antud kasutaja email", + "create.password": "Parool", + "create.password-confirm": "Kinnita parool", - "temp-ban.length": "Ban Length", - "temp-ban.reason": "Reason (Optional)", - "temp-ban.hours": "Hours", - "temp-ban.days": "Days", - "temp-ban.explanation": "Enter the length of time for the ban. Note that a time of 0 will be a considered a permanent ban.", + "temp-ban.length": "Keelustuse pikkus", + "temp-ban.reason": "Põhjus (valikuline)", + "temp-ban.hours": "Tunnid", + "temp-ban.days": "Päevad", + "temp-ban.explanation": "Sisesta keelustuse pikkus. Kui sisestad 0, siis seda loetakse igaveseks keelustuseks.", - "alerts.confirm-ban": "Do you really want to ban this user permanently?", - "alerts.confirm-ban-multi": "Do you really want to ban these users permanently?", - "alerts.ban-success": "User(s) banned!", - "alerts.button-ban-x": "Ban %1 user(s)", - "alerts.unban-success": "User(s) unbanned!", + "alerts.confirm-ban": "Kas te tõesti soovite antud kasutajat igaveseks keelustada ?", + "alerts.confirm-ban-multi": "Kas te tõesti soovite antud kasutajaid igaveseks keelustada?", + "alerts.ban-success": "Kasutaja(d) keelustatud!", + "alerts.button-ban-x": "Keelusta %1 kasutaja(d)", + "alerts.unban-success": "Kasutaja(te) keelustus eemaldatud", "alerts.lockout-reset-success": "Lockout(s) reset!", - "alerts.flag-reset-success": "Flags(s) reset!", - "alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!", - "alerts.make-admin-success": "User(s) are now administrators.", + "alerts.flag-reset-success": "Märgistuse(te) taaslaadimine", + "alerts.no-remove-yourself-admin": "Te ei saa ennast Administraatorina eemaldada", + "alerts.make-admin-success": "Kasutaja(d) on nüüd administraatorid.", "alerts.confirm-remove-admin": "Do you really want to remove admins?", - "alerts.remove-admin-success": "User(s) are no longer administrators.", - "alerts.confirm-validate-email": "Do you want to validate email(s) of these user(s)?", - "alerts.validate-email-success": "Emails validated", - "alerts.password-reset-confirm": "Do you want to send password reset email(s) to these user(s)?", - "alerts.confirm-delete": "Warning!
Do you really want to delete user(s)?
This action is not reversable! Only the user account will be deleted, their posts and topics will remain.", - "alerts.delete-success": "User(s) Deleted!", - "alerts.confirm-purge": "Warning!
Do you really want to delete user(s) and their content?
This action is not reversable! All user data and content will be erased!", - "alerts.create": "Create User", - "alerts.button-create": "Create", - "alerts.button-cancel": "Cancel", - "alerts.error-passwords-different": "Passwords must match!", - "alerts.error-x": "Error

%1

", - "alerts.create-success": "User created!", + "alerts.remove-admin-success": "Kasutaja(d) ei ole enam administraatorid.", + "alerts.confirm-validate-email": "Kas te tahate antud kasutaja(te) emaili(d) kinnitada?", + "alerts.validate-email-success": "Emailid kinnitatud", + "alerts.password-reset-confirm": "Kas te tahate saata parooli taastamise emaili(d) antud kasutaja(te)le?", + "alerts.confirm-delete": "Hoiatus!
Kas te tõesti tahate antud kasutaja(d) kustutada?
Seda ei saa enam tagasi võtta. Ainult kasutaja kustutatakse, ülejäänud kasutaja tehtud teemad ja postitused jäävad alles.", + "alerts.delete-success": "Kasutaja(d) kustutatud!", + "alerts.confirm-purge": "Hoiatus!
Kas te tõesti tahate antud kasutaja(d) ja nende sisu kustutada?
Seda ei saa enam tagasi võtta. Kõik kasutajate andmed ja sisu kustutatakse jäädavalt.", + "alerts.create": "Loo Kasutaja", + "alerts.button-create": "Loo", + "alerts.button-cancel": "Tühista", + "alerts.error-passwords-different": "Paroolid peavad kattuma!", + "alerts.error-x": "Viga

%1

", + "alerts.create-success": "Kasutaja tehtud!", - "alerts.prompt-email": "Email: ", - "alerts.email-sent-to": "An invitation email has been sent to %1", + "alerts.prompt-email": "Email:", + "alerts.email-sent-to": "Kutse on saadetud %1", "alerts.x-users-found": "%1 user(s) found! Search took %2 ms." } \ No newline at end of file diff --git a/public/language/fr/admin/admin.json b/public/language/fr/admin/admin.json index 77e00ae9a4..0ba109af02 100644 --- a/public/language/fr/admin/admin.json +++ b/public/language/fr/admin/admin.json @@ -2,6 +2,6 @@ "alert.confirm-reload": "Êtes-vous sûr de vouloir recharger NodeBB ?", "alert.confirm-restart": "Êtes-vous sûr de vouloir redémarrer NodeBB ?", - "acp-title": "%1 | Panneau de contrôle d'administration NodeBB", + "acp-title": "%1 | Panneau d'administration NodeBB", "settings-header-contents": "Contenus" } \ No newline at end of file diff --git a/public/language/fr/admin/advanced/errors.json b/public/language/fr/admin/advanced/errors.json index 3b1b8ac9c6..86637472a9 100644 --- a/public/language/fr/admin/advanced/errors.json +++ b/public/language/fr/admin/advanced/errors.json @@ -8,7 +8,7 @@ "clear-error-log": "Effacer les journaux d'erreurs", "route": "Route", "count": "Nombre", - "no-routes-not-found": "Super ! Aucune route n'a été trouvée.", + "no-routes-not-found": "Hourra ! Aucune route n'a pas été trouvée.", "clear404-confirm": "Êtes-vous sûr de vouloir effacer les journaux d'erreurs 404 ?", "clear404-success": "Erreurs \"404 non trouvé\" effacées" } \ No newline at end of file diff --git a/public/language/fr/admin/appearance/customise.json b/public/language/fr/admin/appearance/customise.json index 3fd295438f..f06d1c65f3 100644 --- a/public/language/fr/admin/appearance/customise.json +++ b/public/language/fr/admin/appearance/customise.json @@ -1,6 +1,6 @@ { "custom-css": "CSS personnalisé", - "custom-css.description": "Entrez vos déclarations CSS ici, elles seront appliquées après tous les autres styles.", + "custom-css.description": "Entrez vos propres déclarations de CSS ici, elles seront appliquées après tous les autres styles.", "custom-css.enable": "Activer les CSS personnalisés", "custom-header": "En-tête personnalisé", diff --git a/public/language/fr/admin/appearance/skins.json b/public/language/fr/admin/appearance/skins.json index 80e117de32..38fddfe42e 100644 --- a/public/language/fr/admin/appearance/skins.json +++ b/public/language/fr/admin/appearance/skins.json @@ -5,5 +5,5 @@ "current-skin": "Skin actuel", "skin-updated": "Skin mis à jour", "applied-success": "Le skin %1 a été appliqué avec succès.", - "revert-success": "Retour des couleurs du skin aux couleurs de base" + "revert-success": "Couleurs du skin remises par défaut" } \ No newline at end of file diff --git a/public/language/fr/admin/appearance/themes.json b/public/language/fr/admin/appearance/themes.json index 6a95b9d808..bc9ca500e4 100644 --- a/public/language/fr/admin/appearance/themes.json +++ b/public/language/fr/admin/appearance/themes.json @@ -1,7 +1,7 @@ { "checking-for-installed": "Vérification des thèmes installés…", "homepage": "Page d'accueil", - "select-theme": "Choisir ce thème", + "select-theme": "Choisir un thème", "current-theme": "Thème actuel", "no-themes": "Aucun thème installé", "revert-confirm": "Êtes-vous sûr de vouloir restaurer le thème NodeBB par défaut ?", diff --git a/public/language/fr/admin/development/logger.json b/public/language/fr/admin/development/logger.json index 1b23dfbb09..83f424e622 100644 --- a/public/language/fr/admin/development/logger.json +++ b/public/language/fr/admin/development/logger.json @@ -1,10 +1,10 @@ { "logger-settings": "Réglages de la journalisation", - "description": "En activant les cases, vous recevrez des journaux dans votre terminal. Si vous spécifiez un chemin, les journaux seront sauvegardés à la place. La journalisation HTTP est utile pour collecter des statistiques sur les personnes qui accèdent à votre forum. En plus de la journalisation des requêtes HTTP, nous pouvons également journaliser les évènements. La journalisation socket.io, associée au monitoring de redis-cli, peut être très utile pour apprendre les rouages de NodeBB.", + "description": "En activant les cases, vous recevrez des journaux dans votre terminal. Si vous spécifiez un chemin, les journaux y seront sauvegardés. La journalisation HTTP est utile pour collecter des statistiques sur les personnes qui accèdent à votre forum. En plus de la journalisation des requêtes HTTP, nous pouvons également journaliser les évènements. La journalisation socket.io, associée au monitoring redis-cli, peut être très utile pour apprendre les rouages de NodeBB.", "explanation": "Cochez ou décochez simplement les réglages de la journalisation pour l'activer ou la désactiver. Aucun redémarrage n'est nécessaire.", "enable-http": "Activer la journalisation HTTP", "enable-socket": "Activer la journalisation des événements socket.io", - "file-path": "Chemin vers le fichier journal", + "file-path": "Chemin vers les fichiers journaux", "file-path-placeholder": "/path/to/log/file.log ::: laissez vide pour journaliser vers votre terminal", "control-panel": "Panneau de contrôle de la journalisation", diff --git a/public/language/fr/admin/extend/plugins.json b/public/language/fr/admin/extend/plugins.json index d7ba7df3f7..0b2a98ec27 100644 --- a/public/language/fr/admin/extend/plugins.json +++ b/public/language/fr/admin/extend/plugins.json @@ -12,15 +12,15 @@ "reorder-plugins": "Re-ordonner les plugins", "order-active": "Trier les plugins actifs", "dev-interested": "Êtes-vous intéressés par l'écriture de plugins pour NodeBB ?", - "docs-info": "La documentation complete sur l'écriture de plugins peut être trouvée sur leportail de documentation NodeBB.", + "docs-info": "La documentation complète sur l'écriture de plugins peut être trouvée sur leportail de documentation NodeBB.", - "order.description": "Certains plugins fonctionnent de la meilleure façon lorsqu'ils sont initialisés avant/après d'autres plugins.", - "order.explanation": "Les plugins chargent dans l'ordre spécifié ici, de haut en bas.", + "order.description": "Certains plugins fonctionnent mieux lorsqu'ils sont initialisés avant/après d'autres plugins.", + "order.explanation": "Les plugins se chargent dans l'ordre spécifié, ici de haut en bas.", "plugin-item.themes": "Thèmes", "plugin-item.deactivate": "Désactiver", "plugin-item.activate": "Activer", - "plugin-item.install": "Install", + "plugin-item.install": "Installer", "plugin-item.uninstall": "Désinstaller", "plugin-item.settings": "Réglages", "plugin-item.installed": "Installé", @@ -28,7 +28,7 @@ "plugin-item.upgrade": "Mettre à jour", "plugin-item.more-info": "Pour plus d'informations :", "plugin-item.unknown": "Inconnu", - "plugin-item.unknown-explanation": "L'état de ce plugin n'a pas pu être déterminé, possiblement à cause une erreur de configuration.", + "plugin-item.unknown-explanation": "L'état de ce plugin n'a pas pu être déterminé, possiblement à cause d'une erreur de configuration.", "alert.enabled": "Plugin activé", "alert.disabled": "Plugin désactivé", @@ -39,9 +39,9 @@ "alert.deactivate-success": "Plugin désactivé avec succès", "alert.upgrade-success": "Veuillez recharger votre NodeBB pour achever la mise à jour de ce plugin.", "alert.install-success": "Plugin installé avec succès, veuillez maintenant l'activer.", - "alert.uninstall-success": "Le plugin a été désactivé et desinstallé avec succès.", - "alert.suggest-error": "

NodeBB n'a pas pu joindre le gestionnaire de paquets, procéder à l'installation de la dernière version ?

Le serveur a retourné (%1) : %2
", + "alert.uninstall-success": "Le plugin a été désactivé et désinstallé avec succès.", + "alert.suggest-error": "

NodeBB n'a pas pu joindre le gestionnaire de paquets, procéder à l'installation de la dernière version ?

Le serveur a répondu (%1) : %2
", "alert.package-manager-unreachable": "

NodeBB n'a pas pu joindre le gestionnaire de paquets, une mise à jour n'est pas suggérée pour le moment.

", "alert.incompatible": "

Votre version de NodeBB (v%1) ne peut mettre à jour que vers la version v%2 de ce plugin. Veuillez mettre à jour NodeBB si vous souhaitez installer une version plus récente de ce plugin.

", - "alert.possibly-incompatible": "

Aucune information de compatibilité trouvée

Ce plugin n'a pas spécifié de version pour une installation sur votre version de NodeBB. Aucune compatibilité ne peut être garantie, et ce plugin pourrait empêcher NodeBB de démarrer correctement.

Dans l'éventualité où NodeBB ne pourrait pas démarrer proprement :

$ ./nodebb reset plugin=\"%1\"

Voulez-vous continuer l'installation de ce plugin ?

" + "alert.possibly-incompatible": "

Aucune information de compatibilité trouvée

Ce plugin n'a pas spécifié de version pour une installation sur votre version de NodeBB. Aucune compatibilité ne peut être garantie et ce plugin pourrait empêcher NodeBB de démarrer correctement.

Dans l'éventualité où NodeBB ne pourrait pas démarrer proprement :

$ ./nodebb reset plugin=\"%1\"

Voulez-vous continuer l'installation de ce plugin ?

" } diff --git a/public/language/fr/admin/extend/rewards.json b/public/language/fr/admin/extend/rewards.json index 71df4caa70..b1db437fc0 100644 --- a/public/language/fr/admin/extend/rewards.json +++ b/public/language/fr/admin/extend/rewards.json @@ -1,10 +1,10 @@ { "rewards": "Récompenses", "condition-if-users": "Si la propriété de l'utilisateur", - "condition-is": "est", - "condition-then": "alors", + "condition-is": "Est :", + "condition-then": "Alors :", "max-claims": "Nombre de fois que la récompense peut être obtenue", - "zero-infinite": "Entrez 0 pour un nombre infini", + "zero-infinite": "Entrez 0 pour infini", "delete": "Supprimer", "enable": "Activer", "disable": "Désactiver", diff --git a/public/language/fr/admin/extend/widgets.json b/public/language/fr/admin/extend/widgets.json index d736691e08..e7ee436949 100644 --- a/public/language/fr/admin/extend/widgets.json +++ b/public/language/fr/admin/extend/widgets.json @@ -1,9 +1,9 @@ { "available": "Widgets disponibles", - "explanation": "Sélectionnez un widget depuis le menu puis glissez déposez-le dans une zone template du widget à gauche.", + "explanation": "Sélectionnez un widget depuis le menu puis glissez-déposez le dans une zone template du widget à gauche.", "none-installed": "Aucun widget trouvé ! Activez le plugin widgets essentiels dans le panneau de contrôle plugins.", "containers.available": "Conteneurs disponibles", - "containers.explanation": "Glissez déposez sur n'importe quel widget actif", + "containers.explanation": "Glissez-déposez sur n'importe quel widget actif", "containers.none": "Aucun", "container.well": "Well", "container.jumbotron": "Jombotron", diff --git a/public/language/fr/admin/general/dashboard.json b/public/language/fr/admin/general/dashboard.json index c7533f2931..3123167d2a 100644 --- a/public/language/fr/admin/general/dashboard.json +++ b/public/language/fr/admin/general/dashboard.json @@ -9,29 +9,29 @@ "stats.day": "Jour", "stats.week": "Semaine", "stats.month": "Mois", - "stats.all": "Toujours", + "stats.all": "Tous les temps", "updates": "Mises à jour", "running-version": "NodeBB v%1 est actuellement installé.", - "keep-updated": "Assurez-vous que votre version de NodeBB est à jour des derniers patchs de sécurité et corrections de bugs.", + "keep-updated": "Assurez-vous que votre version de NodeBB est à jour pour les derniers patchs de sécurité et correctifs de bugs.", "up-to-date": "

Votre version est à jour

", - "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.

", + "upgrade-available": "

Une nouvelle version (v%1) a été publiée. Pensez à mettre à jour votre version de NodeBB.

", + "prerelease-upgrade-available": "

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.

", + "prerelease-warning": "

Ceci est une version préliminaire de NodeBB. Des bugs inattendus peuvent se produire.

", "notices": "Informations", "control-panel": "Contrôle du système", "reload": "Recharger", "restart": "Redémarrer", - "restart-warning": "Reloading or Restarting your NodeBB will drop all existing connections for a few seconds.", + "restart-warning": "Recharger ou redémarrer NodeBB coupera toutes les connexions existantes pendant quelques secondes.", "maintenance-mode": "Mode maintenance", "maintenance-mode-title": "Cliquez ici pour passer NodeBB en mode maintenance", - "realtime-chart-updates": "Realtime Chart Updates", + "realtime-chart-updates": "Mises à jour des graphiques en temps réel", - "active-users": "Active Users", - "active-users.users": "Users", - "active-users.guests": "Guests", + "active-users": "Utilisateurs actifs", + "active-users.users": "Utilisateurs", + "active-users.guests": "Invités", "active-users.total": "Total", "active-users.connections": "Connexions", @@ -42,7 +42,7 @@ "user-presence": "Présence des utilisateurs", "on-categories": "Sur la liste des catégories", "reading-posts": "Lit des messages", - "browsing-topics": "Parcours les sujets", + "browsing-topics": "Parcoure les sujets", "recent": "Récents", "unread": "Non lus", diff --git a/public/language/fr/admin/general/navigation.json b/public/language/fr/admin/general/navigation.json index 32f159c505..c6edbf2c3c 100644 --- a/public/language/fr/admin/general/navigation.json +++ b/public/language/fr/admin/general/navigation.json @@ -1,8 +1,8 @@ { - "icon": "Icone :", + "icon": "Icône :", "change-icon": "changer", "route": "Route :", - "tooltip": "Tooltip :", + "tooltip": "Info-bulle :", "text": "Texte :", "text-class": "Classe de texte : optionnel", "id": "ID : optionnel", diff --git a/public/language/fr/admin/general/sounds.json b/public/language/fr/admin/general/sounds.json index e4ce8d0309..8ec037f62b 100644 --- a/public/language/fr/admin/general/sounds.json +++ b/public/language/fr/admin/general/sounds.json @@ -1,6 +1,6 @@ { "notifications": "Notifications", - "chat-messages": "Messages de discussion", + "chat-messages": "Discussions", "play-sound": "Jouer", "incoming-message": "Message entrant", "outgoing-message": "Message sortant", diff --git a/public/language/fr/admin/manage/categories.json b/public/language/fr/admin/manage/categories.json index 7e2a5ce12e..e4454455f6 100644 --- a/public/language/fr/admin/manage/categories.json +++ b/public/language/fr/admin/manage/categories.json @@ -1,68 +1,68 @@ { - "settings": "Category Settings", - "privileges": "Privileges", + "settings": "Paramètres de la catégorie", + "privileges": "Privilèges", - "name": "Category Name", - "description": "Category Description", - "bg-color": "Background Colour", - "text-color": "Text Colour", - "bg-image-size": "Background Image Size", - "custom-class": "Custom Class", - "num-recent-replies": "# of Recent Replies", - "ext-link": "External Link", - "upload-image": "Upload Image", - "delete-image": "Remove", - "category-image": "Category Image", - "parent-category": "Parent Category", - "optional-parent-category": "(Optional) Parent Category", - "parent-category-none": "(None)", - "copy-settings": "Copy Settings From", - "optional-clone-settings": "(Optional) Clone Settings From Category", - "purge": "Purge Category", + "name": "Nom de la catégorie", + "description": "Description de la catégorie", + "bg-color": "Couleur d'arrière plan", + "text-color": "Couleur du texte", + "bg-image-size": "Taille de l'image d'arrière plan", + "custom-class": "Class personnalisée", + "num-recent-replies": "# de réponses récentes", + "ext-link": "Lien externe", + "upload-image": "Envoyer une image", + "delete-image": "Enlever", + "category-image": "Image de la catégorie", + "parent-category": "Catégorie parente", + "optional-parent-category": "Catégorie parente (optionnel)", + "parent-category-none": "(Aucun)", + "copy-settings": "Copier les paramètres de", + "optional-clone-settings": "Copier les paramètres de la catégorie (optionnel)", + "purge": "Vider la catégorie", - "enable": "Enable", - "disable": "Disable", - "edit": "Edit", + "enable": "Activer", + "disable": "Désactiver", + "edit": "Éditer", - "select-category": "Select Category", - "set-parent-category": "Set Parent Category", + "select-category": "Sélectionner une catégorie", + "set-parent-category": "Définissez une catégorie parente", "privileges.description": "You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or a per-group basis. You can add a new user to this table by searching for them in the form below.", - "privileges.warning": "Note: Privilege settings take effect immediately. It is not necessary to save the category after adjusting these settings.", - "privileges.section-viewing": "Viewing Privileges", + "privileges.warning": "Note: Les paramètres de privilège prennent effet instantanément . Il n'est pas nécessaire de sauvegarder la catégorie après avoir ajuster ces paramètres.", + "privileges.section-viewing": "Afficher les Privilèges", "privileges.section-posting": "Posting Privileges", - "privileges.section-moderation": "Moderation Privileges", - "privileges.section-user": "User", - "privileges.search-user": "Add User", - "privileges.no-users": "No user-specific privileges in this category.", - "privileges.section-group": "Group", - "privileges.group-private": "This group is private", - "privileges.search-group": "Add Group", - "privileges.copy-to-children": "Copy to Children", - "privileges.copy-from-category": "Copy from Category", - "privileges.inherit": "If the registered-users group is granted a specific privilege, all other groups receive an implicit privilege, even if they are not explicitly defined/checked. This implicit privilege is shown to you because all users are part of the registered-users user group, and so, privileges for additional groups need not be explicitly granted.", + "privileges.section-moderation": "Privilèges de modération", + "privileges.section-user": "Utilisateur", + "privileges.search-user": "Ajouter un utilisateur", + "privileges.no-users": "Aucun privilège spécifique aux utilisateurs dans cette catégorie.", + "privileges.section-group": "Groupe", + "privileges.group-private": "Ce groupe est privé", + "privileges.search-group": "Ajouter un groupe", + "privileges.copy-to-children": "Copier au enfants", + "privileges.copy-from-category": "Copier depuis une catégorie", + "privileges.inherit": "Si le groupe utilisateurs enregistrés bénéficie d'un privilège supplémentaire, tous les autres groupes recevront un privilège implicite, même s'ils ne sont pas explicitement définis. Ce privilège implicite vous est montré car tous les utilisateurs font partie du groupe utilisateurs enregistrés ainsi, les privilèges accordés aux autres groupes ne doivent pas nécessairement être explicitement accordés.", - "analytics.back": "Back to Categories List", + "analytics.back": "Revenir à la liste des catégories", "analytics.title": "Analytics for \"%1\" category", - "analytics.pageviews-hourly": "Figure 1 – Hourly page views for this category", - "analytics.pageviews-daily": "Figure 2 – Daily page views for this category", - "analytics.topics-daily": "Figure 3 – Daily topics created in this category", - "analytics.posts-daily": "Figure 4 – Daily posts made in this category", + "analytics.pageviews-hourly": "Figure 1 – Pages vues par heure pour cette catégorie", + "analytics.pageviews-daily": "Figure 2 – Pages vues par jour pour cette catégorie", + "analytics.topics-daily": "Figure 3 – Sujets créés par jour dans catégorie", + "analytics.posts-daily": "Figure 4 – Messages par jours postés dans cette catégorie", - "alert.created": "Created", - "alert.create-success": "Category successfully created!", - "alert.none-active": "You have no active categories.", - "alert.create": "Create a Category", - "alert.confirm-moderate": "Are you sure you wish to grant the moderation privilege to this user group? This group is public, and any users can join at will.", + "alert.created": "Crées", + "alert.create-success": "Catégorie créée avec succès !", + "alert.none-active": "Vous n'avez aucune catégorie active.", + "alert.create": "Créer une catégorie", + "alert.confirm-moderate": "Êtes-vous sûr de vouloir accorder à ce groupe les privilèges de modération ? Ce groupe est public, et n'importe qui peut s'y joindre.", "alert.confirm-purge": "

Do you really want to purge this category \"%1\"?

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

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

", - "alert.purge-success": "Category purged!", - "alert.copy-success": "Settings Copied!", - "alert.set-parent-category": "Set Parent Category", - "alert.updated": "Updated Categories", + "alert.purge-success": "Catégorie purgée !", + "alert.copy-success": "Paramètres copiés !", + "alert.set-parent-category": "Définir une catégorie parent", + "alert.updated": "Catégories mises à jour", "alert.updated-success": "Category IDs %1 successfully updated.", "alert.upload-image": "Upload category image", - "alert.find-user": "Find a User", - "alert.user-search": "Search for a user here...", - "alert.find-group": "Find a Group", - "alert.group-search": "Search for a group here..." + "alert.find-user": "Trouver un utilisateur", + "alert.user-search": "Chercher un utilisateur ici...", + "alert.find-group": "Trouver un groupe", + "alert.group-search": "Chercher un groupe ici..." } \ No newline at end of file diff --git a/public/language/fr/admin/manage/flags.json b/public/language/fr/admin/manage/flags.json index bfc488a409..ab8c5e51a6 100644 --- a/public/language/fr/admin/manage/flags.json +++ b/public/language/fr/admin/manage/flags.json @@ -1,19 +1,19 @@ { - "daily": "Daily flags", - "by-user": "Flags by user", - "by-user-search": "Search flagged posts by username", - "category": "Category", - "sort-by": "Sort By", - "sort-by.most-flags": "Most Flags", - "sort-by.most-recent": "Most Recent", - "search": "Search", - "dismiss-all": "Dismiss All", - "none-flagged": "No flagged posts!", - "posted-in": "Posted in %1", - "read-more": "Read More", - "flagged-x-times": "This post has been flagged %1 time(s):", - "dismiss": "Dismiss this Flag", - "delete-post": "Delete the Post", + "daily": "Signalements par jours", + "by-user": "Signalements par utilisateur", + "by-user-search": "Rechercher une sujet signalé par nom d'utilisateur", + "category": "Catégorie", + "sort-by": "Trier par", + "sort-by.most-flags": "Les plus signalés", + "sort-by.most-recent": "Les plus récents", + "search": "Rechercher", + "dismiss-all": "Tout rejeté", + "none-flagged": "Aucun sujet signalé !", + "posted-in": "Posté dans 1%", + "read-more": "Lire la suite", + "flagged-x-times": "Ce sujet a été signalé %1 fois :", + "dismiss": "Rejeté ce signalement", + "delete-post": "Supprimer le message", - "alerts.confirm-delete-post": "Do you really want to delete this post?" + "alerts.confirm-delete-post": "Voulez vous réellement supprimer ce message ?" } \ No newline at end of file diff --git a/public/language/fr/admin/manage/groups.json b/public/language/fr/admin/manage/groups.json index b5e526aacf..82c389292d 100644 --- a/public/language/fr/admin/manage/groups.json +++ b/public/language/fr/admin/manage/groups.json @@ -1,34 +1,34 @@ { - "name": "Group Name", - "description": "Group Description", - "system": "System Group", - "edit": "Edit", - "search-placeholder": "Search", - "create": "Create Group", - "description-placeholder": "A short description about your group", - "create-button": "Create", + "name": "Nom du groupe", + "description": "Description du groupe", + "system": "Groupe système", + "edit": "Éditer", + "search-placeholder": "Rechercher", + "create": "Créer un groupe", + "description-placeholder": "Une courte description de votre groupe", + "create-button": "Créer", - "alerts.create-failure": "Uh-Oh

There was a problem creating your group. Please try again later!

", - "alerts.confirm-delete": "Are you sure you wish to delete this group?", + "alerts.create-failure": "Oh-Oh

Une erreur s'est produite lors de la création de votre groupe. Veuillez réessayer ultérieurement !

", + "alerts.confirm-delete": "Êtes-vous sûr de vouloir supprimer ce groupe ?", - "edit.name": "Name", + "edit.name": "Nom", "edit.description": "Description", - "edit.user-title": "Title of Members", - "edit.icon": "Group Icon", - "edit.label-color": "Group Label Color", - "edit.show-badge": "Show Badge", - "edit.private-details": "If enabled, joining of groups requires approval from a group owner.", - "edit.private-override": "Warning: Private groups is disabled at system level, which overrides this option.", - "edit.disable-requests": "Disable join requests", - "edit.hidden": "Hidden", - "edit.hidden-details": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", - "edit.add-user": "Add User to Group", - "edit.add-user-search": "Search Users", - "edit.members": "Member List", - "control-panel": "Groups Control Panel", - "revert": "Revert", + "edit.user-title": "Titre des membres", + "edit.icon": "Icône du groupe", + "edit.label-color": "Couleur du groupe", + "edit.show-badge": "Afficher le badge", + "edit.private-details": "Si activé, rejoindre les groupes nécessitera l'approbation de l'un de leurs propriétaires.", + "edit.private-override": "Attention : Les groupes privés sont désactivés au niveau du système, ce qui annule cette option.", + "edit.disable-requests": "Désactiver les demandes d'adhésion", + "edit.hidden": "Masqué", + "edit.hidden-details": "Si activé, ce groupe sera masqué de la liste des groupes et les utilisateurs devront être invités manuellement.", + "edit.add-user": "Ajouter l'utilisateur au groupe", + "edit.add-user-search": "Rechercher des utilisateurs", + "edit.members": "Liste des membres", + "control-panel": "Panneau de contrôle des groupes", + "revert": "Retour", - "edit.no-users-found": "No Users Found", - "edit.confirm-remove-user": "Are you sure you want to remove this user?", - "edit.save-success": "Changes saved!" + "edit.no-users-found": "Aucun utilisateurs trouvé", + "edit.confirm-remove-user": "Êtes-vous sûr de vouloir retirer cet utilisateur ?", + "edit.save-success": "Changements sauvegardés !" } \ No newline at end of file diff --git a/public/language/fr/admin/manage/ip-blacklist.json b/public/language/fr/admin/manage/ip-blacklist.json index 5106434351..10c9742e35 100644 --- a/public/language/fr/admin/manage/ip-blacklist.json +++ b/public/language/fr/admin/manage/ip-blacklist.json @@ -1,15 +1,15 @@ { - "lead": "Configure your IP blacklist here.", + "lead": "Configurez votre liste noire d'adresses IP ici.", "description": "Occasionally, a user account ban is not enough of a deterrant. Other times, restricting access to the forum to a specific IP or a range of IPs is the best way to protect a forum. In these scenarios, you can add troublesome IP addresses or entire CIDR blocks to this blacklist, and they will be prevented from logging in to or registering a new account.", - "active-rules": "Active Rules", - "validate": "Validate Blacklist", - "apply": "Apply Blacklist", + "active-rules": "Règles actives", + "validate": "Valider la liste noire", + "apply": "Appliquer la liste noire", "hints": "Syntax Hints", "hint-1": "Define a single IP addresses per line. You can add IP blocks as long as they follow the CIDR format (e.g. 192.168.100.0/22).", - "hint-2": "You can add in comments by starting lines with the # symbol.", + "hint-2": "Vous pouvez ajouter en commentaire en commençant la ligne pas le symbole #.", "validate.x-valid": "%1 out of %2 rule(s) valid.", "validate.x-invalid": "The following %1 rules are invalid:", - "alerts.applied-success": "Blacklist Applied" + "alerts.applied-success": "Liste noire appliquée" } \ No newline at end of file diff --git a/public/language/fr/admin/manage/registration.json b/public/language/fr/admin/manage/registration.json index f51b4d56e6..3548f7cb11 100644 --- a/public/language/fr/admin/manage/registration.json +++ b/public/language/fr/admin/manage/registration.json @@ -1,11 +1,11 @@ { - "queue": "Queue", - "description": "There are no users in the registration queue.
To enable this feature, go to Settings → User → User Registration and set Registration Type to \"Admin Approval\".", + "queue": "File d'attente", + "description": "Il n'y a aucun utilisateur dans la file d'inscription.
Pour activer cette fonctionnalité, allez dans Paramètres → Utilisateurs → inscription des utilisateurs et définissez Type d'inscription en \"Approbation par l'administrateur\".", - "list.name": "Name", - "list.email": "Email", + "list.name": "Nom", + "list.email": "E-mail", "list.ip": "IP", - "list.time": "Time", + "list.time": "Date", "list.username-spam": "Frequency: %1 Appears: %2 Confidence: %3", "list.email-spam": "Frequency: %1 Appears: %2", "list.ip-spam": "Frequency: %1 Appears: %2", @@ -16,5 +16,5 @@ "invitations.invitee-email": "Invitee Email", "invitations.invitee-username": "Invitee Username (if registered)", - "invitations.confirm-delete": "Are you sure you wish to delete this invitation?" + "invitations.confirm-delete": "Êtes-vous sûr de vouloir supprimer l'invitation ?" } \ No newline at end of file diff --git a/public/language/fr/admin/manage/tags.json b/public/language/fr/admin/manage/tags.json index db40e9f098..a057d63b05 100644 --- a/public/language/fr/admin/manage/tags.json +++ b/public/language/fr/admin/manage/tags.json @@ -1,18 +1,18 @@ { - "none": "Your forum does not have any topics with tags yet.", - "bg-color": "Background Colour", - "text-color": "Text Colour", - "create-modify": "Create & Modify Tags", - "description": "Select tags via clicking and/or dragging, use shift to select multiple.", - "create": "Create Tag", - "modify": "Modify Tags", - "delete": "Delete Selected Tags", - "search": "Search for tags...", - "settings": "Click here to visit the tag settings page.", - "name": "Tag Name", + "none": "Votre forum n'a pour l'instant aucun sujet avec mot-clés.", + "bg-color": "Couleur d'arrière plan", + "text-color": "Couleur du texte", + "create-modify": "Créer et modifier les mots-clés", + "description": "Sélectionnez les mot-clés par clic ou glisser-déposer, maintenez shift pour en sélectionner plusieurs.", + "create": "Créer le mot-clés", + "modify": "Modifier le mot-clés", + "delete": "Supprimer les mots-clés sélectionnés", + "search": "Chercher des mots-clés...", + "settings": "Cliquez ici pour visiter la page de paramètres des mots clés.", + "name": "Nom du mot-clés", - "alerts.editing-multiple": "Editing multiple tags", - "alerts.editing-x": "Editing \"%1\" tag", - "alerts.confirm-delete": "Do you want to delete the selected tags?", - "alerts.update-success": "Tag Updated!" + "alerts.editing-multiple": "Éditer plusieurs mots-clés", + "alerts.editing-x": "Éditer le mot-clés %1", + "alerts.confirm-delete": "Vous-voulez réellement supprimer les mots-clés sélectionnés ?", + "alerts.update-success": "Mot-clés mis à jour !" } \ No newline at end of file diff --git a/public/language/fr/admin/manage/users.json b/public/language/fr/admin/manage/users.json index f1651a814b..93e2de0140 100644 --- a/public/language/fr/admin/manage/users.json +++ b/public/language/fr/admin/manage/users.json @@ -1,91 +1,91 @@ { - "users": "Users", - "edit": "Edit", - "make-admin": "Make Admin", - "remove-admin": "Remove Admin", - "validate-email": "Validate Email", - "send-validation-email": "Send Validation Email", - "password-reset-email": "Send Password Reset Email", - "ban": "Ban User(s)", - "temp-ban": "Ban User(s) Temporarily", - "unban": "Unban User(s)", - "reset-lockout": "Reset Lockout", - "reset-flags": "Reset Flags", - "delete": "Delete User(s)", - "purge": "Delete User(s) and Content", - "download-csv": "Download CSV", - "invite": "Invite", - "new": "New User", + "users": "Utilisateurs", + "edit": "Éditer ", + "make-admin": "Promouvoir Admin", + "remove-admin": "Retirer des Admins", + "validate-email": "Vérifier l'adresse e-mail", + "send-validation-email": "Envoyer un e-mail de vérification", + "password-reset-email": "Envoyer un e-mail de réinitialisation du mot de passe", + "ban": "Bannir les utilisateurs", + "temp-ban": "Bannir temporairement les utilisateurs", + "unban": "Dé-bannir les utilisateurs", + "reset-lockout": "Supprimer le blocage", + "reset-flags": "Supprimer les signalements", + "delete": "Supprimer les utilisateurs", + "purge": "Supprimer les utilisateurs ainsi que leurs contenus", + "download-csv": "Télécharger au format CSV", + "invite": "Inviter", + "new": "Nouvel utilisateur", - "pills.latest": "Latest Users", - "pills.unvalidated": "Not Validated", - "pills.no-posts": "No Posts", - "pills.top-posters": "Top Posters", - "pills.top-rep": "Most Reputation", - "pills.inactive": "Inactive", - "pills.flagged": "Most Flagged", - "pills.banned": "Banned", - "pills.search": "User Search", + "pills.latest": "Derniers utilisateurs", + "pills.unvalidated": "Non vérifiée", + "pills.no-posts": "Aucun sujet", + "pills.top-posters": "Nombre de sujets", + "pills.top-rep": "Réputation", + "pills.inactive": "Inactif ", + "pills.flagged": "Le plus signalé", + "pills.banned": "Banni", + "pills.search": "Recherche d'utilisateur", - "search.username": "By User Name", - "search.username-placeholder": "Enter a username to search", - "search.email": "By Email", - "search.email-placeholder": "Enter a email to search", - "search.ip": "By IP Address", - "search.ip-placeholder": "Enter an IP Address to search", - "search.not-found": "User not found!", + "search.username": "Par nom d'utilisateur", + "search.username-placeholder": "Entrer un nom d'utilisateur à rechercher", + "search.email": "Par adresse e-mail", + "search.email-placeholder": "Entrez une adresse e-mail à rechercher", + "search.ip": "Par adresse IP", + "search.ip-placeholder": "Entrez une adresse IP à rechercher", + "search.not-found": "Utilisateur introuvable !", - "inactive.3-months": "3 months", - "inactive.6-months": "6 months", - "inactive.12-months": "12 months", + "inactive.3-months": "3 mois", + "inactive.6-months": "6 mois", + "inactive.12-months": "12 mois", "users.uid": "uid", - "users.username": "username", - "users.email": "email", - "users.postcount": "postcount", - "users.reputation": "reputation", - "users.flags": "flags", - "users.joined": "joined", - "users.last-online": "last online", - "users.banned": "banned", + "users.username": "nom d'utilisateur", + "users.email": "e-mail", + "users.postcount": "nombre de sujets", + "users.reputation": "réputation", + "users.flags": "signalements", + "users.joined": "inscription", + "users.last-online": "dernière connexion", + "users.banned": "banni", - "create.username": "User Name", - "create.email": "Email", - "create.email-placeholder": "Email of this user", - "create.password": "Password", - "create.password-confirm": "Confirm Password", + "create.username": "Nom d'utilisateur", + "create.email": "E-mail", + "create.email-placeholder": "Adresse e-mail de l'utilisateur", + "create.password": "Mot de passe", + "create.password-confirm": "Confirmer le mot de passe", - "temp-ban.length": "Ban Length", - "temp-ban.reason": "Reason (Optional)", - "temp-ban.hours": "Hours", - "temp-ban.days": "Days", - "temp-ban.explanation": "Enter the length of time for the ban. Note that a time of 0 will be a considered a permanent ban.", + "temp-ban.length": "Durée du bannissement", + "temp-ban.reason": "Raison (Optionel)", + "temp-ban.hours": "Heures", + "temp-ban.days": "Jours", + "temp-ban.explanation": "Entrez la durée du bannissement. Notez qu'une durée de 0 sera considérée comme un bannissement définitif.", - "alerts.confirm-ban": "Do you really want to ban this user permanently?", - "alerts.confirm-ban-multi": "Do you really want to ban these users permanently?", - "alerts.ban-success": "User(s) banned!", - "alerts.button-ban-x": "Ban %1 user(s)", - "alerts.unban-success": "User(s) unbanned!", - "alerts.lockout-reset-success": "Lockout(s) reset!", - "alerts.flag-reset-success": "Flags(s) reset!", - "alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!", - "alerts.make-admin-success": "User(s) are now administrators.", - "alerts.confirm-remove-admin": "Do you really want to remove admins?", - "alerts.remove-admin-success": "User(s) are no longer administrators.", - "alerts.confirm-validate-email": "Do you want to validate email(s) of these user(s)?", - "alerts.validate-email-success": "Emails validated", - "alerts.password-reset-confirm": "Do you want to send password reset email(s) to these user(s)?", - "alerts.confirm-delete": "Warning!
Do you really want to delete user(s)?
This action is not reversable! Only the user account will be deleted, their posts and topics will remain.", - "alerts.delete-success": "User(s) Deleted!", - "alerts.confirm-purge": "Warning!
Do you really want to delete user(s) and their content?
This action is not reversable! All user data and content will be erased!", - "alerts.create": "Create User", - "alerts.button-create": "Create", - "alerts.button-cancel": "Cancel", - "alerts.error-passwords-different": "Passwords must match!", - "alerts.error-x": "Error

%1

", - "alerts.create-success": "User created!", + "alerts.confirm-ban": "Voulez-vous réellement bannir définitivement cet utilisateur ?", + "alerts.confirm-ban-multi": "Voulez-vous réellement bannir définitivement ces utilisateurs ?", + "alerts.ban-success": "Utilisateur(s) banni(s)", + "alerts.button-ban-x": "Bannir %1 utilisateur(s)", + "alerts.unban-success": "Utilisateur(s) dé-banni(s) !", + "alerts.lockout-reset-success": "Blocage supprimé", + "alerts.flag-reset-success": "Signalement(s) réinitialisé(s) !", + "alerts.no-remove-yourself-admin": "Vous ne pouvez pas vous retirer vous-même des administrateurs !", + "alerts.make-admin-success": "Les utilisateurs sont désormais administrateurs.", + "alerts.confirm-remove-admin": "Voulez-vous réelement retirer ces admins ?", + "alerts.remove-admin-success": "Les utilisateurs ne sont plus administrateurs.", + "alerts.confirm-validate-email": "Voulez-vous réellement vérifier les adresses e-mail de ces utilisateurs ?", + "alerts.validate-email-success": "Adresse e-mail vérifiée", + "alerts.password-reset-confirm": "Voulez-vous réellement envoyer un e-mail de réinitialisation de mot de passe à ces utilisateurs ?", + "alerts.confirm-delete": "Attention !
Voulez-vous réellement supprimer ces utilisateurs ?
Cette action est irréversible ! Seuls les comptes des= ce utilisateurs seront supprimés, leurs sujets et messages resteront. ", + "alerts.delete-success": "Utilisateur(s) supprimé(s) !", + "alerts.confirm-purge": "Attention !
Voulez-vous réellement supprimer ces utilisateurs ainsi que leurs contenus ?
Cette action est irréversible ! Toutes les données de ces utilisateurs seront effacées !", + "alerts.create": "Créer un utilisateur", + "alerts.button-create": "Créer", + "alerts.button-cancel": "Annuler", + "alerts.error-passwords-different": "Les mots de passe doivent correspondre !", + "alerts.error-x": "Erreur

%1

", + "alerts.create-success": "Utilisateur créé !", - "alerts.prompt-email": "Email: ", - "alerts.email-sent-to": "An invitation email has been sent to %1", - "alerts.x-users-found": "%1 user(s) found! Search took %2 ms." + "alerts.prompt-email": "E-mail :", + "alerts.email-sent-to": "Un e-mail d'invitation a été envoyé à %1", + "alerts.x-users-found": "%1 utilisateur(s) trouvé(s) ! La recherche a pris %2 ms." } \ No newline at end of file diff --git a/public/language/fr/admin/menu.json b/public/language/fr/admin/menu.json index 21557f0786..c4fa00ba0c 100644 --- a/public/language/fr/admin/menu.json +++ b/public/language/fr/admin/menu.json @@ -30,7 +30,7 @@ "settings/tags": "Mots-clés", "settings/notifications": "Notifications", "settings/cookies": "Cookies", - "settings/web-crawler": "Navigateur web", + "settings/web-crawler": "Robot d'indexation Web", "settings/sockets": "Sockets", "settings/advanced": "Avancé", @@ -39,14 +39,14 @@ "section-appearance": "Apparence", "appearance/themes": "Thèmes", "appearance/skins": "Skins", - "appearance/customise": "Custom HTML & CSS", + "appearance/customise": "HTML et CSS personnalisés", "section-extend": "Extensions", "extend/plugins": "Plugins", "extend/widgets": "Widgets", "extend/rewards": "Récompenses", - "section-social-auth": "Authentification sociale", + "section-social-auth": "Authentification via les réseaux sociaux", "section-plugins": "Plugins", "extend/plugins.install": "Installer des plugins", @@ -71,5 +71,5 @@ "search.keep-typing": "Continuez de taper pour afficher les résultats…", "search.start-typing": "Commencez à taper pour afficher les résultats…", - "connection-lost": "La connexion à %1 a été perdue, tentative de déconnexion en cours…" + "connection-lost": "La connexion à %1 a été perdue, tentative de reconnexion…" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/advanced.json b/public/language/fr/admin/settings/advanced.json index b023528d04..700cd158a3 100644 --- a/public/language/fr/admin/settings/advanced.json +++ b/public/language/fr/admin/settings/advanced.json @@ -1,19 +1,19 @@ { - "maintenance-mode": "Maintenance Mode", - "maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.", - "maintenance-mode.message": "Maintenance Message", - "headers": "Headers", - "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame", - "headers.powered-by": "Customise the \"Powered By\" header sent by NodeBB", + "maintenance-mode": "Mode maintenance", + "maintenance-mode.help": "Quand le forum est en mode maintenance, toutes les requêtes sont redirigées vers une page de garde statique. Les administrateurs sont exemptés de cette redirection et peuvent accéder normalement au site. ", + "maintenance-mode.message": "Message de maintenance", + "headers": "En-têtes", + "headers.allow-from": "Définissez ALLOW-FROM pour afficher NodeBB dans un iFrame", + "headers.powered-by": "Personnaliser l'en-tête \"Propulsé par\" envoyé par NodeBB", "headers.acao": "Access-Control-Allow-Origin", - "headers.acao-help": "To deny access to all sites, leave empty or set to null", + "headers.acao-help": "Pour interdire l'accès à tous les sites, laisser vide ou définissez comme null", "headers.acam": "Access-Control-Allow-Methods", "headers.acah": "Access-Control-Allow-Headers", - "traffic-management": "Traffic Management", + "traffic-management": "Gestion du trafic", "traffic.help": "NodeBB deploys equipped with a module that automatically denies requests in high-traffic situations. You can tune these settings here, although the defaults are a good starting point.", - "traffic.enable": "Enable Traffic Management", + "traffic.enable": "Activé la gestion du trafic", "traffic.event-lag": "Event Loop Lag Threshold (in milliseconds)", "traffic.event-lag-help": "Lowering this value decreases wait times for page loads, but will also show the \"excessive load\" message to more users. (Restart required)", - "traffic.lag-check-interval": "Check Interval (in milliseconds)", + "traffic.lag-check-interval": "Vérifier l’intervalle (en millisecondes)", "traffic.lag-check-interval-help": "Lowering this value causes NodeBB to become more sensitive to spikes in load, but may also cause the check to become too sensitive. (Restart required)" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/chat.json b/public/language/fr/admin/settings/chat.json index 933626f109..9ef89fb3ba 100644 --- a/public/language/fr/admin/settings/chat.json +++ b/public/language/fr/admin/settings/chat.json @@ -1,9 +1,9 @@ { - "chat-settings": "Réglages des discussion", - "disable": "Désactiver les discussion", - "disable-editing": "Désactiver l'édition/suppression des messages de discussion", - "disable-editing-help": "Les administrateurs et modérateurs globaux sont exempts de cette restriction", - "max-length": "Longueur maximales des messages dans les discussions", - "max-room-size": "Nombre maximum d'utilisateurs dans les salles de discussion", - "delay": "Temps entre chaque message en millisecondes" + "chat-settings": "Paramètres des discussions", + "disable": "Désactiver les discussions", + "disable-editing": "Désactiver l'édition/la suppression des messages des discussions", + "disable-editing-help": "Les administrateurs et modérateurs globaux sont dispensés de cette restriction", + "max-length": "Longueur maximales des messages de discussion", + "max-room-size": "Nombre maximum d'utilisateurs dans une même discussion", + "delay": "Temps entre chaque message de discussion (en millisecondes)" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/cookies.json b/public/language/fr/admin/settings/cookies.json index e9f423f3e2..524f25e8ee 100644 --- a/public/language/fr/admin/settings/cookies.json +++ b/public/language/fr/admin/settings/cookies.json @@ -1,9 +1,9 @@ { - "eu-consent": "Accord EU", + "eu-consent": "Consentement de l'Union européenne", "consent.enabled": "Activé", "consent.message": "Message de notification", "consent.acceptance": "Message d'acceptation", - "consent.link-text": "Texte du lien vers la politique", + "consent.link-text": "Texte du lien vers la politique de confidentialité", "consent.blank-localised-default": "Laisser vide pour utiliser les textes localisés par défaut de NodeBB", "settings": "Réglages", "cookie-domain": "Domaine de session du cookie", diff --git a/public/language/fr/admin/settings/email.json b/public/language/fr/admin/settings/email.json index 1e92c88490..21de940251 100644 --- a/public/language/fr/admin/settings/email.json +++ b/public/language/fr/admin/settings/email.json @@ -1,25 +1,25 @@ { - "email-settings": "Email Settings", - "address": "Email Address", - "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", - "from": "From Name", - "from-help": "The from name to display in the email.", - "gmail-routing": "Gmail Routing", + "email-settings": "Paramètres E-mail", + "address": "Adresse e-mail", + "address-help": "L'adresse e-mail suivante fait référence à l'adresse que le destinataire verra dans les champs \"De :\" et \"Répondre à :\". ", + "from": "Nom de l’expéditeur", + "from-help": "Le nom de l’expéditeur à afficher dans l'e-mail", + "gmail-routing": "Routing Gmail", "gmail-routing-help1": "There have been reports of Gmail Routing not working on accounts with heightened security. In those scenarios, you will have to configure your GMail account to allow less secure apps.", "gmail-routing-help2": "For more information about this workaround, please consult this NodeMailer article on the issue. An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. Browse available plugins here.", - "gmail-transport": "Route emails through a Gmail/Google Apps account", - "gmail-transport.username": "Username", - "gmail-transport.username-help": "Enter the full email address here, especially if you are using a Google Apps managed domain.", - "gmail-transport.password": "Password", - "template": "Edit Email Template", - "template.select": "Select Email Template", - "template.revert": "Revert to Original", - "testing": "Email Testing", - "testing.select": "Select Email Template", - "testing.send": "Send Test Email", - "testing.send-help": "The test email will be sent to the currently logged in user's email address.", - "subscriptions": "Email Subscriptions", - "subscriptions.disable": "Disable subscriber notification emails", + "gmail-transport": "Router les e-mails via un compte Gmail/Google Apps", + "gmail-transport.username": "Nom d'utilisateur", + "gmail-transport.username-help": "Entrer l'adresse e-mail complète ici, surtout si vous utilisez un domaine géré par Google Aps.", + "gmail-transport.password": "Mot de passe", + "template": "Modifier le modèle d'e-mail", + "template.select": "Sélectionner un modèle d'e-mail ", + "template.revert": "Retourner à l'original", + "testing": "Test d'e-mail", + "testing.select": "Sélectionner un modèle d'e-mail ", + "testing.send": "Envoyer un e-mail de test", + "testing.send-help": "Le test d'e-mail sera envoyé à l'adresse e-mail de l'utilisateur actuellement connecté.", + "subscriptions": "Abonnements d'e-mail", + "subscriptions.disable": "Désactiver les e-mails de notification des abonnés", "subscriptions.hour": "Digest Hour", "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " } \ No newline at end of file diff --git a/public/language/fr/admin/settings/general.json b/public/language/fr/admin/settings/general.json index 72c86ba577..b82c95113e 100644 --- a/public/language/fr/admin/settings/general.json +++ b/public/language/fr/admin/settings/general.json @@ -3,10 +3,10 @@ "title": "Titre du site", "title.name": "Nom de votre communauté", "title.show-in-header": "Afficher le titre du site dans l'en-tête", - "browser-title": "Titre du navigateur", - "browser-title-help": "Si aucun titre n'est spécifié, le titre du site sera utilisé", + "browser-title": "Titre dans le navigateur", + "browser-title-help": "Si aucun titre dans le navigateur n'est spécifié, le titre du site sera utilisé", "title-layout": "Disposition du titre", - "title-layout-help": "Définissez la façon dont le titre du navigateur est structuré ex: { pageTitle} | {browserTitle}", + "title-layout-help": "Définissez la manière dont le titre est structuré dans le navigateur ex: { pageTitle} | {browserTitle}", "description.placeholder": "Une courte description de votre communauté", "description": "Description du site", "keywords": "Mots-clés du site", @@ -14,17 +14,17 @@ "logo": "Logo du site", "logo.image": "Image", "logo.image-placeholder": "Chemin vers un logo à afficher dans l'en-tête du site", - "logo.upload": "Envoyer", + "logo.upload": "Télécharger", "logo.url": "URL", "logo.url-placeholder": "L'URL du logo du site", - "logo.url-help": "Quand on clique sur le logo, envoyer les utilisateurs vers cette adresse. Si ce champ est vide, l'utilisateur sera envoyé à l'index du forum.", - "logo.alt-text": "Texte alternatif", + "logo.url-help": "Quand ils cliquent sur le logo, envoyer les utilisateurs vers cette adresse. Si ce champ est vide, l'utilisateur sera envoyé à l'index du forum.", + "logo.alt-text": "Texte alternatif (alt)", "log.alt-text-placeholder": "Texte alternatif pour l'accessibilité", "favicon": "Favicon", - "favicon.upload": "Envoyer", - "touch-icon": "Icône d'écran d'accueil", - "touch-icon.upload": "Envoyer", - "touch-icon.help": "La taille et le format recommandés sont : 192x192, format PNG uniquement. Si aucune icône n'est spécifiée, NodeBB utilisera la favicon.", + "favicon.upload": "Télécharger", + "touch-icon": "Icône touch et d'écran d'accueil", + "touch-icon.upload": "Télécharger", + "touch-icon.help": "Taille et format recommandés : 192x192, format PNG uniquement. Si aucune icône n'est spécifiée, NodeBB utilisera le favicon.", "outgoing-links": "Liens sortants", "outgoing-links.warning-page": "Utiliser la page d'avertissement pour liens sortants" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/group.json b/public/language/fr/admin/settings/group.json index 1ae88c9cf5..03a7f86952 100644 --- a/public/language/fr/admin/settings/group.json +++ b/public/language/fr/admin/settings/group.json @@ -1,12 +1,12 @@ { - "general": "General", - "private-groups": "Private Groups", - "private-groups.help": "If enabled, joining of groups requires the approval of the group owner (Default: enabled)", - "private-groups.warning": "Beware! If this option is disabled and you have private groups, they automatically become public.", - "allow-creation": "Allow Group Creation", - "allow-creation-help": "If enabled, users can create groups (Default: disabled)", - "max-name-length": "Maximum Group Name Length", - "cover-image": "Group Cover Image", - "default-cover": "Default Cover Images", - "default-cover-help": "Add comma-separated default cover images for groups that don't have an uploaded cover image" + "general": "Général", + "private-groups": "Groupes privés", + "private-groups.help": "Si cette case est cochée, rejoindre un groupe nécessitera l'accord d'un propriétaire du groupe (Par défaut : activé)", + "private-groups.warning": "Attention ! Si cette option est désactivée et que vous avez des groupes privés, ils deviendront automatiquement publics.", + "allow-creation": "Autoriser la création de groupes", + "allow-creation-help": "Si activé, les utilisateurs peuvent créer des groupes (Par défaut : Désactivé)", + "max-name-length": "Longueur maximum des noms de groupes", + "cover-image": "Image de couverture du groupe", + "default-cover": "Images de couverture par défaut", + "default-cover-help": "Ajouter des images de couvertures par défaut séparées par des virgules pour les groupes n'ayant pas téléchargé d'image de couverture" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/guest.json b/public/language/fr/admin/settings/guest.json index 6b2ac2c8b2..083b57f173 100644 --- a/public/language/fr/admin/settings/guest.json +++ b/public/language/fr/admin/settings/guest.json @@ -2,7 +2,7 @@ "handles": "Guest Handles", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "privileges": "Guest Privileges", - "privileges.can-search": "Allow guests to search without logging in", - "privileges.can-search-users": "Allow guests to search users without logging in" + "privileges": "Privilèges invités", + "privileges.can-search": "Autoriser les invités à faire des recherches sans se connecter.", + "privileges.can-search-users": "Autoriser les invités à rechercher un utilisateur sans se connecter." } \ No newline at end of file diff --git a/public/language/fr/admin/settings/notifications.json b/public/language/fr/admin/settings/notifications.json index 4eff7f341a..8363491294 100644 --- a/public/language/fr/admin/settings/notifications.json +++ b/public/language/fr/admin/settings/notifications.json @@ -1,5 +1,5 @@ { "notifications": "Notifications", - "welcome-notification": "Welcome Notification", - "welcome-notification-link": "Welcome Notification Link" + "welcome-notification": "Notification de bienvenue", + "welcome-notification-link": "Lien de notification de bienvenue" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/pagination.json b/public/language/fr/admin/settings/pagination.json index 27d71b4de5..c84f40fadc 100644 --- a/public/language/fr/admin/settings/pagination.json +++ b/public/language/fr/admin/settings/pagination.json @@ -1,9 +1,9 @@ { - "pagination": "Pagination Settings", - "enable": "Paginate topics and posts instead of using infinite scroll.", - "topics": "Topic Pagination", - "posts-per-page": "Posts per Page", - "categories": "Category Pagination", - "topics-per-page": "Topics per Page", - "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" + "pagination": "Paramètres de pagination", + "enable": "Utiliser la pagination des sujets et messages au lieu du défilement infini", + "topics": "Pagination des sujets", + "posts-per-page": "Messages par page", + "categories": "Pagination des categories", + "topics-per-page": "Sujets par page", + "initial-num-load": "Nombre initial de sujets à charger dans Non lus, Récents et Populaires" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/post.json b/public/language/fr/admin/settings/post.json index f293e554d9..071f020427 100644 --- a/public/language/fr/admin/settings/post.json +++ b/public/language/fr/admin/settings/post.json @@ -1,44 +1,44 @@ { - "sorting": "Post Sorting", - "sorting.post-default": "Default Post Sorting", - "sorting.oldest-to-newest": "Oldest to Newest", - "sorting.newest-to-oldest": "Newest to Oldest", - "sorting.most-votes": "Most Votes", - "sorting.topic-default": "Default Topic Sorting", - "restrictions": "Posting Restrictions", - "restrictions.seconds-between": "Seconds between Posts", - "restrictions.seconds-between-new": "Seconds between Posts for New Users", - "restrictions.rep-threshold": "Reputation threshold before this restriction is lifted", - "restrictions.seconds-defore-new": "Seconds before new user can post", - "restrictions.seconds-edit-after": "Number of seconds users are allowed to edit posts after posting. (0 disabled)", - "restrictions.seconds-delete-after": "Number of seconds users are allowed to delete posts after posting. (0 disabled)", - "restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics. (0 disabled)", - "restrictions.min-title-length": "Minimum Title Length", - "restrictions.max-title-length": "Maximum Title Length", - "restrictions.min-post-length": "Minimum Post Length", - "restrictions.max-post-length": "Maximum Post Length", - "restrictions.days-until-stale": "Days until Topic is considered stale", - "restrictions.stale-help": "If a topic is considered \"stale\", then a warning will be shown to users who attempt to reply to that topic.", - "timestamp": "Timestamp", + "sorting": "Tri des messages", + "sorting.post-default": "Tri des messages par défaut", + "sorting.oldest-to-newest": "Du plus ancien au plus récent", + "sorting.newest-to-oldest": "Du plus récent au plus ancien", + "sorting.most-votes": "Avec le plus de votes", + "sorting.topic-default": "Tri des sujets par défaut", + "restrictions": "Restrictions d'envoi", + "restrictions.seconds-between": "Nombre de secondes entre chaque message", + "restrictions.seconds-between-new": "Nombre de secondes entre chaque message pour les nouveaux utilisateurs", + "restrictions.rep-threshold": "Seuil de réputation avant que cette restriction soit levée", + "restrictions.seconds-defore-new": "Nombre de secondes avant qu'un nouvel utilisateur puisse poster", + "restrictions.seconds-edit-after": "Nombre de secondes pendant lesquelles les utilisateurs sont autorisés à modifier leurs messages après envoi (0 si infini)", + "restrictions.seconds-delete-after": "Nombre de secondes pendant lesquelles les utilisateurs sont autorisés à supprimer leurs messages après envoi (0 si infini)", + "restrictions.replies-no-delete": "Nombre de réponses après lesquelles les utilisateurs ne peuvent plus supprimer leurs sujets (0 si infini)", + "restrictions.min-title-length": "Longueur minimum du titre", + "restrictions.max-title-length": "Longueur maximum du titre", + "restrictions.min-post-length": "Longueur minimum des messages", + "restrictions.max-post-length": "Longueur maximum des messages", + "restrictions.days-until-stale": "Nombre de jours avant qu'un sujet soit considéré comme périmé", + "restrictions.stale-help": "Si un sujet est considéré comme \"périmé\", un message sera affiché aux utilisateurs tentant de répondre au sujet", + "timestamp": "Horodatage", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", "teaser": "Teaser Post", - "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", - "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", - "teaser.first": "First", - "unread": "Unread Settings", + "teaser.last-post": "Dernier – Affiche le dernier message, ou celui d'origine, si il n'y a pas de réponse", + "teaser.last-reply": "Dernier – Affiche le dernier message, ou \"Aucune réponse\" si il n'y a pas de réponse", + "teaser.first": "Premier", + "unread": "Paramètres des messages non lus", "unread.cutoff": "Unread cutoff days", "unread.min-track-last": "Minimum posts in topic before tracking last read", - "signature": "Signature Settings", - "signature.disable": "Disable signatures", - "signature.no-links": "Disable links in signatures", - "signature.no-images": "Disable images in signatures", - "signature.max-length": "Maximum Signature Length", + "signature": "Paramètres de signature", + "signature.disable": "Désactiver les signatures", + "signature.no-links": "Désactiver les liens en signature", + "signature.no-images": "Désactiver les images en signature ", + "signature.max-length": "Longueur maximum des signatures", "composer": "Composer Settings", "composer-help": "The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.", - "composer.show-help": "Show \"Help\" tab", - "composer.enable-plugin-help": "Allow plugins to add content to the help tab", - "composer.custom-help": "Custom Help Text", - "ip-tracking": "IP Tracking", - "ip-tracking.each-post": "Track IP Address for each post" + "composer.show-help": "Afficher l'onglet \"Aide\"", + "composer.enable-plugin-help": "Autoriser les plugins à modifier l'onglet d'aide", + "composer.custom-help": "Message d'aide personnalisé", + "ip-tracking": "Suivi d'IP", + "ip-tracking.each-post": "Suivre l'adresse IP pour chaque message" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/reputation.json b/public/language/fr/admin/settings/reputation.json index 11d6184721..5ce639904b 100644 --- a/public/language/fr/admin/settings/reputation.json +++ b/public/language/fr/admin/settings/reputation.json @@ -1,8 +1,8 @@ { - "reputation": "Reputation Settings", - "disable": "Disable Reputation System", - "disable-down-voting": "Disable Down Voting", - "thresholds": "Activity Thresholds", - "min-rep-downvote": "Minimum reputation to downvote posts", - "min-rep-flag": "Minimum reputation to flag posts" + "reputation": "Paramètre de réputation", + "disable": "Désactiver le système de réputation", + "disable-down-voting": "Désactiver les votes négatifs", + "thresholds": "Seuils d'activité", + "min-rep-downvote": "Réputation minimum pour les votes négatifs", + "min-rep-flag": "Réputation minimum pour signaler un message" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/sockets.json b/public/language/fr/admin/settings/sockets.json index d4c7ca4e76..99821f7cf2 100644 --- a/public/language/fr/admin/settings/sockets.json +++ b/public/language/fr/admin/settings/sockets.json @@ -1,6 +1,6 @@ { "reconnection": "Réglages de reconnexion", - "max-attempts": "Nombre maximal de tentatives de reconnexion", + "max-attempts": "Nombre maximum de tentatives de reconnexion", "default-placeholder": "Défaut : %1", "delay": "Délai de reconnexion" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/tags.json b/public/language/fr/admin/settings/tags.json index 6f31f60ba0..25d1c01e1d 100644 --- a/public/language/fr/admin/settings/tags.json +++ b/public/language/fr/admin/settings/tags.json @@ -1,12 +1,12 @@ { - "tag": "Tag Settings", - "min-per-topic": "Minimum Tags per Topic", - "max-per-topic": "Maximum Tags per Topic", - "min-length": "Minimum Tag Length", - "max-length": "Maximum Tag Length", - "goto-manage": "Click here to visit the tag management page.", - "privacy": "Privacy", - "list-private": "Make the tags list private", - "related-topics": "Related Topics", - "max-related-topics": "Maximum related topics to display (if supported by theme)" + "tag": "Paramètres des mots-clés", + "min-per-topic": "Nombre minimum de mots-clés par sujet", + "max-per-topic": "Nombre maximum de mots-clés par sujet", + "min-length": "Longueur minimum des mots-clés", + "max-length": "Longueur maximum des mots-clés", + "goto-manage": "Cliquez ici pour visiter la page de gestion des mots-clés", + "privacy": "Politique de confidentialité", + "list-private": "Rendre privée la liste des mots-clés", + "related-topics": "Sujets connexes", + "max-related-topics": "Nombre maximum de sujets connexes à afficher (si supporté par le thème)" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/uploads.json b/public/language/fr/admin/settings/uploads.json index 8a56c85663..d4b789766f 100644 --- a/public/language/fr/admin/settings/uploads.json +++ b/public/language/fr/admin/settings/uploads.json @@ -1,28 +1,28 @@ { - "posts": "Posts", - "allow-files": "Allow users to upload regular files", - "private": "Make uploaded files private", - "max-image-width": "Resize images down to specified width (in pixels)", - "max-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)", - "max-file-size": "Maximum File Size (in KiB)", - "max-file-size-help": "(in kilobytes, default: 2048 KiB)", - "allow-topic-thumbnails": "Allow users to upload topic thumbnails", - "topic-thumb-size": "Topic Thumb Size", - "allowed-file-extensions": "Allowed File Extensions", - "allowed-file-extensions-help": "Enter comma-separated list of file extensions here (e.g. pdf,xls,doc).\n\t\t\t\t\tAn empty list means all extensions are allowed.", - "profile-avatars": "Profile Avatars", - "allow-profile-image-uploads": "Allow users to upload profile images", - "convert-profile-image-png": "Convert profile image uploads to PNG", - "default-avatar": "Custom Default Avatar", - "upload": "Upload", - "profile-image-dimension": "Profile Image Dimension", - "profile-image-dimension-help": "(in pixels, default: 128 pixels)", - "max-profile-image-size": "Maximum Profile Image File Size", - "max-profile-image-size-help": "(in kilobytes, default: 256 KiB)", - "max-cover-image-size": "Maximum Cover Image File Size", - "max-cover-image-size-help": "(in kilobytes, default: 2,048 KiB)", - "keep-all-user-images": "Keep old versions of avatars and profile covers on the server", - "profile-covers": "Profile Covers", - "default-covers": "Default Cover Images", - "default-covers-help": "Add comma-separated default cover images for accounts that don't have an uploaded cover image" + "posts": "Sujets", + "allow-files": "Autoriser les utilisateurs à télécharger des fichiers standarts", + "private": "Rendre privés les fichiers téléchargés", + "max-image-width": "Redimensionner les images à un largeur spécifique (en pixels)", + "max-image-width-help": "(En pixels, par défaut : 760 pixels, définir à 0 si désactivé)", + "max-file-size": "Taille maximum d'un fichier (en Ko)", + "max-file-size-help": "(En kilooctet, par défaut : 2048 Ko) ", + "allow-topic-thumbnails": "Autoriser les utilisateurs à télécharger des miniatures de sujet", + "topic-thumb-size": "Miniature du sujet", + "allowed-file-extensions": "Extensions de fichier autorisés", + "allowed-file-extensions-help": "Entrer une liste d'extensions autorisées, séparées par des virgules (par exemple : pdf, xls, doc).\n\\t\\t\\t\\t\\tUne liste vide signifie que toutes les extensions sont autorisés.", + "profile-avatars": "Avatar", + "allow-profile-image-uploads": "Autoriser les utilisateurs à télécharger des avatars", + "convert-profile-image-png": "Convertir les avatars téléchargés au format PNG", + "default-avatar": "Modifier l'avatar par défaut", + "upload": "Télécharger", + "profile-image-dimension": "Dimensions de l'avatar", + "profile-image-dimension-help": "(En pixel, par défaut : 128 pixels)", + "max-profile-image-size": "Taille maximum des avatars", + "max-profile-image-size-help": "(En kilooctets, par défaut : 256 Ko)", + "max-cover-image-size": "Taille maximum des images de couverture", + "max-cover-image-size-help": "(En kilooctets, par défaut : 2,048 Ko)", + "keep-all-user-images": "Garder les anciennes versions d'avatars et d'images de couverture sur le serveur", + "profile-covers": "Image de couverture", + "default-covers": "Image de couverture par défaut", + "default-covers-help": "Ajouter des images de couvertures par défaut séparées par des virgules pour les comptes n'ayant pas téléchargé d'image de couverture" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/user.json b/public/language/fr/admin/settings/user.json index c48c48d687..c37e8adbee 100644 --- a/public/language/fr/admin/settings/user.json +++ b/public/language/fr/admin/settings/user.json @@ -1,59 +1,59 @@ { "authentication": "Authentification", "allow-local-login": "Autoriser l'identification locale", - "require-email-confirmation": "Demander une confirmation de l'adresse mail", - "email-confirm-interval": "Les utilisateurs ne peuvent pas demander de nouveau mail de confirmation avant", - "email-confirm-email2": "minutes", + "require-email-confirmation": "Demander une vérification de l'adresse e-mail", + "email-confirm-interval": "Les utilisateurs ne peuvent pas demander un e-mail de vérification avant", + "email-confirm-email2": "minutes se sont écoulées", "allow-login-with": "Autoriser l'identification avec", - "allow-login-with.username-email": "Nom d'utilisateur ou email", + "allow-login-with.username-email": "Nom d'utilisateur ou e-mail", "allow-login-with.username": "Nom d'utilisateur uniquement", - "allow-login-with.email": "Email uniquement", - "account-settings": "Réglages des comptes", - "disable-username-changes": "Interdire le changement de nom d'utilisateur", - "disable-email-changes": "Interdire le changement d'email", - "disable-password-changes": "Interdire le changement de mot de passe", - "allow-account-deletion": "Autoriser la suppression d'un compte", - "user-info-private": "Rendre les informations des utilisateurs privées", + "allow-login-with.email": "E-mail uniquement", + "account-settings": "Paramètres du compte", + "disable-username-changes": "Désactiver le changement de nom d'utilisateur", + "disable-email-changes": "Désactiver le changement d'adresse e-mail", + "disable-password-changes": "Désactiver le changement de mot de passe", + "allow-account-deletion": "Autoriser la suppression des comptes", + "user-info-private": "Rendre privées les informations des utilisateurs", "themes": "Thèmes", "disable-user-skins": "Empêcher les utilisateurs de choisir un skin personnalisé", - "account-protection": "Protection des comptes", - "login-attempts": "Tentatives d'identification par heure", - "login-attempts-help": "Si le nombre de tentatives d'identification d'un utilisateur dépasse ce seuil, le compte sera verrouillé pour une durée pré-configurée.", - "lockout-duration": "Durée de verrouillage du compte (minutes)", + "account-protection": "Protection du compte", + "login-attempts": "Tentatives de connexions par heure", + "login-attempts-help": "Si le nombre de tentatives de connexion à un compte dépasse ce seuil, le compte sera bloqué pour une durée pré-configurée", + "lockout-duration": "Durée du blocage (minutes)", "login-days": "Nombre de jour pendant lesquels se souvenir des sessions d'identification utilisateurs", "password-expiry-days": "Imposer un changement de mot de passe après un certain nombre de jours", "registration": "Inscription des utilisateurs", "registration-type": "Type d'inscription", - "registration-type.normal": "Normale", - "registration-type.admin-approval": "Avec accord d'un admin", - "registration-type.admin-approval-ip": "Accord d'un admin pour les IPs", - "registration-type.invite-only": "Sur invitation uniquement", - "registration-type.admin-invite-only": "Sur invitation d'un admin uniquement", + "registration-type.normal": "Normal", + "registration-type.admin-approval": "Approbation de administrateur", + "registration-type.admin-approval-ip": "Approbation de l'administrateur pour les adresses IP", + "registration-type.invite-only": "Uniquement sur invitation", + "registration-type.admin-invite-only": "Uniquement sur invitation d'un admin", "registration-type.disabled": "Pas d'inscription", "registration-type.help": "Normale - Les utilisateurs peuvent s'inscrire depuis la page /register.
\nAvec accord 'un admin - Les inscriptions sont placées dans une file d'approbation pour les administrateurs.
\nAccord d'un admin pour les IPs - Inscription normale pour les nouveaux utilisateurs, sur approbation d'un admin pour les adresses IP qui ont déjà un compte.
\nSur invitation uniquement - Les utilisateurs peuvent inviter des personnes depuis la page utilisateurs.
\nSur invitation d'un admin uniquement - Seuls les administrateurs peuvent inviter des personnes depuis les pages utilisateurs et admin/manage/users.
\nPas d'inscription - Les utilisateurs ne peuvent pas s'inscrire.
", - "registration.max-invites": "Nombre d'invitation maximum par utilisateur", - "max-invites": "Nombre d'invitation maximum par utilisateur", - "max-invites-help": "0 pour aucune restriction. Les admin ont un nombre infini d'invitations
Uniquement valable pour \"Sur invitation uniquement\"", - "min-username-length": "Longueur de nom d'utilisateur minimum", - "max-username-length": "Longueur de nom d'utilisateur maximum", - "min-password-length": "Longueur de mot de passe minimum", - "max-about-me-length": "Longueur maximum du texte A propos de moi", - "terms-of-use": "Conditions d'utilisation du forum (Laisser vide pour désactiver)", - "user-search": "Recherche d'utilisateur", + "registration.max-invites": "Nombre maximum d'invitations par utilisateur", + "max-invites": "Nombre maximum d'invitations par utilisateur", + "max-invites-help": "0 pour supprimer cette restriction. Les admins n'ont aucune restriction
Valable uniquement pour \"Uniquement sur invitation\"", + "min-username-length": "Longueur minimum du nom d'utilisateur", + "max-username-length": "Longueur maxmum du nom d'utilisateur", + "min-password-length": "Longueur minimum du mot de passe", + "max-about-me-length": "Longueur maximum du À propos de moi", + "terms-of-use": "Conditions générales d'utilisation du forum (Laisser vide pour désactiver)", + "user-search": "Rechercher un utilisateur", "user-search-results-per-page": "Nombre de résultats à afficher", "default-user-settings": "Réglages par défaut des utilisateurs", - "show-email": "Afficher l'email", + "show-email": "Afficher l'adresse e-mail", "show-fullname": "Afficher le nom complet", - "restrict-chat": "N'autoriser les discussions ne provenant que des utilisateurs que je suis", + "restrict-chat": "Autoriser uniquement les discussions aux utilisateurs que je suis", "outgoing-new-tab": "Ouvrir les liens sortants dans un nouvel onglet", "topic-search": "Activer la recherche au sein des sujets", "digest-freq": "S'inscrire aux compte rendus", "digest-freq.off": "Désactivé", - "digest-freq.daily": "Quotidiennement", - "digest-freq.weekly": "Chaque semaine", - "digest-freq.monthly": "Chaque mois", - "email-chat-notifs": "Envoyer un email quand un message de discussion arrive et que je ne suis pas en ligne", - "email-post-notif": "Envoyer un email quand quelqu'un réponde aux sujets auxquels je suis abonné", - "follow-created-topics": "S'abonner aux sujets que je crée", - "follow-replied-topics": "S'abonner aux sujets auxquels je réponds" + "digest-freq.daily": "Quotidien", + "digest-freq.weekly": "Hebdomadaire", + "digest-freq.monthly": "Mensuel", + "email-chat-notifs": "Envoyer un e-mail si un nouveau message de chat arrive lorsque je ne suis pas en ligne", + "email-post-notif": "Envoyer un email lors de réponses envoyées aux sujets auxquels je suis abonné", + "follow-created-topics": "S'abonner aux sujets que vous créez", + "follow-replied-topics": "S'abonner aux sujets auxquels vous répondez" } \ No newline at end of file diff --git a/public/language/fr/email.json b/public/language/fr/email.json index b990e55c58..477db2a967 100644 --- a/public/language/fr/email.json +++ b/public/language/fr/email.json @@ -7,13 +7,13 @@ "welcome.text1": "Merci de vous être inscrit sur %1!", "welcome.text2": "Pour activer totalement votre compte, nous devons vérifier que vous êtes bien propriétaire de l'adresse email que vous avez utilisé pour vous inscrire.", "welcome.text3": "Un administrateur a accepté votre demande d'inscription. Vous pouvez maintenant vous connecter avec vos identifiants/mots de passe.", - "welcome.cta": "Cliquez ici pour confirmer votre adresse email", - "invitation.text1": "%1 vous a invité à joindre %2", + "welcome.cta": "Cliquez ici pour confirmer votre adresse e-mail", + "invitation.text1": "%1 vous a invité à rejoindre %2", "invitation.ctr": "Cliquer ici pour créer votre compte.", "reset.text1": "Nous avons reçu une demande de réinitialisation de votre mot de passe, probablement parce que vous l'avez oublié. Si ce n'est pas le cas, veuillez ignorer cet email.", "reset.text2": "Pour confirmer la réinitialisation de votre mot de passe, veuillez cliquer sur le lien suivant :", "reset.cta": "Cliquez ici pour réinitialiser votre mot de passe", - "reset.notify.subject": "Mot de Passe modifié", + "reset.notify.subject": "Mot de passe modifié", "reset.notify.text1": "Nous vous informons que le %1, votre mot de passe a été modifié.", "reset.notify.text2": "Si vous n'avez pas autorisé ceci, veuillez contacter immédiatement un administrateur.", "digest.notifications": "Vous avez des notifications non-lues de %1 :", @@ -30,7 +30,7 @@ "notif.chat.unsub.info": "Cette notification de chat a été envoyé en raison de vos paramètres d'abonnement.", "notif.post.cta": "Cliquer ici pour lire le sujet complet", "notif.post.unsub.info": "La notification de ce message vous a été envoyé en raison de vos paramètres d'abonnement.", - "test.text1": "Ceci est un email de test pour vérifier que l'emailer est correctement configuré pour NodeBB.", + "test.text1": "Ceci est un e-mail de test pour vérifier que l'e-mailer est correctement configuré pour NodeBB.", "unsub.cta": "Cliquez ici pour modifier ces paramètres", "closing": "Merci !" } \ No newline at end of file diff --git a/public/language/fr/global.json b/public/language/fr/global.json index 6c1a8e97de..51a1ba5f49 100644 --- a/public/language/fr/global.json +++ b/public/language/fr/global.json @@ -56,7 +56,7 @@ "upvoters": "Votes pour", "upvoted": "Votes pour", "downvoters": "Votes contre", - "downvoted": "Votes contre", + "downvoted": "Vote négatif", "views": "Vues", "reputation": "Réputation", "read_more": "En lire plus", diff --git a/public/language/fr/language.json b/public/language/fr/language.json index 21ce190574..0aaf9508de 100644 --- a/public/language/fr/language.json +++ b/public/language/fr/language.json @@ -1,5 +1,5 @@ { - "name": "French", + "name": "Français", "code": "fr", "dir": "ltr" } \ No newline at end of file diff --git a/public/language/fr/register.json b/public/language/fr/register.json index e95bab6ad3..c0fe685e98 100644 --- a/public/language/fr/register.json +++ b/public/language/fr/register.json @@ -1,22 +1,22 @@ { "register": "S'inscrire", "cancel_registration": "Annuler l'inscription", - "help.email": "Par défaut, votre email est cachée du public.", - "help.username_restrictions": "Un nom d'utilisateur est unique et a entre %1 et %2 charactères. Les autres utilisateurs peuvent vous mentionner avec @nom_d'utilisateur.", + "help.email": "Par défaut, votre adresse e-mail est masquée au public.", + "help.username_restrictions": "Un nom d'utilisateur unique entre %1 et %2 caractères. Les autres utilisateurs peuvent vous mentionner avec @nom-d'utilisateur.", "help.minimum_password_length": "Votre mot de passe doit avoir au moins %1 charactères.", - "email_address": "Adresse email", - "email_address_placeholder": "Entrer l'addresse email", + "email_address": "Adresse e-mail", + "email_address_placeholder": "Entrer votre adresse e-mail", "username": "Nom d'utilisateur", - "username_placeholder": "Entrer le nom d'utilisateur", + "username_placeholder": "Entrer votre nom d'utilisateur", "password": "Mot de passe", - "password_placeholder": "Entrer le mot de passe", + "password_placeholder": "Entrer votre mot de passe", "confirm_password": "Confirmer le mot de passe", - "confirm_password_placeholder": "Confirmer le mot de passe", + "confirm_password_placeholder": "Confirmer votre mot de passe", "register_now_button": "S'inscrire", "alternative_registration": "Autres méthodes d'inscription", - "terms_of_use": "Conditions d'utilisation", - "agree_to_terms_of_use": "J'accepte les Conditions d'utilisation", - "terms_of_use_error": "Vous devez accepter les conditions d'utilisation", + "terms_of_use": "Conditions générales d'utilisation", + "agree_to_terms_of_use": "J'accepte les conditions générales d'utilisation", + "terms_of_use_error": "Vous devez accepter les conditions générales d'utilisation", "registration-added-to-queue": "Votre inscription a été ajoutée à la liste d'approbation. Vous recevrez un email quand celle-ci sera acceptée par un administrateur.", "interstitial.intro": "Nous avons besoin de quelques informations supplémentaires avant de pouvoir créer votre compte.", "interstitial.errors-found": "Nous n'avons pas pu compléter votre inscription :" diff --git a/public/language/fr/success.json b/public/language/fr/success.json index ccfd7385a9..6cb99ee723 100644 --- a/public/language/fr/success.json +++ b/public/language/fr/success.json @@ -1,5 +1,5 @@ { - "success": "C'est fait !", + "success": "Terminé", "topic-post": "Le message a bien été envoyé.", "authentication-successful": "Authentification réussie", "settings-saved": "Paramètres enregistrés !" diff --git a/public/language/fr/topic.json b/public/language/fr/topic.json index 8d4144760e..51dee037a4 100644 --- a/public/language/fr/topic.json +++ b/public/language/fr/topic.json @@ -109,7 +109,7 @@ "composer.handle_placeholder": "Nom", "composer.discard": "Abandonner", "composer.submit": "Envoyer", - "composer.replying_to": "Réponse à %1", + "composer.replying_to": "En réponse à %1", "composer.new_topic": "Nouveau sujet", "composer.uploading": "envoi en cours…", "composer.thumb_url_label": "Coller une URL de vignette du sujet", diff --git a/public/language/gl/user.json b/public/language/gl/user.json index 651bea02f5..6510e010b4 100644 --- a/public/language/gl/user.json +++ b/public/language/gl/user.json @@ -4,8 +4,8 @@ "username": "Nome de usuario", "joindate": "Data de ingreso", "postcount": "Reconto de mensaxes", - "email": "Correo Electrónico", - "confirm_email": "Confirma o teu correo electrónico", + "email": "Enderezo Electrónico", + "confirm_email": "Confirma o teu enderezo electrónico", "account_info": "Información da conta", "ban_account": "Suspender conta", "ban_account_confirm": "Estás seguro de que desexas expulsar a este usuario?", diff --git a/public/language/id/admin/admin.json b/public/language/id/admin/admin.json index 9c01f56006..9325ffcbec 100644 --- a/public/language/id/admin/admin.json +++ b/public/language/id/admin/admin.json @@ -1,7 +1,7 @@ { - "alert.confirm-reload": "Are you sure you wish to reload NodeBB?", - "alert.confirm-restart": "Are you sure you wish to restart NodeBB?", + "alert.confirm-reload": "Anda yakin ingin memuat ulang NodeBB?", + "alert.confirm-restart": "Anda yakin ingin mulai ulang NodeBB?", - "acp-title": "%1 | NodeBB Admin Control Panel", - "settings-header-contents": "Contents" + "acp-title": "%1 | Kontrol Panel Admin NodeBB", + "settings-header-contents": "Konten" } \ No newline at end of file diff --git a/public/language/id/admin/advanced/cache.json b/public/language/id/admin/advanced/cache.json index 5a954f1232..3c6618e9ad 100644 --- a/public/language/id/admin/advanced/cache.json +++ b/public/language/id/admin/advanced/cache.json @@ -1,5 +1,5 @@ { - "post-cache": "Post Cache", + "post-cache": "Cache Posting", "posts-in-cache": "Posts in Cache", "average-post-size": "Average Post Size", "length-to-max": "Length / Max", diff --git a/public/language/it/admin/admin.json b/public/language/it/admin/admin.json index 9c01f56006..edb6aa1389 100644 --- a/public/language/it/admin/admin.json +++ b/public/language/it/admin/admin.json @@ -1,7 +1,7 @@ { - "alert.confirm-reload": "Are you sure you wish to reload NodeBB?", - "alert.confirm-restart": "Are you sure you wish to restart NodeBB?", + "alert.confirm-reload": "Sei sicuro di voler ricaricare NodeBB?", + "alert.confirm-restart": "Sei sicuro di voler riavviare NodeBB?", - "acp-title": "%1 | NodeBB Admin Control Panel", - "settings-header-contents": "Contents" + "acp-title": "%1 | Pannello di controllo amministratore NodeBB", + "settings-header-contents": "Contenuti" } \ No newline at end of file diff --git a/public/language/it/admin/advanced/cache.json b/public/language/it/admin/advanced/cache.json index 5a954f1232..281f02b258 100644 --- a/public/language/it/admin/advanced/cache.json +++ b/public/language/it/admin/advanced/cache.json @@ -1,11 +1,11 @@ { - "post-cache": "Post Cache", - "posts-in-cache": "Posts in Cache", - "average-post-size": "Average Post Size", - "length-to-max": "Length / Max", - "percent-full": "%1% Full", - "post-cache-size": "Post Cache Size", - "items-in-cache": "Items in Cache", - "control-panel": "Control Panel", - "update-settings": "Update Cache Settings" + "post-cache": "Post nella Cache", + "posts-in-cache": "Post nella Cache", + "average-post-size": "Grandezza media Post", + "length-to-max": "Lunghezza / Max", + "percent-full": "%1% Pieno", + "post-cache-size": "Grandezza Cache dei Post", + "items-in-cache": "Elementi nella Cache", + "control-panel": "Pannello di controllo", + "update-settings": "Aggiorna le impostazioni della Cache" } \ No newline at end of file diff --git a/public/language/it/admin/advanced/database.json b/public/language/it/admin/advanced/database.json index f7db6220ee..33dc5f4934 100644 --- a/public/language/it/admin/advanced/database.json +++ b/public/language/it/admin/advanced/database.json @@ -1,11 +1,11 @@ { "x-b": "%1 b", "x-mb": "%1 mb", - "uptime-seconds": "Uptime in Seconds", - "uptime-days": "Uptime in Days", + "uptime-seconds": "Uptime in secondi", + "uptime-days": "Uptime in giorni", "mongo": "Mongo", - "mongo.version": "MongoDB Version", + "mongo.version": "Versione MongoDB", "mongo.storage-engine": "Storage Engine", "mongo.collections": "Collections", "mongo.objects": "Objects", diff --git a/public/language/it/global.json b/public/language/it/global.json index d4ab2d8755..7b7fbae4c8 100644 --- a/public/language/it/global.json +++ b/public/language/it/global.json @@ -19,7 +19,7 @@ "welcome_back": "Bentornato", "you_have_successfully_logged_in": "Login avvenuto con successo", "save_changes": "Salva cambiamenti", - "save": "Save", + "save": "Salva", "close": "Chiudi", "pagination": "Paginazione", "pagination.out_of": "%1 di %2", @@ -100,8 +100,8 @@ "unsaved-changes": "Hai delle modifiche non salvate. Sei sicuro che vuoi lasciare la pagina?", "reconnecting-message": "Sembra che la tua connessione a %1 sia stata persa, per favore attenti mentre proviamo a riconnetterti.", "play": "Play", - "cookies.message": "This website uses cookies to ensure you get the best experience on our website.", - "cookies.accept": "Got it!", - "cookies.learn_more": "Learn More", - "edited": "Edited" + "cookies.message": "Questo sito utilizza i cookie per garantirti la miglior esperienza di navigazione possibile", + "cookies.accept": "Ho capito!", + "cookies.learn_more": "Scopri di più", + "edited": "Modificato" } \ No newline at end of file diff --git a/public/language/it/groups.json b/public/language/it/groups.json index d07c3e09a4..7526935622 100644 --- a/public/language/it/groups.json +++ b/public/language/it/groups.json @@ -51,7 +51,7 @@ "membership.reject": "Rifiuta", "new-group.group_name": "Nome Gruppo:", "upload-group-cover": "Carica copertina del gruppo", - "bulk-invite-instructions": "Enter a list of comma separated usernames to invite to this group", + "bulk-invite-instructions": "Inserisci una lista di nomi utente da invitare in questo gruppo separati da virgole", "bulk-invite": "Bulk Invite", - "remove_group_cover_confirm": "Are you sure you want to remove the cover picture?" + "remove_group_cover_confirm": "Sei sicuro di voler rimuovere l'immagine copertina?" } \ No newline at end of file diff --git a/public/language/it/modules.json b/public/language/it/modules.json index 3bf32b4970..7e4e0fa0ce 100644 --- a/public/language/it/modules.json +++ b/public/language/it/modules.json @@ -13,7 +13,7 @@ "chat.contacts": "Contatti", "chat.message-history": "Cronologia Messaggi", "chat.pop-out": "Chat in finestra", - "chat.minimize": "Minimize", + "chat.minimize": "Minimizza", "chat.maximize": "Ingrandisci", "chat.seven_days": "7 Giorni", "chat.thirty_days": "30 Giorni", @@ -38,7 +38,7 @@ "composer.upload-picture": "Carica immagine", "composer.upload-file": "Carica file", "composer.zen_mode": "Zen Mode", - "composer.select_category": "Select a category", + "composer.select_category": "Seleziona una categoria", "bootbox.ok": "OK", "bootbox.cancel": "Annulla", "bootbox.confirm": "Conferma", diff --git a/public/language/it/pages.json b/public/language/it/pages.json index 286ff2acf2..465cdd5b05 100644 --- a/public/language/it/pages.json +++ b/public/language/it/pages.json @@ -7,7 +7,7 @@ "popular-alltime": "Discussioni più popolari di sempre", "recent": "Discussioni Recenti", "flagged-posts": "Post Segnalati", - "ip-blacklist": "IP Blacklist", + "ip-blacklist": "Lista nera degli IP", "users/online": "Utenti Online", "users/latest": "Ultimi Utenti", "users/sort-posts": "Utenti maggiori contributori", @@ -19,7 +19,7 @@ "tags": "Tags", "tag": "Discussioni taggate \"%1\"", "register": "Registrati", - "registration-complete": "Registration complete", + "registration-complete": "Registrazione completata", "login": "Autenticati", "reset": "Resetta password", "categories": "Categorie", @@ -37,7 +37,7 @@ "account/posts": "Post creati da %1", "account/topics": "Discussioni create da %1", "account/groups": "Gruppi di %1", - "account/bookmarks": "%1's Bookmarked Posts", + "account/bookmarks": "%1 Post tra i favoriti", "account/settings": "Impostazioni Utente", "account/watched": "Discussioni osservate da %1", "account/upvoted": "Post apprezzati da %1", diff --git a/public/language/it/search.json b/public/language/it/search.json index 5ee3ffbb9f..622fc49699 100644 --- a/public/language/it/search.json +++ b/public/language/it/search.json @@ -8,7 +8,7 @@ "posted-by": "Pubblicato da", "in-categories": "In Categorie", "search-child-categories": "Cerca nelle sottocategorie", - "has-tags": "Has tags", + "has-tags": "Ha i tag", "reply-count": "Numero Risposte", "at-least": "Almeno", "at-most": "Al massimo", diff --git a/public/language/it/topic.json b/public/language/it/topic.json index e4bf575edf..a33a961a84 100644 --- a/public/language/it/topic.json +++ b/public/language/it/topic.json @@ -13,7 +13,7 @@ "notify_me": "Ricevi notifiche di nuove risposte in questa discussione", "quote": "Cita", "reply": "Rispondi", - "replies_to_this_post": "Replies: %1", + "replies_to_this_post": "Risposte: %1", "reply-as-topic": "Topic risposta", "guest-login-reply": "Effettua il Log in per rispondere", "edit": "Modifica", @@ -67,7 +67,7 @@ "not-watching.description": "Non notificarmi sulle nuove risposte.
Mostra la discussione fra le non lette se la categoria non è ignorata.", "ignoring.description": "Non notificarmi sulle nuove risposte.
Non mostrare la discussione fra le non lette.", "thread_tools.title": "Strumenti per la Discussione", - "thread_tools.markAsUnreadForAll": "Mark unread for all", + "thread_tools.markAsUnreadForAll": "Segna tutti come non letti", "thread_tools.pin": "Fissa Discussione", "thread_tools.unpin": "Sblocca Discussione", "thread_tools.lock": "Blocca Discussione", @@ -90,9 +90,9 @@ "disabled_categories_note": "Le Categorie disabilitate sono in grigio", "confirm_move": "Sposta", "confirm_fork": "Dividi", - "bookmark": "Bookmark", - "bookmarks": "Bookmarks", - "bookmarks.has_no_bookmarks": "You haven't bookmarked any posts yet.", + "bookmark": "Favorito", + "bookmarks": "Favoriti", + "bookmarks.has_no_bookmarks": "Non hai nessun post tra i favoriti", "loading_more_posts": "Caricamento altri post", "move_topic": "Sposta Discussione", "move_topics": "Sposta Discussioni", diff --git a/public/language/it/user.json b/public/language/it/user.json index 3fbcd24e18..10a35fa433 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -23,7 +23,7 @@ "profile": "Profilo", "profile_views": "Visite al profilo", "reputation": "Reputazione", - "bookmarks": "Bookmarks", + "bookmarks": "Favoriti", "watched": "Osservati", "followers": "Da chi è seguito", "following": "Chi segue", @@ -31,8 +31,8 @@ "signature": "Firma", "birthday": "Data di nascita", "chat": "Chat", - "chat_with": "Continue chat with %1", - "new_chat_with": "Start new chat with %1", + "chat_with": "Continua la chat con %1", + "new_chat_with": "Inizia una nuova chat con %1", "follow": "Segui", "unfollow": "Smetti di seguire", "more": "Altro", @@ -63,7 +63,7 @@ "upload_a_picture": "Carica una foto", "remove_uploaded_picture": "Elimina foto caricata", "upload_cover_picture": "Carica immagine di copertina", - "remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?", + "remove_cover_picture_confirm": "Sei sicuro di voler eliminare l'immagine di copertina?", "settings": "Impostazioni", "show_email": "Mostra la mia Email", "show_fullname": "Mostra il mio nome completo", @@ -95,7 +95,7 @@ "incoming-message-sound": "Suono messaggio in entrata", "outgoing-message-sound": "Suono messaggio in uscita", "notification-sound": "Suono di notifica", - "no-sound": "No sound", + "no-sound": "Nessun suono", "browsing": "Impostazioni di Navigazione", "open_links_in_new_tab": "Apri i link web in una nuova pagina", "enable_topic_searching": "Abilita la ricerca negli argomenti", @@ -124,8 +124,8 @@ "info.banned-permanently": "Bannato permanentemente", "info.banned-reason-label": "Motivo", "info.banned-no-reason": "Non è stata data nessuna motivazione.", - "info.username-history": "Username History", - "info.email-history": "Email History", + "info.username-history": "Storico del nome utente", + "info.email-history": "Storico dell'Email", "info.moderation-note": "Moderation Note", "info.moderation-note.success": "Moderation note saved" } \ No newline at end of file diff --git a/public/language/ja/admin/advanced/cache.json b/public/language/ja/admin/advanced/cache.json index 5a954f1232..a347efe95c 100644 --- a/public/language/ja/admin/advanced/cache.json +++ b/public/language/ja/admin/advanced/cache.json @@ -1,11 +1,11 @@ { - "post-cache": "Post Cache", - "posts-in-cache": "Posts in Cache", - "average-post-size": "Average Post Size", - "length-to-max": "Length / Max", - "percent-full": "%1% Full", - "post-cache-size": "Post Cache Size", - "items-in-cache": "Items in Cache", - "control-panel": "Control Panel", - "update-settings": "Update Cache Settings" + "post-cache": "投稿キャッシュ", + "posts-in-cache": "ポストにキャッシュがあります", + "average-post-size": "平均投稿サイズ", + "length-to-max": "長さ / 最大", + "percent-full": "%1% がフル", + "post-cache-size": "投稿キャッシュのサイズ", + "items-in-cache": "キャッシュ内のアイテム", + "control-panel": "コントロールパネル", + "update-settings": "キャッシュの設定を更新" } \ No newline at end of file diff --git a/public/language/ja/admin/advanced/database.json b/public/language/ja/admin/advanced/database.json index f7db6220ee..4dac0a3eab 100644 --- a/public/language/ja/admin/advanced/database.json +++ b/public/language/ja/admin/advanced/database.json @@ -1,35 +1,35 @@ { "x-b": "%1 b", "x-mb": "%1 mb", - "uptime-seconds": "Uptime in Seconds", - "uptime-days": "Uptime in Days", + "uptime-seconds": "秒単位の稼働時間", + "uptime-days": "日単位の稼働時間", "mongo": "Mongo", - "mongo.version": "MongoDB Version", - "mongo.storage-engine": "Storage Engine", - "mongo.collections": "Collections", - "mongo.objects": "Objects", - "mongo.avg-object-size": "Avg. Object Size", - "mongo.data-size": "Data Size", - "mongo.storage-size": "Storage Size", - "mongo.index-size": "Index Size", - "mongo.file-size": "File Size", - "mongo.resident-memory": "Resident Memory", - "mongo.virtual-memory": "Virtual Memory", - "mongo.mapped-memory": "Mapped Memory", - "mongo.raw-info": "MongoDB Raw Info", + "mongo.version": "MongoDBのバージョン", + "mongo.storage-engine": "ストレージエンジン", + "mongo.collections": "コレクション", + "mongo.objects": "オブジェクト", + "mongo.avg-object-size": "平均のオブジェクトサイズ", + "mongo.data-size": "データサイズ", + "mongo.storage-size": "ストレージサイズ", + "mongo.index-size": "インデックスサイズ", + "mongo.file-size": "ファイルサイズ", + "mongo.resident-memory": "常駐メモリ", + "mongo.virtual-memory": "仮想メモリ", + "mongo.mapped-memory": "マップされたメモリ", + "mongo.raw-info": "MongoDBのRaw情報", "redis": "Redis", - "redis.version": "Redis Version", - "redis.connected-clients": "Connected Clients", - "redis.connected-slaves": "Connected Slaves", - "redis.blocked-clients": "Blocked Clients", - "redis.used-memory": "Used Memory", - "redis.memory-frag-ratio": "Memory Fragmentation Ratio", - "redis.total-connections-recieved": "Total Connections Received", - "redis.total-commands-processed": "Total Commands Processed", - "redis.iops": "Instantaneous Ops. Per Second", - "redis.keyspace-hits": "Keyspace Hits", - "redis.keyspace-misses": "Keyspace Misses", - "redis.raw-info": "Redis Raw Info" + "redis.version": "Redisのバージョン", + "redis.connected-clients": "接続されたクライアント", + "redis.connected-slaves": "接続されたスレーヴ", + "redis.blocked-clients": "ブロックされたクライアント", + "redis.used-memory": "使用されたメモリ", + "redis.memory-frag-ratio": "メモリの断片化率", + "redis.total-connections-recieved": "受け取った総接続数", + "redis.total-commands-processed": "処理された総コマンド数", + "redis.iops": "秒ごとの瞬間操作数", + "redis.keyspace-hits": "ヒットしたキー・スペース", + "redis.keyspace-misses": "見逃したキー・スペース", + "redis.raw-info": "RedisのRaw情報" } \ No newline at end of file diff --git a/public/language/ja/admin/advanced/errors.json b/public/language/ja/admin/advanced/errors.json index 963e68b116..9e27641a9f 100644 --- a/public/language/ja/admin/advanced/errors.json +++ b/public/language/ja/admin/advanced/errors.json @@ -1,14 +1,14 @@ { - "figure-x": "Figure %1", - "error-events-per-day": "%1 events per day", + "figure-x": "%1を見つける", + "error-events-per-day": "%1 日あたりのイベント", "error.404": "404 Not Found", - "error.503": "503 Service Unavailable", - "manage-error-log": "Manage Error Log", - "export-error-log": "Export Error Log (CSV)", - "clear-error-log": "Clear Error Log", - "route": "Route", - "count": "Count", - "no-routes-not-found": "Hooray! There are no routes that were not found.", - "clear404-confirm": "Are you sure you wish to clear the 404 error logs?", - "clear404-success": "\"404 Not Found\" errors cleared" + "error.503": "503 サービスは利用できません", + "manage-error-log": "エラーログの管理", + "export-error-log": "エラーログのエクスポート (CSV)", + "clear-error-log": "エラーログの消去", + "route": "ルート", + "count": "カウント", + "no-routes-not-found": "やりましたね!見つからなかったルートはありませんでした。", + "clear404-confirm": "本当に404エラーログを消去してもよろしいですか?", + "clear404-success": "\"404 Not Found\"エラーは消去されました" } \ No newline at end of file diff --git a/public/language/ja/admin/advanced/events.json b/public/language/ja/admin/advanced/events.json index 766eb5e951..9f67aaea35 100644 --- a/public/language/ja/admin/advanced/events.json +++ b/public/language/ja/admin/advanced/events.json @@ -1,6 +1,6 @@ { - "events": "Events", - "no-events": "There are no events", - "control-panel": "Events Control Panel", - "delete-events": "Delete Events" + "events": "イベント", + "no-events": "イベントがありません", + "control-panel": "イベントのコントロールパネル", + "delete-events": "イベントを削除" } \ No newline at end of file diff --git a/public/language/ja/admin/advanced/logs.json b/public/language/ja/admin/advanced/logs.json index b9de400e1c..c6be55b672 100644 --- a/public/language/ja/admin/advanced/logs.json +++ b/public/language/ja/admin/advanced/logs.json @@ -1,7 +1,7 @@ { - "logs": "Logs", - "control-panel": "Logs Control Panel", - "reload": "Reload Logs", - "clear": "Clear Logs", - "clear-success": "Logs Cleared!" + "logs": "ログ", + "control-panel": "ログのコントロールパネル", + "reload": "ログを再読み込み", + "clear": "ログをクリア", + "clear-success": "ログはクリアされました!" } \ No newline at end of file diff --git a/public/language/ja/admin/appearance/customise.json b/public/language/ja/admin/appearance/customise.json index 767d443e29..fc00e1ad92 100644 --- a/public/language/ja/admin/appearance/customise.json +++ b/public/language/ja/admin/appearance/customise.json @@ -1,9 +1,9 @@ { - "custom-css": "Custom CSS", - "custom-css.description": "Enter your own CSS declarations here, which will be applied after all other styles.", - "custom-css.enable": "Enable Custom CSS", + "custom-css": "カスタムCSS", + "custom-css.description": "あなたのCSS設定をこちらに追加すると他のすべてのスタイルの後に適用されます。", + "custom-css.enable": "カスタムCSSを有効にする", - "custom-header": "Custom Header", - "custom-header.description": "Enter custom HTML here (ex. JavaScript, Meta Tags, etc.), which will be appended to the <head> section of your forum's markup.", - "custom-header.enable": "Enable Custom Header" + "custom-header": "カスタムヘッダー", + "custom-header.description": "カスタムしたHTMLを入力してください(例. JavaScript, メタタグなど)。これはフォーラムのマークアップの<head>に追加されます。", + "custom-header.enable": "カスタムヘッダーを有効にする" } \ No newline at end of file diff --git a/public/language/ja/admin/appearance/skins.json b/public/language/ja/admin/appearance/skins.json index 4db6fbdd8a..045a17ecd7 100644 --- a/public/language/ja/admin/appearance/skins.json +++ b/public/language/ja/admin/appearance/skins.json @@ -1,9 +1,9 @@ { - "loading": "Loading Skins...", - "homepage": "Homepage", - "select-skin": "Select Skin", - "current-skin": "Current Skin", - "skin-updated": "Skin Updated", - "applied-success": "%1 skin was succesfully applied", - "revert-success": "Skin reverted to base colours" + "loading": "スキンを読み込んでいます...", + "homepage": "ホームページ", + "select-skin": "スキン選択", + "current-skin": "現在のスキン", + "skin-updated": "スキンがアップデートされました", + "applied-success": "スキン %1 が正常に適用されました", + "revert-success": "スキンがベースカラーに戻りました" } \ No newline at end of file diff --git a/public/language/ja/admin/appearance/themes.json b/public/language/ja/admin/appearance/themes.json index 3148a01337..fdba3b0762 100644 --- a/public/language/ja/admin/appearance/themes.json +++ b/public/language/ja/admin/appearance/themes.json @@ -1,11 +1,11 @@ { - "checking-for-installed": "Checking for installed themes...", - "homepage": "Homepage", - "select-theme": "Select Theme", - "current-theme": "Current Theme", - "no-themes": "No installed themes found", - "revert-confirm": "Are you sure you wish to restore the default NodeBB theme?", - "theme-changed": "Theme Changed", - "revert-success": "You have successfully reverted your NodeBB back to it's default theme.", - "restart-to-activate": "Please restart your NodeBB to fully activate this theme" + "checking-for-installed": "インストール済みテーマをチェックしています...", + "homepage": "ホームページ", + "select-theme": "テーマを選択", + "current-theme": "現在のテーマ", + "no-themes": "インストールされたテーマが見つかりませんでした", + "revert-confirm": "本当にNodeBBのテーマをデフォルトに復元してもよろしいですか?", + "theme-changed": "テーマが変更されました", + "revert-success": "NodeBBは正常にデフォルトテーマに戻りました。", + "restart-to-activate": "テーマを完全に有効化するためにNodeBBを再起動してください" } \ No newline at end of file diff --git a/public/language/ja/admin/development/info.json b/public/language/ja/admin/development/info.json index b2768ca212..9169cb20d6 100644 --- a/public/language/ja/admin/development/info.json +++ b/public/language/ja/admin/development/info.json @@ -1,16 +1,16 @@ { - "you-are-on": "Info - You are on %1:%2", - "host": "host", + "you-are-on": "お知らせ - あなたは%1:%2", + "host": "ホスト", "pid": "pid", "nodejs": "nodejs", - "online": "online", + "online": "オンライン", "git": "git", - "load": "load", - "uptime": "uptime", + "load": "ロード", + "uptime": "稼働時間", - "registered": "Registered", - "sockets": "Sockets", - "guests": "Guests", + "registered": "登録数", + "sockets": "ソケット数", + "guests": "ゲスト数", - "info": "Info" + "info": "情報" } \ No newline at end of file diff --git a/public/language/ja/admin/development/logger.json b/public/language/ja/admin/development/logger.json index 6ab9558149..864efda349 100644 --- a/public/language/ja/admin/development/logger.json +++ b/public/language/ja/admin/development/logger.json @@ -1,12 +1,12 @@ { - "logger-settings": "Logger Settings", - "description": "By enabling the check boxes, you will receive logs to your terminal. If you specify a path, logs will then be saved to a file instead. HTTP logging is useful for collecting statistics about who, when, and what people access on your forum. In addition to logging HTTP requests, we can also log socket.io events. Socket.io logging, in combination with redis-cli monitor, can be very helpful for learning NodeBB's internals.", - "explanation": "Simply check/uncheck the logging settings to enable or disable logging on the fly. No restart needed.", - "enable-http": "Enable HTTP logging", - "enable-socket": "Enable socket.io event logging", - "file-path": "Path to log file", - "file-path-placeholder": "/path/to/log/file.log ::: leave blank to log to your terminal", + "logger-settings": "ロガー設定", + "description": "チェックボックスをオンにすると、ターミナルにログが送信されます。パスを指定した場合、ログはファイルに保存されます。HTTPロギングは誰が、いつ、どんなユーザがあなたのフォーラムにアクセスしたかに関する統計を収集するのに便利です。HTTPリクエストだけでなく、socket.ioイベントのロギングをすることもできます。redis-cliモニタと組み合わせたsocket.ioロギングは、NodeBBの内部を学習するのに非常に役立ちます。", + "explanation": "ロギング設定をオンまたはオフにするだけで、瞬時にロギングを有効または無効にすることができます。再起動する必要はありません。", + "enable-http": "HTTPロギングを有効にする", + "enable-socket": "socket.ioイベントのロギングを有効にする", + "file-path": "ログファイルのパス", + "file-path-placeholder": "/path/to/log/file.log ::: 空白の状態でターミナルにログを表示する", - "control-panel": "Logger Control Panel", - "update-settings": "Update Logger Settings" + "control-panel": "ロガーのコントロールパネル", + "update-settings": "ロガー設定を更新する" } \ No newline at end of file diff --git a/public/language/ja/admin/extend/plugins.json b/public/language/ja/admin/extend/plugins.json index 1661a987b7..4756c93c85 100644 --- a/public/language/ja/admin/extend/plugins.json +++ b/public/language/ja/admin/extend/plugins.json @@ -1,47 +1,47 @@ { - "installed": "Installed", - "active": "Active", - "inactive": "Inactive", - "out-of-date": "Out of Date", - "none-found": "No plugins found.", - "none-active": "No Active Plugins", - "find-plugins": "Find Plugins", + "installed": "インストール済み", + "active": "アクティブ", + "inactive": "非アクティブ", + "out-of-date": "期限切れ", + "none-found": "プラグインが見つかりませんでした", + "none-active": "アクティブなプラグインが見つかりませんでした", + "find-plugins": "プラグインが見つかりました", - "plugin-search": "Plugin Search", - "plugin-search-placeholder": "Search for plugin...", - "reorder-plugins": "Re-order Plugins", - "order-active": "Order Active Plugins", - "dev-interested": "Interested in writing plugins for NodeBB?", - "docs-info": "Full documentation regarding plugin authoring can be found in the NodeBB Docs Portal.", + "plugin-search": "プラグインの検索", + "plugin-search-placeholder": "プラグインを検索します...", + "reorder-plugins": "プラグインの並び替え", + "order-active": "アクティブなプラグインの並び替え", + "dev-interested": "NodeBBのプラグインの作成に興味がありますか?", + "docs-info": "プラグインの作成に関する完全なドキュメントはNodeBBのドキュメントポータルにあります。", - "order.description": "Certain plugins work ideally when they are initialised before/after other plugins.", - "order.explanation": "Plugins load in the order specified here, from top to bottom", + "order.description": "特定のプラグインは他のプラグインの前後で初期化された際に理想的な動作をします。", + "order.explanation": "プラグインはここに上から下へ指定された順序でロードされます", - "plugin-item.themes": "Themes", - "plugin-item.deactivate": "Deactivate", - "plugin-item.activate": "Activate", - "plugin-item.install": "Install", - "plugin-item.uninstall": "Uninstall", - "plugin-item.settings": "Settings", - "plugin-item.installed": "Installed", - "plugin-item.latest": "Latest", - "plugin-item.upgrade": "Upgrade", - "plugin-item.more-info": "For more information:", - "plugin-item.unknown": "Unknown", - "plugin-item.unknown-explanation": "The state of this plugin could not be determined, possibly due to a misconfiguration error.", + "plugin-item.themes": "テーマ", + "plugin-item.deactivate": "非アクティブ化", + "plugin-item.activate": "アクティブ化", + "plugin-item.install": "インストール", + "plugin-item.uninstall": "アンインストール", + "plugin-item.settings": "設定", + "plugin-item.installed": "インストール済み", + "plugin-item.latest": "最新", + "plugin-item.upgrade": "アップグレード", + "plugin-item.more-info": "より詳細な情報:", + "plugin-item.unknown": "不明", + "plugin-item.unknown-explanation": "このプラグインの状態を判断できませんでした。設定にミスがある可能性があります。", - "alert.enabled": "Plugin Enabled", - "alert.disabled": "Plugin Disabled", - "alert.upgraded": "Plugin Upgraded", - "alert.installed": "Plugin Installed", - "alert.uninstalled": "Plugin Uninstalled", - "alert.activate-success": "Please restart your NodeBB to fully activate this plugin", - "alert.deactivate-success": "Plugin successfully deactivated", - "alert.upgrade-success": "Please reload your NodeBB to fully upgrade this plugin", - "alert.install-success": "Plugin successfully installed, please activate the plugin.", - "alert.uninstall-success": "The plugin has been successfully deactivated and uninstalled.", - "alert.suggest-error": "

NodeBB could not reach the package manager, proceed with installation of latest version?

Server returned (%1): %2
", - "alert.package-manager-unreachable": "

NodeBB could not reach the package manager, an upgrade is not suggested at this time.

", - "alert.incompatible": "

Your version of NodeBB (v%1) is only cleared to upgrade to v%2 of this plugin. Please update your NodeBB if you wish to install a newer version of this plugin.

", - "alert.possibly-incompatible": "

No Compatibility Information Found

This plugin did not specify a specific version for installation given your NodeBB version. Full compatibility cannot be guaranteed, and may cause your NodeBB to no longer start properly.

In the event that NodeBB cannot boot properly:

$ ./nodebb reset plugin=\"%1\"

Continue installation of latest version of this plugin?

" + "alert.enabled": "プラグインは有効化されました", + "alert.disabled": "プラグインは無効化されました", + "alert.upgraded": "プラグインはアップグレードされました", + "alert.installed": "プラグインはインストールされました", + "alert.uninstalled": "プラグインはアンインストールされました", + "alert.activate-success": "このプラグインを完全にアクティブするためにNodeBBを再起動してください", + "alert.deactivate-success": "プラグインは正常に非アクティブ化されました", + "alert.upgrade-success": "このプラグインを完全にアップグレードするためにNodeBBをリロードしてください", + "alert.install-success": "プラグインは正常にインストールされました。プラグインをアクティブにしてください", + "alert.uninstall-success": "プラグインは正常に非アクティブ化とアンインストールされました。", + "alert.suggest-error": "

NodeBBはパッケージマネージャに到達できませんでした。最新バージョンのインストールを続行しましたか?

Server returned (%1): %2
", + "alert.package-manager-unreachable": "

NodeBBはパッケージマネージャに到達できませんでした。今アップグレードすることはおすすめしません。

", + "alert.incompatible": "

NodeBBのバージョン(v%1)を v%2 にアップデートする必要があります。このプラグインの新しいバージョンをインストールするにはNodeBBをアップデートしてください。

", + "alert.possibly-incompatible": "

No Compatibility Information Found

このプラグインはインストールに必要なNodeBBのバージョンの指定がされていませんでした。完全な互換性は保証されず、NodeBBが正常に起動しなくなる可能性があります。

NodeBBが正常に起動できない場合:

$ ./nodebb reset plugin=\"%1\"

このプラグインの最新バージョンのインストールを続行しますか?

" } diff --git a/public/language/ja/admin/extend/rewards.json b/public/language/ja/admin/extend/rewards.json index 5383a90b33..da6f388a12 100644 --- a/public/language/ja/admin/extend/rewards.json +++ b/public/language/ja/admin/extend/rewards.json @@ -1,5 +1,5 @@ { - "rewards": "Rewards", + "rewards": "報酬", "condition-if-users": "If User's", "condition-is": "Is:", "condition-then": "Then:", diff --git a/public/language/ja/admin/extend/widgets.json b/public/language/ja/admin/extend/widgets.json index 477bb15e56..387dfca92f 100644 --- a/public/language/ja/admin/extend/widgets.json +++ b/public/language/ja/admin/extend/widgets.json @@ -1,5 +1,5 @@ { - "available": "Available Widgets", + "available": "利用可能なウィジェット", "explanation": "Select a widget from the dropdown menu and then drag and drop it into a template's widget area on the left.", "none-installed": "No widgets found! Activate the essential widgets plugin in the plugins control panel.", "containers.available": "Available Containers", diff --git a/public/language/ja/admin/general/dashboard.json b/public/language/ja/admin/general/dashboard.json index b82802db1b..6922b81259 100644 --- a/public/language/ja/admin/general/dashboard.json +++ b/public/language/ja/admin/general/dashboard.json @@ -1,6 +1,6 @@ { - "forum-traffic": "Forum Traffic", - "page-views": "Page Views", + "forum-traffic": "フォーラムのトラフィック", + "page-views": "ページビュー", "unique-visitors": "Unique Visitors", "page-views-last-month": "Page views Last Month", "page-views-this-month": "Page views This Month", diff --git a/public/language/ja/admin/general/homepage.json b/public/language/ja/admin/general/homepage.json index 4866b8baf6..1f9a27aa8b 100644 --- a/public/language/ja/admin/general/homepage.json +++ b/public/language/ja/admin/general/homepage.json @@ -1,5 +1,5 @@ { - "home-page": "Home Page", + "home-page": "ホームページ", "description": "Choose what page is shown when users navigate to the root URL of your forum.", "home-page-route": "Home Page Route", "custom-route": "Custom Route", diff --git a/public/language/ja/admin/general/languages.json b/public/language/ja/admin/general/languages.json index da45cade2c..9a6a4cf7e8 100644 --- a/public/language/ja/admin/general/languages.json +++ b/public/language/ja/admin/general/languages.json @@ -1,5 +1,5 @@ { - "language-settings": "Language Settings", + "language-settings": "言語設定", "description": "The default language determines the language settings for all users who are visiting your forum.
Individual users can override the default language on their account settings page.", "default-language": "Default Language" } \ No newline at end of file diff --git a/public/language/ja/admin/general/navigation.json b/public/language/ja/admin/general/navigation.json index c4ba0d09ac..102fd655c6 100644 --- a/public/language/ja/admin/general/navigation.json +++ b/public/language/ja/admin/general/navigation.json @@ -1,8 +1,8 @@ { - "icon": "Icon:", - "change-icon": "change", - "route": "Route:", - "tooltip": "Tooltip:", + "icon": "アイコン:", + "change-icon": "変更", + "route": "ルート:", + "tooltip": "ツールチップ:", "text": "Text:", "text-class": "Text Class: optional", "id": "ID: optional", diff --git a/public/language/ja/admin/general/social.json b/public/language/ja/admin/general/social.json index 23aedfcfaa..211d840d69 100644 --- a/public/language/ja/admin/general/social.json +++ b/public/language/ja/admin/general/social.json @@ -1,5 +1,5 @@ { - "post-sharing": "Post Sharing", - "info-plugins-additional": "Plugins can add additional networks for sharing posts.", - "save-success": "Successfully saved Post Sharing Networks!" + "post-sharing": "投稿共有", + "info-plugins-additional": "プラグインは投稿を共有するために追加のネットワークを設定することができます", + "save-success": "投稿共有ネットワークを正常に保存しました!" } \ No newline at end of file diff --git a/public/language/ja/admin/general/sounds.json b/public/language/ja/admin/general/sounds.json index 95ccbde0f1..b03597c4de 100644 --- a/public/language/ja/admin/general/sounds.json +++ b/public/language/ja/admin/general/sounds.json @@ -1,9 +1,9 @@ { - "notifications": "Notifications", - "chat-messages": "Chat Messages", - "play-sound": "Play", - "incoming-message": "Incoming Message", - "outgoing-message": "Outgoing Message", - "upload-new-sound": "Upload New Sound", - "saved": "Settings Saved" + "notifications": "通知", + "chat-messages": "チャットメッセージ", + "play-sound": "再生", + "incoming-message": "受信メッセージ", + "outgoing-message": "送信メッセージ", + "upload-new-sound": "新しい音声のアップロード", + "saved": "設定を保存しました" } \ No newline at end of file diff --git a/public/language/ja/admin/manage/categories.json b/public/language/ja/admin/manage/categories.json index 7e2a5ce12e..eafd994f76 100644 --- a/public/language/ja/admin/manage/categories.json +++ b/public/language/ja/admin/manage/categories.json @@ -1,8 +1,8 @@ { - "settings": "Category Settings", - "privileges": "Privileges", + "settings": "カテゴリー設定", + "privileges": "特権", - "name": "Category Name", + "name": "カテゴリー名", "description": "Category Description", "bg-color": "Background Colour", "text-color": "Text Colour", diff --git a/public/language/ja/admin/manage/flags.json b/public/language/ja/admin/manage/flags.json index bfc488a409..00a12dc4b5 100644 --- a/public/language/ja/admin/manage/flags.json +++ b/public/language/ja/admin/manage/flags.json @@ -1,7 +1,7 @@ { - "daily": "Daily flags", - "by-user": "Flags by user", - "by-user-search": "Search flagged posts by username", + "daily": "日付フラッグ", + "by-user": "ユーザーからのフラグ", + "by-user-search": "フラグを付けたユーザーを検索", "category": "Category", "sort-by": "Sort By", "sort-by.most-flags": "Most Flags", diff --git a/public/language/ja/admin/manage/groups.json b/public/language/ja/admin/manage/groups.json index b5e526aacf..90954ffa67 100644 --- a/public/language/ja/admin/manage/groups.json +++ b/public/language/ja/admin/manage/groups.json @@ -1,8 +1,8 @@ { - "name": "Group Name", - "description": "Group Description", - "system": "System Group", - "edit": "Edit", + "name": "グループ名", + "description": "グループの説明", + "system": "システムグループ", + "edit": "編集", "search-placeholder": "Search", "create": "Create Group", "description-placeholder": "A short description about your group", diff --git a/public/language/ja/admin/manage/ip-blacklist.json b/public/language/ja/admin/manage/ip-blacklist.json index 5106434351..79470b4181 100644 --- a/public/language/ja/admin/manage/ip-blacklist.json +++ b/public/language/ja/admin/manage/ip-blacklist.json @@ -1,7 +1,7 @@ { - "lead": "Configure your IP blacklist here.", + "lead": "IPブラックリストをこちらで設定します。", "description": "Occasionally, a user account ban is not enough of a deterrant. Other times, restricting access to the forum to a specific IP or a range of IPs is the best way to protect a forum. In these scenarios, you can add troublesome IP addresses or entire CIDR blocks to this blacklist, and they will be prevented from logging in to or registering a new account.", - "active-rules": "Active Rules", + "active-rules": "アクティブルール", "validate": "Validate Blacklist", "apply": "Apply Blacklist", "hints": "Syntax Hints", diff --git a/public/language/ja/admin/manage/registration.json b/public/language/ja/admin/manage/registration.json index f51b4d56e6..2d005284c9 100644 --- a/public/language/ja/admin/manage/registration.json +++ b/public/language/ja/admin/manage/registration.json @@ -1,8 +1,8 @@ { - "queue": "Queue", + "queue": "キュー", "description": "There are no users in the registration queue.
To enable this feature, go to Settings → User → User Registration and set Registration Type to \"Admin Approval\".", - "list.name": "Name", + "list.name": "名前", "list.email": "Email", "list.ip": "IP", "list.time": "Time", diff --git a/public/language/ja/admin/manage/tags.json b/public/language/ja/admin/manage/tags.json index db40e9f098..8d93f5ecd2 100644 --- a/public/language/ja/admin/manage/tags.json +++ b/public/language/ja/admin/manage/tags.json @@ -1,7 +1,7 @@ { - "none": "Your forum does not have any topics with tags yet.", - "bg-color": "Background Colour", - "text-color": "Text Colour", + "none": "あなたのフォーラムにはまだタグが付いていません。", + "bg-color": "背景カラー", + "text-color": "テキストカラー", "create-modify": "Create & Modify Tags", "description": "Select tags via clicking and/or dragging, use shift to select multiple.", "create": "Create Tag", diff --git a/public/language/ja/admin/manage/users.json b/public/language/ja/admin/manage/users.json index f1651a814b..3571feeb5a 100644 --- a/public/language/ja/admin/manage/users.json +++ b/public/language/ja/admin/manage/users.json @@ -1,7 +1,7 @@ { - "users": "Users", - "edit": "Edit", - "make-admin": "Make Admin", + "users": "ユーザー", + "edit": "編集", + "make-admin": "管理者にする", "remove-admin": "Remove Admin", "validate-email": "Validate Email", "send-validation-email": "Send Validation Email", diff --git a/public/language/ja/admin/menu.json b/public/language/ja/admin/menu.json index 6a4995ea6e..66b8eda80b 100644 --- a/public/language/ja/admin/menu.json +++ b/public/language/ja/admin/menu.json @@ -1,8 +1,8 @@ { - "section-general": "General", - "general/dashboard": "Dashboard", - "general/homepage": "Home Page", - "general/navigation": "Navigation", + "section-general": "一般", + "general/dashboard": "ダッシュボード", + "general/homepage": "ホームページ", + "general/navigation": "ナビゲーション", "general/languages": "Languages", "general/sounds": "Sounds", "general/social": "Social", diff --git a/public/language/ja/admin/settings/advanced.json b/public/language/ja/admin/settings/advanced.json index b023528d04..da838146e6 100644 --- a/public/language/ja/admin/settings/advanced.json +++ b/public/language/ja/admin/settings/advanced.json @@ -1,7 +1,7 @@ { - "maintenance-mode": "Maintenance Mode", + "maintenance-mode": "メンテナンスモード", "maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.", - "maintenance-mode.message": "Maintenance Message", + "maintenance-mode.message": "メンテナンスメッセージ", "headers": "Headers", "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame", "headers.powered-by": "Customise the \"Powered By\" header sent by NodeBB", diff --git a/public/language/ja/admin/settings/chat.json b/public/language/ja/admin/settings/chat.json index 0b22127341..549cbe8e76 100644 --- a/public/language/ja/admin/settings/chat.json +++ b/public/language/ja/admin/settings/chat.json @@ -1,7 +1,7 @@ { - "chat-settings": "Chat Settings", - "disable": "Disable chat", - "disable-editing": "Disable chat message editing/deletion", + "chat-settings": "チャット設定", + "disable": "チャットは無効です", + "disable-editing": "チャットメッセージの編集/削除を無効にする", "disable-editing-help": "Administrators and global moderators are exempt from this restriction", "max-length": "Maximum length of chat messages", "max-room-size": "Maximum number of users in chat rooms", diff --git a/public/language/ja/admin/settings/cookies.json b/public/language/ja/admin/settings/cookies.json index f8b0f0538b..0ad7639cea 100644 --- a/public/language/ja/admin/settings/cookies.json +++ b/public/language/ja/admin/settings/cookies.json @@ -1,7 +1,7 @@ { - "eu-consent": "EU Consent", - "consent.enabled": "Enabled", - "consent.message": "Notification message", + "eu-consent": "EU承諾", + "consent.enabled": "有効", + "consent.message": "通知メッセージ", "consent.acceptance": "Acceptance message", "consent.link-text": "Policy Link Text", "consent.blank-localised-default": "Leave blank to use NodeBB localised defaults", diff --git a/public/language/ja/admin/settings/email.json b/public/language/ja/admin/settings/email.json index 1e92c88490..9b84bcb6be 100644 --- a/public/language/ja/admin/settings/email.json +++ b/public/language/ja/admin/settings/email.json @@ -1,6 +1,6 @@ { - "email-settings": "Email Settings", - "address": "Email Address", + "email-settings": "Eメール設定", + "address": "Eメールアドレス", "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", diff --git a/public/language/ja/admin/settings/general.json b/public/language/ja/admin/settings/general.json index c26740ee4f..89964ef42c 100644 --- a/public/language/ja/admin/settings/general.json +++ b/public/language/ja/admin/settings/general.json @@ -1,7 +1,7 @@ { - "site-settings": "Site Settings", - "title": "Site Title", - "title.name": "Your Community Name", + "site-settings": "サイト設定", + "title": "サイトタイトル", + "title.name": "あなたのコミュニティ名", "title.show-in-header": "Show Site Title in Header", "browser-title": "Browser Title", "browser-title-help": "If no browser title is specified, the site title will be used", diff --git a/public/language/ja/admin/settings/group.json b/public/language/ja/admin/settings/group.json index 1ae88c9cf5..59ee61df12 100644 --- a/public/language/ja/admin/settings/group.json +++ b/public/language/ja/admin/settings/group.json @@ -1,6 +1,6 @@ { - "general": "General", - "private-groups": "Private Groups", + "general": "一般", + "private-groups": "プライベートグループ", "private-groups.help": "If enabled, joining of groups requires the approval of the group owner (Default: enabled)", "private-groups.warning": "Beware! If this option is disabled and you have private groups, they automatically become public.", "allow-creation": "Allow Group Creation", diff --git a/public/language/ja/admin/settings/guest.json b/public/language/ja/admin/settings/guest.json index 6b2ac2c8b2..30111e41d7 100644 --- a/public/language/ja/admin/settings/guest.json +++ b/public/language/ja/admin/settings/guest.json @@ -1,6 +1,6 @@ { - "handles": "Guest Handles", - "handles.enabled": "Allow guest handles", + "handles": "ゲストハンドル", + "handles.enabled": "ゲストハンドルを有効にする", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", "privileges": "Guest Privileges", "privileges.can-search": "Allow guests to search without logging in", diff --git a/public/language/ja/admin/settings/notifications.json b/public/language/ja/admin/settings/notifications.json index 4eff7f341a..5948cb610d 100644 --- a/public/language/ja/admin/settings/notifications.json +++ b/public/language/ja/admin/settings/notifications.json @@ -1,5 +1,5 @@ { - "notifications": "Notifications", - "welcome-notification": "Welcome Notification", + "notifications": "通知", + "welcome-notification": "ウェルカム通知", "welcome-notification-link": "Welcome Notification Link" } \ No newline at end of file diff --git a/public/language/ja/admin/settings/pagination.json b/public/language/ja/admin/settings/pagination.json index 27d71b4de5..c79dab5f14 100644 --- a/public/language/ja/admin/settings/pagination.json +++ b/public/language/ja/admin/settings/pagination.json @@ -1,7 +1,7 @@ { - "pagination": "Pagination Settings", + "pagination": "ページ設定", "enable": "Paginate topics and posts instead of using infinite scroll.", - "topics": "Topic Pagination", + "topics": "トピックページ", "posts-per-page": "Posts per Page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", diff --git a/public/language/ja/admin/settings/post.json b/public/language/ja/admin/settings/post.json index f293e554d9..f721bd7db6 100644 --- a/public/language/ja/admin/settings/post.json +++ b/public/language/ja/admin/settings/post.json @@ -1,6 +1,6 @@ { - "sorting": "Post Sorting", - "sorting.post-default": "Default Post Sorting", + "sorting": "投稿の並び順", + "sorting.post-default": "標準のポスト並び順", "sorting.oldest-to-newest": "Oldest to Newest", "sorting.newest-to-oldest": "Newest to Oldest", "sorting.most-votes": "Most Votes", diff --git a/public/language/ja/admin/settings/reputation.json b/public/language/ja/admin/settings/reputation.json index 11d6184721..15306ccec5 100644 --- a/public/language/ja/admin/settings/reputation.json +++ b/public/language/ja/admin/settings/reputation.json @@ -1,7 +1,7 @@ { - "reputation": "Reputation Settings", + "reputation": "評価の設定", "disable": "Disable Reputation System", - "disable-down-voting": "Disable Down Voting", + "disable-down-voting": "低評価を無効にする", "thresholds": "Activity Thresholds", "min-rep-downvote": "Minimum reputation to downvote posts", "min-rep-flag": "Minimum reputation to flag posts" diff --git a/public/language/ja/admin/settings/sockets.json b/public/language/ja/admin/settings/sockets.json index d04ee42fcf..9cca9ba25e 100644 --- a/public/language/ja/admin/settings/sockets.json +++ b/public/language/ja/admin/settings/sockets.json @@ -1,5 +1,5 @@ { - "reconnection": "Reconnection Settings", + "reconnection": "再接続の設定", "max-attempts": "Max Reconnection Attempts", "default-placeholder": "Default: %1", "delay": "Reconnection Delay" diff --git a/public/language/ja/admin/settings/tags.json b/public/language/ja/admin/settings/tags.json index 6f31f60ba0..534e0203ce 100644 --- a/public/language/ja/admin/settings/tags.json +++ b/public/language/ja/admin/settings/tags.json @@ -1,7 +1,7 @@ { - "tag": "Tag Settings", - "min-per-topic": "Minimum Tags per Topic", - "max-per-topic": "Maximum Tags per Topic", + "tag": "タグ設定", + "min-per-topic": "トピックごとの最小タグ数", + "max-per-topic": "トピックごとの最大タグ数", "min-length": "Minimum Tag Length", "max-length": "Maximum Tag Length", "goto-manage": "Click here to visit the tag management page.", diff --git a/public/language/ja/admin/settings/uploads.json b/public/language/ja/admin/settings/uploads.json index 8a56c85663..04245315a7 100644 --- a/public/language/ja/admin/settings/uploads.json +++ b/public/language/ja/admin/settings/uploads.json @@ -1,5 +1,5 @@ { - "posts": "Posts", + "posts": "投稿", "allow-files": "Allow users to upload regular files", "private": "Make uploaded files private", "max-image-width": "Resize images down to specified width (in pixels)", diff --git a/public/language/ja/admin/settings/user.json b/public/language/ja/admin/settings/user.json index bdabb075e9..3e74b4711f 100644 --- a/public/language/ja/admin/settings/user.json +++ b/public/language/ja/admin/settings/user.json @@ -1,7 +1,7 @@ { - "authentication": "Authentication", - "allow-local-login": "Allow local login", - "require-email-confirmation": "Require Email Confirmation", + "authentication": "認証", + "allow-local-login": "ローカルログインを有効にする", + "require-email-confirmation": "Eメールの確認が必要です", "email-confirm-interval": "User may not resend a confirmation email until", "email-confirm-email2": "minutes have elapsed", "allow-login-with": "Allow login with", diff --git a/public/language/ja/admin/settings/web-crawler.json b/public/language/ja/admin/settings/web-crawler.json index 2e0d31d12b..42217c42df 100644 --- a/public/language/ja/admin/settings/web-crawler.json +++ b/public/language/ja/admin/settings/web-crawler.json @@ -1,5 +1,5 @@ { - "crawlability-settings": "Crawlability Settings", + "crawlability-settings": "クロール性の設定", "robots-txt": "Custom Robots.txt Leave blank for default", "sitemap-feed-settings": "Sitemap & Feed Settings", "disable-rss-feeds": "Disable RSS Feeds", diff --git a/public/language/pl/admin/advanced/events.json b/public/language/pl/admin/advanced/events.json index f5596d976d..1dd4a3e3ee 100644 --- a/public/language/pl/admin/advanced/events.json +++ b/public/language/pl/admin/advanced/events.json @@ -1,6 +1,6 @@ { "events": "Wydarzenia", - "no-events": "There are no events", - "control-panel": "Events Control Panel", - "delete-events": "Delete Events" + "no-events": "Brak zdarzeń", + "control-panel": "Panel zdarzeń", + "delete-events": "Usuń zdarzenia" } \ No newline at end of file diff --git a/public/language/pl/admin/appearance/skins.json b/public/language/pl/admin/appearance/skins.json index 648da881aa..8009b420b6 100644 --- a/public/language/pl/admin/appearance/skins.json +++ b/public/language/pl/admin/appearance/skins.json @@ -2,8 +2,8 @@ "loading": "Ładowania skórki...", "homepage": "Strona główna", "select-skin": "Wybierz Skórkę", - "current-skin": "Current Skin", - "skin-updated": "Skin Updated", - "applied-success": "%1 skin was succesfully applied", - "revert-success": "Skin reverted to base colours" + "current-skin": "Obecna skórka", + "skin-updated": "Skórka zaktualizowana", + "applied-success": "%1 skórki jest zachowana z powodzeniem", + "revert-success": "Skórka przywrócowana do pierwotnych kolorów" } \ No newline at end of file diff --git a/public/language/pl/admin/development/info.json b/public/language/pl/admin/development/info.json index 2e3a792438..d63f50a900 100644 --- a/public/language/pl/admin/development/info.json +++ b/public/language/pl/admin/development/info.json @@ -5,12 +5,12 @@ "nodejs": "nodejs", "online": "online", "git": "git", - "load": "load", + "load": "obciążenie", "uptime": "uptime", - "registered": "Registered", - "sockets": "Sockets", - "guests": "Guests", + "registered": "Zarejestrowane", + "sockets": "Sockety", + "guests": "Goście", - "info": "Info" + "info": "Informacja" } \ No newline at end of file diff --git a/public/language/pl/admin/general/dashboard.json b/public/language/pl/admin/general/dashboard.json index ba1da79cd4..00dea84351 100644 --- a/public/language/pl/admin/general/dashboard.json +++ b/public/language/pl/admin/general/dashboard.json @@ -1,55 +1,55 @@ { - "forum-traffic": "Ruch Forum", - "page-views": "Page Views", - "unique-visitors": "Unique Visitors", - "page-views-last-month": "Page views Last Month", - "page-views-this-month": "Page views This Month", - "page-views-last-day": "Page views in last 24 hours", + "forum-traffic": "Ruch na forum", + "page-views": "Wyświetlenia strony", + "unique-visitors": "Unikalni goście", + "page-views-last-month": "Wyświetlenia strony w ostatnim miesiącu", + "page-views-this-month": "Wyświetlenia strony w tym miesiącu", + "page-views-last-day": "Wyświetlenia strony z ostatnich 24 godzin", - "stats.day": "Day", - "stats.week": "Week", - "stats.month": "Month", - "stats.all": "All Time", + "stats.day": "Dzień", + "stats.week": "Tydzień", + "stats.month": "Miesiąc", + "stats.all": "Cały czas", - "updates": "Updates", - "running-version": "You are running NodeBB v%1.", + "updates": "Aktualizacje", + "running-version": "Forum działa dzięki NodeBB v%1", "keep-updated": "Always make sure that your NodeBB is up to date for the latest security patches and bug fixes.", - "up-to-date": "

You are up-to-date

", - "upgrade-available": "

A new version (v%1) has been released. Consider upgrading your NodeBB.

", + "up-to-date": "

NodeBB jest aktualny

", + "upgrade-available": "

Dostępna jest nowa wersja NodeBB (v%1). Proszę o rozważenie aktualizacji

", "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.

", - "notices": "Notices", + "notices": "Powiadomienia", - "control-panel": "System Control", - "reload": "Reload", + "control-panel": "Zarządzanie systemem", + "reload": "Odśwież", "restart": "Restart", - "restart-warning": "Reloading or Restarting your NodeBB will drop all existing connections for a few seconds.", - "maintenance-mode": "Maintenance Mode", - "maintenance-mode-title": "Click here to set up maintenance mode for NodeBB", - "realtime-chart-updates": "Realtime Chart Updates", + "restart-warning": "Przeładowanie lub Restart NodeBB spowoduje przerwanie wszystkich istniejących połączeń na kilka sekund.", + "maintenance-mode": "Tryb Konserwacji", + "maintenance-mode-title": "Kliknij tutaj aby skonfigurować Tryb Konserwacji NodeBB", + "realtime-chart-updates": "Wykresy aktualizowane na żywo", - "active-users": "Active Users", - "active-users.users": "Users", - "active-users.guests": "Guests", - "active-users.total": "Total", - "active-users.connections": "Connections", + "active-users": "Aktywni użytkownicy", + "active-users.users": "Użytkownicy", + "active-users.guests": "Goście", + "active-users.total": "Łącznie", + "active-users.connections": "Połączenia", - "anonymous-registered-users": "Anonymous vs Registered Users", - "anonymous": "Anonymous", - "registered": "Registered", + "anonymous-registered-users": "Anonimowi vs Zarejestrowani użytkownicy", + "anonymous": "Anonimowi", + "registered": "Zarejestrowani", "user-presence": "User Presence", "on-categories": "On categories list", "reading-posts": "Reading posts", "browsing-topics": "Browsing topics", "recent": "Recent", - "unread": "Unread", + "unread": "Nieprzeczytane", "high-presence-topics": "High Presence Topics", - "graphs.page-views": "Page Views", - "graphs.unique-visitors": "Unique Visitors", - "graphs.registered-users": "Registered Users", - "graphs.anonymous-users": "Anonymous Users" + "graphs.page-views": "Wyświetlenia strony", + "graphs.unique-visitors": "Unikalni Użytkownicy", + "graphs.registered-users": "Zarejestrowani Użytkownicy", + "graphs.anonymous-users": "Anonimowi Użytkownicy" } \ No newline at end of file diff --git a/public/language/ru/admin/admin.json b/public/language/ru/admin/admin.json index fcaee0994e..7fc0dfede7 100644 --- a/public/language/ru/admin/admin.json +++ b/public/language/ru/admin/admin.json @@ -1,7 +1,7 @@ { "alert.confirm-reload": "Вы уверены, что хотите перезагрузить NodeBB?", - "alert.confirm-restart": "Are you sure you wish to restart NodeBB?", + "alert.confirm-restart": "Вы уверены, что хотите перезапустить NodeBB?", - "acp-title": "%1 | NodeBB Admin Control Panel", - "settings-header-contents": "Contents" + "acp-title": "%1 | Панель администратора NodeBB", + "settings-header-contents": "Содержание" } \ No newline at end of file diff --git a/public/language/ru/admin/advanced/cache.json b/public/language/ru/admin/advanced/cache.json index 5a954f1232..208775f991 100644 --- a/public/language/ru/admin/advanced/cache.json +++ b/public/language/ru/admin/advanced/cache.json @@ -1,6 +1,6 @@ { - "post-cache": "Post Cache", - "posts-in-cache": "Posts in Cache", + "post-cache": "Кэш записи", + "posts-in-cache": "Записей в кэше", "average-post-size": "Average Post Size", "length-to-max": "Length / Max", "percent-full": "%1% Full", diff --git a/public/language/ru/admin/general/dashboard.json b/public/language/ru/admin/general/dashboard.json index b82802db1b..c5c6a3e2f3 100644 --- a/public/language/ru/admin/general/dashboard.json +++ b/public/language/ru/admin/general/dashboard.json @@ -1,17 +1,17 @@ { - "forum-traffic": "Forum Traffic", - "page-views": "Page Views", - "unique-visitors": "Unique Visitors", - "page-views-last-month": "Page views Last Month", - "page-views-this-month": "Page views This Month", - "page-views-last-day": "Page views in last 24 hours", + "forum-traffic": "Трафик ", + "page-views": "Просмотров", + "unique-visitors": "Посетителей", + "page-views-last-month": "Просмотров за прошлый месяц", + "page-views-this-month": "Просмотров за этот месяц", + "page-views-last-day": "Просмотров за 24 часа", - "stats.day": "Day", - "stats.week": "Week", - "stats.month": "Month", - "stats.all": "All Time", + "stats.day": "День", + "stats.week": "Неделя", + "stats.month": "Месяц", + "stats.all": "Всё время", - "updates": "Updates", + "updates": "Обновления", "running-version": "You are running NodeBB v%1.", "keep-updated": "Always make sure that your NodeBB is up to date for the latest security patches and bug fixes.", "up-to-date": "

You are up-to-date

", @@ -19,37 +19,37 @@ "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.

", - "notices": "Notices", + "notices": "Уведомления", - "control-panel": "System Control", - "reload": "Reload", - "restart": "Restart", - "restart-warning": "Reloading or Restarting your NodeBB will drop all existing connections for a few seconds.", - "maintenance-mode": "Maintenance Mode", - "maintenance-mode-title": "Click here to set up maintenance mode for NodeBB", - "realtime-chart-updates": "Realtime Chart Updates", + "control-panel": "Управление", + "reload": "Перезапустить", + "restart": "Перезагрузить", + "restart-warning": "Перезапуск системы сбросит все соединения на несколько секунд.", + "maintenance-mode": "Режим тех обслуживания", + "maintenance-mode-title": "Нажмите, чтобы включить режим тех обслуживания", + "realtime-chart-updates": "Обновление графиков в реальном времени", - "active-users": "Active Users", - "active-users.users": "Users", - "active-users.guests": "Guests", - "active-users.total": "Total", - "active-users.connections": "Connections", + "active-users": "Активных пользователей", + "active-users.users": "Пользователей", + "active-users.guests": "Гостей", + "active-users.total": "Всего", + "active-users.connections": "Соединений", - "anonymous-registered-users": "Anonymous vs Registered Users", - "anonymous": "Anonymous", - "registered": "Registered", + "anonymous-registered-users": "Анонимных и Зарегистированных", + "anonymous": "Анонимных", + "registered": "Зарегистрированных", - "user-presence": "User Presence", - "on-categories": "On categories list", - "reading-posts": "Reading posts", - "browsing-topics": "Browsing topics", - "recent": "Recent", - "unread": "Unread", + "user-presence": "Присутствующих пользователей", + "on-categories": "В списках тем", + "reading-posts": "Читают сообщения", + "browsing-topics": "Просматривают темы", + "recent": "Новые", + "unread": "Непрочитанные", - "high-presence-topics": "High Presence Topics", + "high-presence-topics": "Популярные темы", - "graphs.page-views": "Page Views", - "graphs.unique-visitors": "Unique Visitors", - "graphs.registered-users": "Registered Users", - "graphs.anonymous-users": "Anonymous Users" + "graphs.page-views": "Просмотров", + "graphs.unique-visitors": "Уникальных пользователей", + "graphs.registered-users": "Зарегистрированных пользователей", + "graphs.anonymous-users": "Анонимных пользователей" } \ No newline at end of file diff --git a/public/language/ru/admin/general/sounds.json b/public/language/ru/admin/general/sounds.json index 816e43cfca..aeb35e856b 100644 --- a/public/language/ru/admin/general/sounds.json +++ b/public/language/ru/admin/general/sounds.json @@ -1,9 +1,9 @@ { "notifications": "Уведомления", - "chat-messages": "Chat Messages", - "play-sound": "Play", - "incoming-message": "Incoming Message", - "outgoing-message": "Outgoing Message", - "upload-new-sound": "Upload New Sound", - "saved": "Settings Saved" + "chat-messages": "Сообщения", + "play-sound": "Воспроизвести", + "incoming-message": "Входящие сообщения", + "outgoing-message": "Исходящие сообщения", + "upload-new-sound": "Загрузить новую мелодию", + "saved": "Настройки сохранены" } \ No newline at end of file diff --git a/public/language/ru/admin/manage/categories.json b/public/language/ru/admin/manage/categories.json index 7e2a5ce12e..78519ee4f5 100644 --- a/public/language/ru/admin/manage/categories.json +++ b/public/language/ru/admin/manage/categories.json @@ -1,31 +1,31 @@ { - "settings": "Category Settings", - "privileges": "Privileges", + "settings": "Настройки категории", + "privileges": "Привилегии", - "name": "Category Name", - "description": "Category Description", - "bg-color": "Background Colour", - "text-color": "Text Colour", - "bg-image-size": "Background Image Size", - "custom-class": "Custom Class", + "name": "Название категории", + "description": "Описание категории", + "bg-color": "Цвет фона", + "text-color": "Цвет текста", + "bg-image-size": "Размер фонового изображения", + "custom-class": "Свой класс", "num-recent-replies": "# of Recent Replies", - "ext-link": "External Link", - "upload-image": "Upload Image", - "delete-image": "Remove", - "category-image": "Category Image", - "parent-category": "Parent Category", - "optional-parent-category": "(Optional) Parent Category", + "ext-link": "Внешняя ссылка", + "upload-image": "Загрузить изображение", + "delete-image": "Удалить", + "category-image": "Изображение категории", + "parent-category": "Родительская категория", + "optional-parent-category": "(не обязательно) Родительская категория\n", "parent-category-none": "(None)", - "copy-settings": "Copy Settings From", - "optional-clone-settings": "(Optional) Clone Settings From Category", - "purge": "Purge Category", + "copy-settings": "Копировать настройки из", + "optional-clone-settings": "(не обязательно) Копировать настройки из", + "purge": "Очистить категорию", - "enable": "Enable", - "disable": "Disable", - "edit": "Edit", + "enable": "Включить", + "disable": "Выключить", + "edit": "Редактировать", - "select-category": "Select Category", - "set-parent-category": "Set Parent Category", + "select-category": "Указать категорию", + "set-parent-category": "Указать родительскую категорию", "privileges.description": "You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or a per-group basis. You can add a new user to this table by searching for them in the form below.", "privileges.warning": "Note: Privilege settings take effect immediately. It is not necessary to save the category after adjusting these settings.", diff --git a/public/language/ru/admin/menu.json b/public/language/ru/admin/menu.json index 6a4995ea6e..c465ecacce 100644 --- a/public/language/ru/admin/menu.json +++ b/public/language/ru/admin/menu.json @@ -1,72 +1,72 @@ { - "section-general": "General", - "general/dashboard": "Dashboard", - "general/homepage": "Home Page", - "general/navigation": "Navigation", - "general/languages": "Languages", - "general/sounds": "Sounds", - "general/social": "Social", + "section-general": "Общие", + "general/dashboard": "Панель управления", + "general/homepage": "Домашняя страница", + "general/navigation": "Навигация", + "general/languages": "Языки", + "general/sounds": "Звуки", + "general/social": "Шэринг", - "section-manage": "Manage", - "manage/categories": "Categories", - "manage/tags": "Tags", - "manage/users": "Users", - "manage/registration": "Registration Queue", - "manage/groups": "Groups", - "manage/flags": "Flags", - "manage/ip-blacklist": "IP Blacklist", + "section-manage": "Управление", + "manage/categories": "Категории", + "manage/tags": "Теги", + "manage/users": "Пользователи", + "manage/registration": "Очередь на регистрацию", + "manage/groups": "Группы", + "manage/flags": "Жалобы", + "manage/ip-blacklist": "Блокировка IP", - "section-settings": "Settings", - "settings/general": "General", - "settings/reputation": "Reputation", + "section-settings": "Настройки", + "settings/general": "Главные", + "settings/reputation": "Репутация", "settings/email": "Email", - "settings/user": "User", - "settings/group": "Group", - "settings/guest": "Guests", - "settings/uploads": "Uploads", - "settings/post": "Post", - "settings/chat": "Chat", - "settings/pagination": "Pagination", - "settings/tags": "Tags", - "settings/notifications": "Notifications", - "settings/cookies": "Cookies", - "settings/web-crawler": "Web Crawler", + "settings/user": "Пользователь", + "settings/group": "Группа", + "settings/guest": "Гости", + "settings/uploads": "Загрузки", + "settings/post": "Сообщения", + "settings/chat": "Чат", + "settings/pagination": "Пагинация", + "settings/tags": "Теги", + "settings/notifications": "Оповещения", + "settings/cookies": "Куки", + "settings/web-crawler": "Индексация", "settings/sockets": "Sockets", - "settings/advanced": "Advanced", + "settings/advanced": "Продвинутые", - "settings.page-title": "%1 Settings", + "settings.page-title": "%1 Настройки", - "section-appearance": "Appearance", - "appearance/themes": "Themes", - "appearance/skins": "Skins", + "section-appearance": "Вид", + "appearance/themes": "Темы", + "appearance/skins": "Скины", "appearance/customise": "Custom HTML & CSS", - "section-extend": "Extend", - "extend/plugins": "Plugins", - "extend/widgets": "Widgets", - "extend/rewards": "Rewards", + "section-extend": "Расширения", + "extend/plugins": "Плагины", + "extend/widgets": "Виджеты", + "extend/rewards": "Награды", - "section-social-auth": "Social Authentication", + "section-social-auth": "Авторизация", - "section-plugins": "Plugins", - "extend/plugins.install": "Install Plugins", + "section-plugins": "Плагины", + "extend/plugins.install": "Установка плагинов", - "section-advanced": "Advanced", - "advanced/database": "Database", - "advanced/events": "Events", - "advanced/logs": "Logs", - "advanced/errors": "Errors", - "advanced/cache": "Cache", + "section-advanced": "Расширенные", + "advanced/database": "База данных", + "advanced/events": "События", + "advanced/logs": "Логи", + "advanced/errors": "Ошибки", + "advanced/cache": "Кэш", "development/logger": "Logger", "development/info": "Info", "reload-forum": "Reload Forum", "restart-forum": "Restart Forum", - "logout": "Log out", + "logout": "Выйти", "view-forum": "View Forum", - "search.placeholder": "Search...", - "search.no-results": "No results...", + "search.placeholder": "Поиск...", + "search.no-results": "Нет результата...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", "search.start-typing": "Start typing to see results...", diff --git a/public/language/ru/category.json b/public/language/ru/category.json index 1b9b8cb7c8..cee642a44c 100644 --- a/public/language/ru/category.json +++ b/public/language/ru/category.json @@ -1,6 +1,6 @@ { - "category": "Сообщество", - "subcategories": "Рубрики", + "category": "Категория", + "subcategories": "Подкатегории", "new_topic_button": "Создать тему", "guest-login-post": "Войдите под своей учётной записью, чтобы написать ответ", "no_topics": "В этой категории еще нет тем.
Почему бы вам не создать первую?", diff --git a/public/language/ru/global.json b/public/language/ru/global.json index b54a3bc598..bafb1db8e2 100644 --- a/public/language/ru/global.json +++ b/public/language/ru/global.json @@ -103,5 +103,5 @@ "cookies.message": "Этот сайт использует cookies для более удобного взаимодействия.", "cookies.accept": "Понял", "cookies.learn_more": "Подробнее", - "edited": "Edited" + "edited": "Отредактированный" } \ No newline at end of file diff --git a/public/language/ru/groups.json b/public/language/ru/groups.json index 3c746637a1..4846508cfd 100644 --- a/public/language/ru/groups.json +++ b/public/language/ru/groups.json @@ -53,5 +53,5 @@ "upload-group-cover": "Загрузить обложку группы", "bulk-invite-instructions": "Введите через запятую имена пользователей, которых хотите пригласить в эту группу", "bulk-invite": "Массовое приглашение", - "remove_group_cover_confirm": "Are you sure you want to remove the cover picture?" + "remove_group_cover_confirm": "Вы уверены, что хотите удалить изображение обложки?" } \ No newline at end of file diff --git a/public/language/ru/modules.json b/public/language/ru/modules.json index 1c39cf714a..2ebe6eb869 100644 --- a/public/language/ru/modules.json +++ b/public/language/ru/modules.json @@ -13,7 +13,7 @@ "chat.contacts": "Контакты", "chat.message-history": "История сообщений", "chat.pop-out": "Покинуть диалог", - "chat.minimize": "Minimize", + "chat.minimize": "Свернуть", "chat.maximize": "Развернуть", "chat.seven_days": "7 дней", "chat.thirty_days": "30 дней", diff --git a/public/language/ru/search.json b/public/language/ru/search.json index e19fe72c98..1264963c1a 100644 --- a/public/language/ru/search.json +++ b/public/language/ru/search.json @@ -8,7 +8,7 @@ "posted-by": "В именах авторов записей", "in-categories": "В сообществах", "search-child-categories": "Искать в рубриках", - "has-tags": "Has tags", + "has-tags": "Имеет теги", "reply-count": "Количество ответов", "at-least": "Минимум", "at-most": "Максимум", diff --git a/public/language/ru/user.json b/public/language/ru/user.json index 667698294f..a5906fc774 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -63,7 +63,7 @@ "upload_a_picture": "Загрузить фото", "remove_uploaded_picture": "Удалить фото", "upload_cover_picture": "Загрузить обложку профиля", - "remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?", + "remove_cover_picture_confirm": "Вы уверены, что хотите удалить изображение обложки?", "settings": "Настройки", "show_email": "Показывать мою элетронную почту", "show_fullname": "Показывать полное имя", diff --git a/public/language/sr/topic.json b/public/language/sr/topic.json index c92a42f8ba..20ac0c5243 100644 --- a/public/language/sr/topic.json +++ b/public/language/sr/topic.json @@ -48,7 +48,7 @@ "flag_manage_history_notes": "Белешке статуса су ажуриране", "flag_manage_saved": "Детаљи статуса су ажурирани", "deleted_message": "Ова тема је избрисана. Само корисници са привилегијама управљања темама је могу видети.", - "following_topic.message": "Од сада ће те примати обавештења када неко одговори у теми.", + "following_topic.message": "Од сада ће те примати обавештења када неко одговори у овој теми.", "not_following_topic.message": "Видећете ову тему у списку непрочитаних тема али нећете примати обавештења када неко одговори у њој.", "ignoring_topic.message": "Више нећете видети ову тему у списку непрочитаних тема. Бићете обавештени када вас неко спомене или када неко гласа за вашу поруку.", "login_to_subscribe": "Региструјте се или се пријавите да бисте се претплатили на ову тему.", diff --git a/public/language/sr/user.json b/public/language/sr/user.json index aa87d456a4..c25b641603 100644 --- a/public/language/sr/user.json +++ b/public/language/sr/user.json @@ -18,7 +18,7 @@ "website": "Веб сајт", "location": "Локација", "age": "Старост", - "joined": "Датум регистрације", + "joined": "Придружио се", "lastonline": "Последњи пут на мрежи", "profile": "Профил", "profile_views": "Прегледи профила", diff --git a/public/language/tr/admin/advanced/database.json b/public/language/tr/admin/advanced/database.json index 2f986e0fbb..2d7196eebd 100644 --- a/public/language/tr/admin/advanced/database.json +++ b/public/language/tr/admin/advanced/database.json @@ -5,12 +5,12 @@ "uptime-days": "Günde Bir Çalışma Zamanı", "mongo": "Mongo", - "mongo.version": "MongoDB Version", + "mongo.version": "MongoDB Sürümü", "mongo.storage-engine": "Storage Engine", "mongo.collections": "Collections", "mongo.objects": "Objects", "mongo.avg-object-size": "Avg. Object Size", - "mongo.data-size": "Data Size", + "mongo.data-size": "Veri Boyutu", "mongo.storage-size": "Storage Size", "mongo.index-size": "Index Size", "mongo.file-size": "File Size", diff --git a/public/language/tr/admin/advanced/errors.json b/public/language/tr/admin/advanced/errors.json index 46ace2a5be..001773a2cf 100644 --- a/public/language/tr/admin/advanced/errors.json +++ b/public/language/tr/admin/advanced/errors.json @@ -1,11 +1,11 @@ { "figure-x": "Figure %1", - "error-events-per-day": "%1 events per day", + "error-events-per-day": "%1 günlük olay", "error.404": "404 Bulunamadı", - "error.503": "503 Service Unavailable", + "error.503": "503 Servis Kullanılamıyor", "manage-error-log": "Manage Error Log", - "export-error-log": "Export Error Log (CSV)", - "clear-error-log": "Clear Error Log", + "export-error-log": "Hata Kayıtlarını Dışarı Çıkar (CSV)", + "clear-error-log": "Hata Kayıtlarını Temizle", "route": "Route", "count": "Count", "no-routes-not-found": "Hooray! There are no routes that were not found.", diff --git a/public/language/tr/admin/advanced/events.json b/public/language/tr/admin/advanced/events.json index 862e753444..5bac444857 100644 --- a/public/language/tr/admin/advanced/events.json +++ b/public/language/tr/admin/advanced/events.json @@ -1,6 +1,6 @@ { "events": "Olaylar", - "no-events": "There are no events", + "no-events": "Olay yok", "control-panel": "Events Control Panel", "delete-events": "Olayları Sil" } \ No newline at end of file diff --git a/public/language/tr/admin/advanced/logs.json b/public/language/tr/admin/advanced/logs.json index f007492eaf..837846df0e 100644 --- a/public/language/tr/admin/advanced/logs.json +++ b/public/language/tr/admin/advanced/logs.json @@ -1,7 +1,7 @@ { "logs": "Kayıtlar", - "control-panel": "Logs Control Panel", - "reload": "Reload Logs", + "control-panel": "Kayıt Kontrol Paneli", + "reload": "Kayıtları Yeniden Yükle", "clear": "Kayıtları Temizle", "clear-success": "Kayıtlar Temizlendi!" } \ No newline at end of file diff --git a/public/language/tr/admin/appearance/customise.json b/public/language/tr/admin/appearance/customise.json index 767d443e29..faf0f66b15 100644 --- a/public/language/tr/admin/appearance/customise.json +++ b/public/language/tr/admin/appearance/customise.json @@ -1,5 +1,5 @@ { - "custom-css": "Custom CSS", + "custom-css": "Özel CSS", "custom-css.description": "Enter your own CSS declarations here, which will be applied after all other styles.", "custom-css.enable": "Enable Custom CSS", diff --git a/public/language/tr/admin/appearance/themes.json b/public/language/tr/admin/appearance/themes.json index d20baa36e5..9cdc64769e 100644 --- a/public/language/tr/admin/appearance/themes.json +++ b/public/language/tr/admin/appearance/themes.json @@ -1,5 +1,5 @@ { - "checking-for-installed": "Checking for installed themes...", + "checking-for-installed": "Yüklü temalar kontrol ediliyor...", "homepage": "Anasayfa", "select-theme": "Tema Seç", "current-theme": "Current Theme", diff --git a/public/language/tr/admin/development/info.json b/public/language/tr/admin/development/info.json index b2768ca212..594ac11906 100644 --- a/public/language/tr/admin/development/info.json +++ b/public/language/tr/admin/development/info.json @@ -10,7 +10,7 @@ "registered": "Registered", "sockets": "Sockets", - "guests": "Guests", + "guests": "Ziyaretçiler", "info": "Info" } \ No newline at end of file diff --git a/public/language/tr/admin/extend/plugins.json b/public/language/tr/admin/extend/plugins.json index 94a24914fd..4121c482f4 100644 --- a/public/language/tr/admin/extend/plugins.json +++ b/public/language/tr/admin/extend/plugins.json @@ -4,7 +4,7 @@ "inactive": "Inactive", "out-of-date": "Out of Date", "none-found": "Hiç eklenti bulunamadı.", - "none-active": "No Active Plugins", + "none-active": "Aktif ", "find-plugins": "Find Plugins", "plugin-search": "Plugin Search", diff --git a/public/language/tr/admin/extend/rewards.json b/public/language/tr/admin/extend/rewards.json index fc5055b564..624fae6151 100644 --- a/public/language/tr/admin/extend/rewards.json +++ b/public/language/tr/admin/extend/rewards.json @@ -6,7 +6,7 @@ "max-claims": "Amount of times reward is claimable", "zero-infinite": "Enter 0 for infinite", "delete": "Delete", - "enable": "Enable", + "enable": "Aktif", "disable": "Disable", "control-panel": "Rewards Control", "new-reward": "New Reward", diff --git a/public/language/tr/admin/extend/widgets.json b/public/language/tr/admin/extend/widgets.json index 477bb15e56..bf5e6a96d9 100644 --- a/public/language/tr/admin/extend/widgets.json +++ b/public/language/tr/admin/extend/widgets.json @@ -1,10 +1,10 @@ { - "available": "Available Widgets", + "available": "Kullanılabilir Bileşenler", "explanation": "Select a widget from the dropdown menu and then drag and drop it into a template's widget area on the left.", "none-installed": "No widgets found! Activate the essential widgets plugin in the plugins control panel.", "containers.available": "Available Containers", "containers.explanation": "Drag and drop on top of any active widget", - "containers.none": "None", + "containers.none": "Hiçbiri", "container.well": "Well", "container.jumbotron": "Jumbotron", "container.panel": "Panel", diff --git a/public/language/tr/admin/general/dashboard.json b/public/language/tr/admin/general/dashboard.json index 7fa6c2d9ff..3379d19afa 100644 --- a/public/language/tr/admin/general/dashboard.json +++ b/public/language/tr/admin/general/dashboard.json @@ -7,7 +7,7 @@ "page-views-last-day": "Page views in last 24 hours", "stats.day": "Day", - "stats.week": "Week", + "stats.week": "Hafta", "stats.month": "Month", "stats.all": "All Time", diff --git a/public/language/tr/admin/general/sounds.json b/public/language/tr/admin/general/sounds.json index 54d6f26419..b2c52aa9f1 100644 --- a/public/language/tr/admin/general/sounds.json +++ b/public/language/tr/admin/general/sounds.json @@ -4,6 +4,6 @@ "play-sound": "Oynat", "incoming-message": "Incoming Message", "outgoing-message": "Outgoing Message", - "upload-new-sound": "Upload New Sound", + "upload-new-sound": "Yeni Ses Yükle", "saved": "Settings Saved" } \ No newline at end of file diff --git a/public/language/tr/admin/manage/categories.json b/public/language/tr/admin/manage/categories.json index eca77f5a2b..d5cb9e7729 100644 --- a/public/language/tr/admin/manage/categories.json +++ b/public/language/tr/admin/manage/categories.json @@ -5,12 +5,12 @@ "name": "Kategori Adı", "description": "Category Description", "bg-color": "Background Colour", - "text-color": "Text Colour", - "bg-image-size": "Background Image Size", - "custom-class": "Custom Class", + "text-color": "Yazı Rengi", + "bg-image-size": "Arkaplan Görseli Boyutu", + "custom-class": "Özel Sınıf", "num-recent-replies": "# of Recent Replies", "ext-link": "External Link", - "upload-image": "Upload Image", + "upload-image": "Görsel Yükle", "delete-image": "Remove", "category-image": "Category Image", "parent-category": "Parent Category", @@ -60,7 +60,7 @@ "alert.set-parent-category": "Set Parent Category", "alert.updated": "Updated Categories", "alert.updated-success": "Category IDs %1 successfully updated.", - "alert.upload-image": "Upload category image", + "alert.upload-image": "Kategori görseli yükle", "alert.find-user": "Find a User", "alert.user-search": "Search for a user here...", "alert.find-group": "Find a Group", diff --git a/public/language/tr/admin/manage/flags.json b/public/language/tr/admin/manage/flags.json index 1e802c5849..aecd180ada 100644 --- a/public/language/tr/admin/manage/flags.json +++ b/public/language/tr/admin/manage/flags.json @@ -6,7 +6,7 @@ "sort-by": "Sıralama", "sort-by.most-flags": "Most Flags", "sort-by.most-recent": "Most Recent", - "search": "Search", + "search": "Ara", "dismiss-all": "Dismiss All", "none-flagged": "No flagged posts!", "posted-in": "Posted in %1", diff --git a/public/language/tr/admin/manage/groups.json b/public/language/tr/admin/manage/groups.json index fda88a170a..fff1ef9df0 100644 --- a/public/language/tr/admin/manage/groups.json +++ b/public/language/tr/admin/manage/groups.json @@ -4,9 +4,9 @@ "system": "System Group", "edit": "Düzenle", "search-placeholder": "Ara", - "create": "Create Group", + "create": "Grup Oluştur", "description-placeholder": "A short description about your group", - "create-button": "Create", + "create-button": "Oluştur", "alerts.create-failure": "Uh-Oh

There was a problem creating your group. Please try again later!

", "alerts.confirm-delete": "Are you sure you wish to delete this group?", diff --git a/public/language/tr/admin/manage/ip-blacklist.json b/public/language/tr/admin/manage/ip-blacklist.json index 5106434351..9ba7b9f06d 100644 --- a/public/language/tr/admin/manage/ip-blacklist.json +++ b/public/language/tr/admin/manage/ip-blacklist.json @@ -1,7 +1,7 @@ { - "lead": "Configure your IP blacklist here.", + "lead": "IP kara listenizi buradan yapılandırın.", "description": "Occasionally, a user account ban is not enough of a deterrant. Other times, restricting access to the forum to a specific IP or a range of IPs is the best way to protect a forum. In these scenarios, you can add troublesome IP addresses or entire CIDR blocks to this blacklist, and they will be prevented from logging in to or registering a new account.", - "active-rules": "Active Rules", + "active-rules": "Aktif Kurallar", "validate": "Validate Blacklist", "apply": "Apply Blacklist", "hints": "Syntax Hints", diff --git a/public/language/tr/admin/manage/tags.json b/public/language/tr/admin/manage/tags.json index 1018b8a1ac..bcde2fcadb 100644 --- a/public/language/tr/admin/manage/tags.json +++ b/public/language/tr/admin/manage/tags.json @@ -1,11 +1,11 @@ { - "none": "Your forum does not have any topics with tags yet.", - "bg-color": "Background Colour", + "none": "Forumda henüz etiketli herhangi bir başlık yok.", + "bg-color": "Arkaplan Rengi", "text-color": "Yazı Rengi", "create-modify": "Create & Modify Tags", "description": "Select tags via clicking and/or dragging, use shift to select multiple.", - "create": "Create Tag", - "modify": "Modify Tags", + "create": "Etiket Oluştur", + "modify": "Etiketleri Düzenle", "delete": "Delete Selected Tags", "search": "Search for tags...", "settings": "Click here to visit the tag settings page.", diff --git a/public/language/tr/admin/menu.json b/public/language/tr/admin/menu.json index 75fd1c6607..d61ad44718 100644 --- a/public/language/tr/admin/menu.json +++ b/public/language/tr/admin/menu.json @@ -1,16 +1,16 @@ { "section-general": "Genel", "general/dashboard": "Pano", - "general/homepage": "Home Page", + "general/homepage": "Ana Sayfa", "general/navigation": "Navigation", "general/languages": "Diller", - "general/sounds": "Sounds", - "general/social": "Social", + "general/sounds": "Sesler", + "general/social": "Sosyal", - "section-manage": "Manage", + "section-manage": "Yönet", "manage/categories": "Categories", - "manage/tags": "Tags", - "manage/users": "Users", + "manage/tags": "Etiketler", + "manage/users": "Kullanıcılar", "manage/registration": "Registration Queue", "manage/groups": "Groups", "manage/flags": "Flags", @@ -23,7 +23,7 @@ "settings/user": "User", "settings/group": "Group", "settings/guest": "Guests", - "settings/uploads": "Uploads", + "settings/uploads": "Yüklemeler", "settings/post": "Post", "settings/chat": "Chat", "settings/pagination": "Pagination", diff --git a/public/language/tr/admin/settings/advanced.json b/public/language/tr/admin/settings/advanced.json index b023528d04..ed8438eb34 100644 --- a/public/language/tr/admin/settings/advanced.json +++ b/public/language/tr/admin/settings/advanced.json @@ -1,7 +1,7 @@ { - "maintenance-mode": "Maintenance Mode", + "maintenance-mode": "Bakım Modu", "maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.", - "maintenance-mode.message": "Maintenance Message", + "maintenance-mode.message": "Bakım Mesajı", "headers": "Headers", "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame", "headers.powered-by": "Customise the \"Powered By\" header sent by NodeBB", diff --git a/public/language/tr/admin/settings/cookies.json b/public/language/tr/admin/settings/cookies.json index 98eb784244..4bbec44d6c 100644 --- a/public/language/tr/admin/settings/cookies.json +++ b/public/language/tr/admin/settings/cookies.json @@ -1,11 +1,11 @@ { - "eu-consent": "EU Consent", + "eu-consent": "AB Onayı", "consent.enabled": "Aktif", "consent.message": "Notification message", "consent.acceptance": "Acceptance message", "consent.link-text": "Policy Link Text", "consent.blank-localised-default": "Leave blank to use NodeBB localised defaults", - "settings": "Settings", + "settings": "Ayarlar", "cookie-domain": "Session cookie domain", "blank-default": "Leave blank for default" } \ No newline at end of file diff --git a/public/language/tr/admin/settings/email.json b/public/language/tr/admin/settings/email.json index 5ecd8342e9..1248b4e21d 100644 --- a/public/language/tr/admin/settings/email.json +++ b/public/language/tr/admin/settings/email.json @@ -1,6 +1,6 @@ { "email-settings": "Mail Ayarları", - "address": "Email Address", + "address": "Email Adresi", "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", @@ -8,7 +8,7 @@ "gmail-routing-help1": "There have been reports of Gmail Routing not working on accounts with heightened security. In those scenarios, you will have to configure your GMail account to allow less secure apps.", "gmail-routing-help2": "For more information about this workaround, please consult this NodeMailer article on the issue. An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. Browse available plugins here.", "gmail-transport": "Route emails through a Gmail/Google Apps account", - "gmail-transport.username": "Username", + "gmail-transport.username": "Kullanıcı Adı", "gmail-transport.username-help": "Enter the full email address here, especially if you are using a Google Apps managed domain.", "gmail-transport.password": "Password", "template": "Edit Email Template", diff --git a/public/language/tr/admin/settings/general.json b/public/language/tr/admin/settings/general.json index 598e3c4a0e..fd20d55be7 100644 --- a/public/language/tr/admin/settings/general.json +++ b/public/language/tr/admin/settings/general.json @@ -1,29 +1,29 @@ { "site-settings": "Site Ayarları", "title": "Site Başlığı", - "title.name": "Your Community Name", + "title.name": "Topluluk İsmi", "title.show-in-header": "Show Site Title in Header", "browser-title": "Browser Title", "browser-title-help": "If no browser title is specified, the site title will be used", "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Site Description", + "description": "Site Açıklaması", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo": "Site Logo", "logo.image": "Image", "logo.image-placeholder": "Path to a logo to display on forum header", - "logo.upload": "Upload", + "logo.upload": "Yükle", "logo.url": "URL", "logo.url-placeholder": "The URL of the site logo", "logo.url-help": "When the logo is clicked, send users to this address. If left blank, user will be sent to the forum index.", "logo.alt-text": "Alt Text", "log.alt-text-placeholder": "Alternative text for accessibility", "favicon": "Favicon", - "favicon.upload": "Upload", + "favicon.upload": "Yükle", "touch-icon": "Homescreen/Touch Icon", - "touch-icon.upload": "Upload", + "touch-icon.upload": "Yükle", "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" diff --git a/public/language/tr/admin/settings/guest.json b/public/language/tr/admin/settings/guest.json index 6b2ac2c8b2..51a686af08 100644 --- a/public/language/tr/admin/settings/guest.json +++ b/public/language/tr/admin/settings/guest.json @@ -1,5 +1,5 @@ { - "handles": "Guest Handles", + "handles": "Ziyaretçi Kolları", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", "privileges": "Guest Privileges", diff --git a/public/language/tr/admin/settings/notifications.json b/public/language/tr/admin/settings/notifications.json index 55bd1e74f1..578a947cf0 100644 --- a/public/language/tr/admin/settings/notifications.json +++ b/public/language/tr/admin/settings/notifications.json @@ -1,5 +1,5 @@ { "notifications": "Bildiriler", - "welcome-notification": "Welcome Notification", - "welcome-notification-link": "Welcome Notification Link" + "welcome-notification": "Hoşgeldin Bildirimi", + "welcome-notification-link": "Hoşgeldin Bildiri Bağlantısı" } \ No newline at end of file diff --git a/public/language/tr/admin/settings/pagination.json b/public/language/tr/admin/settings/pagination.json index 27d71b4de5..ef5550faaf 100644 --- a/public/language/tr/admin/settings/pagination.json +++ b/public/language/tr/admin/settings/pagination.json @@ -1,7 +1,7 @@ { - "pagination": "Pagination Settings", + "pagination": "Sayfalama Ayarları", "enable": "Paginate topics and posts instead of using infinite scroll.", - "topics": "Topic Pagination", + "topics": "Başlık Sayfalama", "posts-per-page": "Posts per Page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", diff --git a/public/language/tr/admin/settings/post.json b/public/language/tr/admin/settings/post.json index f293e554d9..71d021e580 100644 --- a/public/language/tr/admin/settings/post.json +++ b/public/language/tr/admin/settings/post.json @@ -1,6 +1,6 @@ { - "sorting": "Post Sorting", - "sorting.post-default": "Default Post Sorting", + "sorting": "İleti Sıralama", + "sorting.post-default": "Varsayılan İleti Sıralama", "sorting.oldest-to-newest": "Oldest to Newest", "sorting.newest-to-oldest": "Newest to Oldest", "sorting.most-votes": "Most Votes", diff --git a/public/language/tr/admin/settings/reputation.json b/public/language/tr/admin/settings/reputation.json index 11d6184721..a6aa162351 100644 --- a/public/language/tr/admin/settings/reputation.json +++ b/public/language/tr/admin/settings/reputation.json @@ -1,7 +1,7 @@ { - "reputation": "Reputation Settings", + "reputation": "Oylama Ayarları", "disable": "Disable Reputation System", - "disable-down-voting": "Disable Down Voting", + "disable-down-voting": "Eksi oyu devredışı bırak", "thresholds": "Activity Thresholds", "min-rep-downvote": "Minimum reputation to downvote posts", "min-rep-flag": "Minimum reputation to flag posts" diff --git a/public/language/tr/admin/settings/sockets.json b/public/language/tr/admin/settings/sockets.json index 9f44157694..38817dfed4 100644 --- a/public/language/tr/admin/settings/sockets.json +++ b/public/language/tr/admin/settings/sockets.json @@ -1,5 +1,5 @@ { - "reconnection": "Reconnection Settings", + "reconnection": "Tekrar Bağlantı Ayarları", "max-attempts": "Max Reconnection Attempts", "default-placeholder": "Varsayılan: %1", "delay": "Reconnection Delay" diff --git a/public/language/tr/admin/settings/tags.json b/public/language/tr/admin/settings/tags.json index f02508d6c3..ae75c4ff29 100644 --- a/public/language/tr/admin/settings/tags.json +++ b/public/language/tr/admin/settings/tags.json @@ -5,7 +5,7 @@ "min-length": "Minimum Tag Length", "max-length": "Maximum Tag Length", "goto-manage": "Click here to visit the tag management page.", - "privacy": "Privacy", + "privacy": "Gizlilik", "list-private": "Make the tags list private", "related-topics": "Related Topics", "max-related-topics": "Maximum related topics to display (if supported by theme)" diff --git a/public/language/tr/admin/settings/uploads.json b/public/language/tr/admin/settings/uploads.json index 8a56c85663..5385404ac6 100644 --- a/public/language/tr/admin/settings/uploads.json +++ b/public/language/tr/admin/settings/uploads.json @@ -1,10 +1,10 @@ { - "posts": "Posts", + "posts": "İletiler", "allow-files": "Allow users to upload regular files", "private": "Make uploaded files private", "max-image-width": "Resize images down to specified width (in pixels)", "max-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)", - "max-file-size": "Maximum File Size (in KiB)", + "max-file-size": "Maksimum Dosya Boyutu (KiB)", "max-file-size-help": "(in kilobytes, default: 2048 KiB)", "allow-topic-thumbnails": "Allow users to upload topic thumbnails", "topic-thumb-size": "Topic Thumb Size", @@ -14,7 +14,7 @@ "allow-profile-image-uploads": "Allow users to upload profile images", "convert-profile-image-png": "Convert profile image uploads to PNG", "default-avatar": "Custom Default Avatar", - "upload": "Upload", + "upload": "Yükle", "profile-image-dimension": "Profile Image Dimension", "profile-image-dimension-help": "(in pixels, default: 128 pixels)", "max-profile-image-size": "Maximum Profile Image File Size", diff --git a/public/language/tr/admin/settings/user.json b/public/language/tr/admin/settings/user.json index 9ba81c5f17..258f7f4121 100644 --- a/public/language/tr/admin/settings/user.json +++ b/public/language/tr/admin/settings/user.json @@ -1,14 +1,14 @@ { - "authentication": "Authentication", + "authentication": "Kimlik Doğrulama", "allow-local-login": "Allow local login", "require-email-confirmation": "Require Email Confirmation", "email-confirm-interval": "User may not resend a confirmation email until", "email-confirm-email2": "minutes have elapsed", "allow-login-with": "Allow login with", - "allow-login-with.username-email": "Username or Email", + "allow-login-with.username-email": "Kullanıcı adı veya Email", "allow-login-with.username": "Sadece kullanıcı adı", "allow-login-with.email": "Email Only", - "account-settings": "Account Settings", + "account-settings": "Hesap Ayarları", "disable-username-changes": "Disable username changes", "disable-email-changes": "Disable email changes", "disable-password-changes": "Disable password changes", diff --git a/public/language/tr/admin/settings/web-crawler.json b/public/language/tr/admin/settings/web-crawler.json index 2e0d31d12b..03b4160d96 100644 --- a/public/language/tr/admin/settings/web-crawler.json +++ b/public/language/tr/admin/settings/web-crawler.json @@ -1,5 +1,5 @@ { - "crawlability-settings": "Crawlability Settings", + "crawlability-settings": "Taranabilirlik Ayarları", "robots-txt": "Custom Robots.txt Leave blank for default", "sitemap-feed-settings": "Sitemap & Feed Settings", "disable-rss-feeds": "Disable RSS Feeds", diff --git a/public/language/tr/global.json b/public/language/tr/global.json index 1c05b193c3..b1b6a2f06e 100644 --- a/public/language/tr/global.json +++ b/public/language/tr/global.json @@ -103,5 +103,5 @@ "cookies.message": "Bu web sitesi en iyi deneyimi elde etmeniz amacıyla çerezlerden yararlanır.", "cookies.accept": "Anladım!", "cookies.learn_more": "Daha Fazla", - "edited": "Edited" + "edited": "Düzenlendi" } \ No newline at end of file diff --git a/public/language/tr/groups.json b/public/language/tr/groups.json index 823a8079a4..687f22c071 100644 --- a/public/language/tr/groups.json +++ b/public/language/tr/groups.json @@ -53,5 +53,5 @@ "upload-group-cover": "Grup kapağı yükle", "bulk-invite-instructions": "Bu gruba davet etmek için virgülle ayrılmış adlarının bir listesini girin", "bulk-invite": "Toplu Davet", - "remove_group_cover_confirm": "Are you sure you want to remove the cover picture?" + "remove_group_cover_confirm": "Kapak görselini silmek istediğinden emin misin?" } \ No newline at end of file diff --git a/public/language/tr/modules.json b/public/language/tr/modules.json index 6428ac460a..e0b251b7bc 100644 --- a/public/language/tr/modules.json +++ b/public/language/tr/modules.json @@ -13,7 +13,7 @@ "chat.contacts": "Kontaklar", "chat.message-history": "Mesaj Geçmişi", "chat.pop-out": "Sohbeti Pencereye Çevir", - "chat.minimize": "Minimize", + "chat.minimize": "Küçült", "chat.maximize": "Büyüt", "chat.seven_days": "7 Gün", "chat.thirty_days": "30 Gün", diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 2fba8ad776..2b808ba266 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -63,7 +63,7 @@ "upload_a_picture": "Bir Resim Yükle", "remove_uploaded_picture": "Yüklenmiş fotoğrafı kaldır", "upload_cover_picture": "Kapak fotoğrafı yükle", - "remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?", + "remove_cover_picture_confirm": "Kapak görselini silmek istediğinden emin misin?", "settings": "Ayarlar", "show_email": "E-postamı göster", "show_fullname": "Tam ismimi göster", diff --git a/public/language/zh-CN/admin/admin.json b/public/language/zh-CN/admin/admin.json index c86035bba4..39e4ef3284 100644 --- a/public/language/zh-CN/admin/admin.json +++ b/public/language/zh-CN/admin/admin.json @@ -1,7 +1,7 @@ { - "alert.confirm-reload": "确认重启NodeBB?", - "alert.confirm-restart": "确认重启NodeBB?", + "alert.confirm-reload": "确定要重载NodeBB吗?", + "alert.confirm-restart": "确定要重启NodeBB吗?", - "acp-title": "%1 | NodeBB 管理员控制面板", + "acp-title": "%1 | NodeBB 控制面板", "settings-header-contents": "内容" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/advanced/cache.json b/public/language/zh-CN/admin/advanced/cache.json index e9808184c1..848e9283bd 100644 --- a/public/language/zh-CN/admin/advanced/cache.json +++ b/public/language/zh-CN/admin/advanced/cache.json @@ -1,8 +1,8 @@ { - "post-cache": "发帖", + "post-cache": "帖子缓存", "posts-in-cache": "缓存中的帖子", "average-post-size": "平均帖子长度", - "length-to-max": "长度/最大值", + "length-to-max": "长度 / 最大值", "percent-full": "%1% 容量", "post-cache-size": "帖子缓存大小", "items-in-cache": "缓存中的条目数量", diff --git a/public/language/zh-CN/admin/appearance/customise.json b/public/language/zh-CN/admin/appearance/customise.json index ba26305693..e609257a2f 100644 --- a/public/language/zh-CN/admin/appearance/customise.json +++ b/public/language/zh-CN/admin/appearance/customise.json @@ -1,9 +1,9 @@ { "custom-css": "自定义 CSS", - "custom-css.description": "在这里输入自定义CSS变量声明,它们将被添加在样式中。", - "custom-css.enable": "启用自定义CSS", + "custom-css.description": "在这里输入自定义 CSS 变量声明,它们将被添加在样式中。", + "custom-css.enable": "启用自定义 CSS", - "custom-header": "自定义header", - "custom-header.description": "请输入自定义的HTML代码 (如JavaScript,Meta Tags等),这些代码会被添加到论坛的<head>部分。", - "custom-header.enable": "启用自定义header" + "custom-header": "自定义 Header", + "custom-header.description": "请输入自定义的 HTML 代码 (如 JavaScript,Meta Tags 等),这些代码会被添加到论坛的 <head> 部分。", + "custom-header.enable": "启用自定义 Header" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/appearance/themes.json b/public/language/zh-CN/admin/appearance/themes.json index 2343432abe..acaecf2a93 100644 --- a/public/language/zh-CN/admin/appearance/themes.json +++ b/public/language/zh-CN/admin/appearance/themes.json @@ -4,8 +4,8 @@ "select-theme": "选择主题", "current-theme": "当前主题", "no-themes": "未发现已安装的主题", - "revert-confirm": "确认恢复到NodeBB默认主题?", + "revert-confirm": "确认恢复到 NodeBB 默认主题?", "theme-changed": "主题已更改", - "revert-success": "已成功恢复到NodeBB默认主题。", - "restart-to-activate": "请重启NodeBB来完全激活该主题" + "revert-success": "已成功恢复到 NodeBB 默认主题。", + "restart-to-activate": "请重启 NodeBB 来完全激活该主题" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/development/logger.json b/public/language/zh-CN/admin/development/logger.json index df0183379b..b7e6b36f17 100644 --- a/public/language/zh-CN/admin/development/logger.json +++ b/public/language/zh-CN/admin/development/logger.json @@ -1,9 +1,9 @@ { "logger-settings": "日志记录器设置", - "description": "启用此选项后,日志会在你的终端里显示。如果你著名了文件路径,日志会被保存到该文件中。HTTP日志可以帮助你收集论坛被谁,何时,以及什么内容被访问等统计信息。在此基础上,我们还提供socket.io事件日志。结合socket.io日志和redis-cli监控器,学习NodeBB的内部构造会更加方便。", + "description": "启用此选项后,日志会在你的终端里显示。如果你注明了文件路径,日志会被保存到该文件中。HTTP 日志可以帮助你收集论坛被谁,何时,以及什么内容被访问等统计信息。在此基础上,我们还提供 socket.io 事件日志。结合 socket.io 日志和 redis-cli 监控器,学习 NodeBB 的内部构造会更加方便。", "explanation": "勾选或反勾选日志设置项即可启用或禁用相应设置。无需重启。", - "enable-http": "启用HTTP日志", - "enable-socket": "启用socket.io事件日志", + "enable-http": "启用 HTTP 日志", + "enable-socket": "启用 socket.io 事件日志", "file-path": "日志文件路径", "file-path-placeholder": "如/path/to/log/file.log ::: 如想在终端中显示日志请留空此项", diff --git a/public/language/zh-CN/admin/extend/plugins.json b/public/language/zh-CN/admin/extend/plugins.json index 8217042e1e..06edee6076 100644 --- a/public/language/zh-CN/admin/extend/plugins.json +++ b/public/language/zh-CN/admin/extend/plugins.json @@ -12,15 +12,15 @@ "reorder-plugins": "重新排序插件", "order-active": "排序生效插件", "dev-interested": "有兴趣为NodeBB开发插件?", - "docs-info": "浏览编写插件相关的文档 NodeBB 文档页面。", + "docs-info": "浏览编写插件相关的文档:NodeBB 文档页面。", - "order.description": "部分插件需要在其它插件之后启用才能完美运作。", + "order.description": "部分插件需要在其它插件启用之后才能完美运作。", "order.explanation": "插件将按照以下顺序载入,从上至下。", "plugin-item.themes": "主题", "plugin-item.deactivate": "停用", "plugin-item.activate": "启用", - "plugin-item.install": "Install", + "plugin-item.install": "安装", "plugin-item.uninstall": "卸载", "plugin-item.settings": "设置", "plugin-item.installed": "已安装", @@ -35,13 +35,13 @@ "alert.upgraded": "插件已升级", "alert.installed": "插件已安装", "alert.uninstalled": "插件已卸载", - "alert.activate-success": "请重启NodeBB来完全激活此插件", + "alert.activate-success": "请重启 NodeBB 来完全激活此插件", "alert.deactivate-success": "插件停用成功", - "alert.upgrade-success": "请重新载入NodeBB来完成插件升级", + "alert.upgrade-success": "请重新载入 NodeBB 来完成插件升级", "alert.install-success": "插件安装成功,请启用插件。", "alert.uninstall-success": "插件已成功被停用且卸载。", "alert.suggest-error": "

NodeBB 联系不到包管理器, 继续安装最新版本?

服务器返回 (%1): %2
", "alert.package-manager-unreachable": "

NodeBB 联系不到包管理器,暂时不建议升级。

", - "alert.incompatible": "

NodeBB版本(v%1) 只支持到此插件的v%2版本。如需要此插件更加新的版本请先升级NodeBB。

", - "alert.possibly-incompatible": "

未找到兼容性信息

此插件未注明对应的NodeBB版本。可能会产生兼容问题,导致NodeBB无法正常启动。

NodeBB无法正常启动时请运行以下命令:

$ ./nodebb reset plugin=\"%1\"

是否继续安装此插件的最新版本?

" + "alert.incompatible": "

NodeBB 版本(v%1) 只支持到此插件的v%2版本。如需要此插件更加新的版本请先升级 NodeBB。

", + "alert.possibly-incompatible": "

未找到兼容性信息

此插件未注明对应的 NodeBB 版本。可能会产生兼容问题,导致 NodeBB 无法正常启动。

NodeBB 无法正常启动时请运行以下命令:

$ ./nodebb reset plugin=\"%1\"

是否继续安装此插件的最新版本?

" } diff --git a/public/language/zh-CN/admin/extend/rewards.json b/public/language/zh-CN/admin/extend/rewards.json index 174fcfe6cc..12a4336ef0 100644 --- a/public/language/zh-CN/admin/extend/rewards.json +++ b/public/language/zh-CN/admin/extend/rewards.json @@ -12,6 +12,6 @@ "new-reward": "新奖励", "alert.delete-success": "已成功删除奖励", - "alert.no-inputs-found": "非法奖励-输入为空!", + "alert.no-inputs-found": "非法奖励 - 输入为空!", "alert.save-success": "已成功保存奖励" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/extend/widgets.json b/public/language/zh-CN/admin/extend/widgets.json index f5cfb8e36f..3c3d76eff3 100644 --- a/public/language/zh-CN/admin/extend/widgets.json +++ b/public/language/zh-CN/admin/extend/widgets.json @@ -5,8 +5,8 @@ "containers.available": "可用的容器", "containers.explanation": "拖放到任意生效中的窗口部件上", "containers.none": "无", - "container.well": "井", - "container.jumbotron": "大屏幕", + "container.well": "Well", + "container.jumbotron": "超大屏幕", "container.panel": "面板", "container.panel-header": "面板标题", "container.panel-body": "面板内容", diff --git a/public/language/zh-CN/admin/general/dashboard.json b/public/language/zh-CN/admin/general/dashboard.json index 51fc41bfc0..dd4035371e 100644 --- a/public/language/zh-CN/admin/general/dashboard.json +++ b/public/language/zh-CN/admin/general/dashboard.json @@ -1,10 +1,10 @@ { "forum-traffic": "论坛流量", - "page-views": "页面察看", + "page-views": "PV 数量", "unique-visitors": "单一访客", - "page-views-last-month": "上个月页面察看", - "page-views-this-month": "本月页面察看", - "page-views-last-day": "过去24小时页面察看", + "page-views-last-month": "上个月 PV 数量", + "page-views-this-month": "本月 PV 数量", + "page-views-last-day": "过去24小时 PV 数量", "stats.day": "日", "stats.week": "周", @@ -12,21 +12,21 @@ "stats.all": "总计", "updates": "更新", - "running-version": "你正在使用NodeBB v%1.", - "keep-updated": "请确保NodeBB的版本保持最新以便获得最新的安全补丁和bug修复。", + "running-version": "你正在使用 NodeBB v%1 .", + "keep-updated": "请确保您已及时更新 NodeBB 以获得最新的安全补丁与 Bug 修复。", "up-to-date": "

正在使用 最新版本

", "upgrade-available": "

新的版本已经发布 (v%1). 请考虑更新你的 NodeBB

", "prerelease-upgrade-available": "

你正在使用NodeBB过期的测试版。新的版本已经发布 (v%1). 请考虑更新你的 NodeBB

", - "prerelease-warning": "

正在使用测试版 NodeBB。可能会出现意外的bug。

", + "prerelease-warning": "

正在使用测试版 NodeBB。可能会出现意外的 Bug。

", - "notices": "告知", + "notices": "提醒", "control-panel": "系统控制", - "reload": "重新载入", + "reload": "重载", "restart": "重启", - "restart-warning": "重新载入或重启NodeBB会丢弃数秒内所有的连接。", + "restart-warning": "重新载入或重启 NodeBB 会丢弃数秒内所有的连接。", "maintenance-mode": "维护模式", - "maintenance-mode-title": "点击此处设置NodeBB的维护模式", + "maintenance-mode-title": "点击此处设置 NodeBB 的维护模式", "realtime-chart-updates": "实时图表更新", "active-users": "活跃用户", @@ -35,7 +35,7 @@ "active-users.total": "全部", "active-users.connections": "连接", - "anonymous-registered-users": "匿名 vs 注册用户", + "anonymous-registered-users": "匿名 vs 注册用户", "anonymous": "匿名", "registered": "已注册", @@ -46,7 +46,7 @@ "recent": "最近", "unread": "未读", - "high-presence-topics": "高频话题", + "high-presence-topics": "热门话题", "graphs.page-views": "页面察看", "graphs.unique-visitors": "单一访客", diff --git a/public/language/zh-CN/admin/general/homepage.json b/public/language/zh-CN/admin/general/homepage.json index bb8cc46d39..03daa992af 100644 --- a/public/language/zh-CN/admin/general/homepage.json +++ b/public/language/zh-CN/admin/general/homepage.json @@ -1,6 +1,6 @@ { "home-page": "主页", - "description": "请选择用户到达根URL时所显示的页面。", + "description": "请选择用户到达根 URL 时所显示的页面。", "home-page-route": "主页路由", "custom-route": "自定义路由", "allow-user-home-pages": "允许用户主页" diff --git a/public/language/zh-CN/admin/general/languages.json b/public/language/zh-CN/admin/general/languages.json index d386c06090..f7cff12294 100644 --- a/public/language/zh-CN/admin/general/languages.json +++ b/public/language/zh-CN/admin/general/languages.json @@ -1,5 +1,5 @@ { "language-settings": "语言设置", - "description": "默认语言会决定所有访客的语言设定。
单一用户可以各自在帐户设置中覆盖此项设定。", + "description": "默认语言会决定所有用户的语言设定。
单一用户可以各自在帐户设置中覆盖此项设定。", "default-language": "默认语言" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/general/navigation.json b/public/language/zh-CN/admin/general/navigation.json index c4ba0d09ac..408f52386f 100644 --- a/public/language/zh-CN/admin/general/navigation.json +++ b/public/language/zh-CN/admin/general/navigation.json @@ -1,27 +1,27 @@ { - "icon": "Icon:", - "change-icon": "change", - "route": "Route:", - "tooltip": "Tooltip:", - "text": "Text:", - "text-class": "Text Class: optional", - "id": "ID: optional", + "icon": "图标:", + "change-icon": "更改", + "route": "路由:", + "tooltip": "提示:", + "text": "文本:", + "text-class": "文本分类“可选", + "id": "ID:可选", - "properties": "Properties:", - "only-admins": "Only display to Admins", - "only-global-mods-and-admins": "Only display to Global Moderators and Admins", - "only-logged-in": "Only display to logged in users", - "open-new-window": "Open in a new window", + "properties": "属性:", + "only-admins": "仅向管理员展示", + "only-global-mods-and-admins": "仅向全局版主及管理员展示", + "only-logged-in": "仅向已登录用户展示", + "open-new-window": "在新窗口中打开", - "installed-plugins-required": "Installed Plugins Required:", - "search-plugin": "Search plugin", + "installed-plugins-required": "需要已安装的插件:", + "search-plugin": "搜索插件", - "btn.delete": "Delete", - "btn.disable": "Disable", - "btn.enable": "Enable", + "btn.delete": "删除", + "btn.disable": "关闭", + "btn.enable": "激活", - "available-menu-items": "Available Menu Items", - "custom-route": "Custom Route", - "core": "core", - "plugin": "plugin" + "available-menu-items": "可用的菜单项目", + "custom-route": "自定义路由", + "core": "核心", + "plugin": "插件" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/general/social.json b/public/language/zh-CN/admin/general/social.json index 23aedfcfaa..0882ee95e9 100644 --- a/public/language/zh-CN/admin/general/social.json +++ b/public/language/zh-CN/admin/general/social.json @@ -1,5 +1,5 @@ { - "post-sharing": "Post Sharing", - "info-plugins-additional": "Plugins can add additional networks for sharing posts.", - "save-success": "Successfully saved Post Sharing Networks!" + "post-sharing": "帖子分享", + "info-plugins-additional": "插件可以增加可选的用于分享帖子的网络。", + "save-success": "已成功保存帖子分享网络。" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/general/sounds.json b/public/language/zh-CN/admin/general/sounds.json index 95ccbde0f1..d330e309ac 100644 --- a/public/language/zh-CN/admin/general/sounds.json +++ b/public/language/zh-CN/admin/general/sounds.json @@ -1,9 +1,9 @@ { - "notifications": "Notifications", - "chat-messages": "Chat Messages", - "play-sound": "Play", - "incoming-message": "Incoming Message", - "outgoing-message": "Outgoing Message", - "upload-new-sound": "Upload New Sound", - "saved": "Settings Saved" + "notifications": "通知", + "chat-messages": "聊天信息", + "play-sound": "播放", + "incoming-message": "收到的消息", + "outgoing-message": "发出的消息", + "upload-new-sound": "上传新的声音", + "saved": "设置已保存" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/manage/categories.json b/public/language/zh-CN/admin/manage/categories.json index 7e2a5ce12e..4da113a71c 100644 --- a/public/language/zh-CN/admin/manage/categories.json +++ b/public/language/zh-CN/admin/manage/categories.json @@ -1,68 +1,68 @@ { - "settings": "Category Settings", - "privileges": "Privileges", + "settings": "版块设置", + "privileges": "权限", - "name": "Category Name", - "description": "Category Description", - "bg-color": "Background Colour", - "text-color": "Text Colour", - "bg-image-size": "Background Image Size", - "custom-class": "Custom Class", - "num-recent-replies": "# of Recent Replies", - "ext-link": "External Link", - "upload-image": "Upload Image", - "delete-image": "Remove", - "category-image": "Category Image", - "parent-category": "Parent Category", - "optional-parent-category": "(Optional) Parent Category", - "parent-category-none": "(None)", - "copy-settings": "Copy Settings From", - "optional-clone-settings": "(Optional) Clone Settings From Category", - "purge": "Purge Category", + "name": "版块名", + "description": "版块描述", + "bg-color": "背景颜色", + "text-color": "文字颜色", + "bg-image-size": "背景图片大小", + "custom-class": "自定义分类", + "num-recent-replies": "最近回复数", + "ext-link": "外部链接", + "upload-image": "上传图片", + "delete-image": "移除", + "category-image": "板块图片", + "parent-category": "父板块", + "optional-parent-category": "(可选)父板块", + "parent-category-none": "(无)", + "copy-settings": "复制设置窗体", + "optional-clone-settings": "(可选) 从板块复制设置", + "purge": "删除板块", - "enable": "Enable", - "disable": "Disable", - "edit": "Edit", + "enable": "启用", + "disable": "禁用", + "edit": "编辑", - "select-category": "Select Category", - "set-parent-category": "Set Parent Category", + "select-category": "选择板块", + "set-parent-category": "设置父板块", - "privileges.description": "You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or a per-group basis. You can add a new user to this table by searching for them in the form below.", - "privileges.warning": "Note: Privilege settings take effect immediately. It is not necessary to save the category after adjusting these settings.", - "privileges.section-viewing": "Viewing Privileges", - "privileges.section-posting": "Posting Privileges", - "privileges.section-moderation": "Moderation Privileges", - "privileges.section-user": "User", - "privileges.search-user": "Add User", - "privileges.no-users": "No user-specific privileges in this category.", - "privileges.section-group": "Group", - "privileges.group-private": "This group is private", - "privileges.search-group": "Add Group", - "privileges.copy-to-children": "Copy to Children", - "privileges.copy-from-category": "Copy from Category", - "privileges.inherit": "If the registered-users group is granted a specific privilege, all other groups receive an implicit privilege, even if they are not explicitly defined/checked. This implicit privilege is shown to you because all users are part of the registered-users user group, and so, privileges for additional groups need not be explicitly granted.", + "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.copy-to-children": "复制到子版块", + "privileges.copy-from-category": "从板块复制", + "privileges.inherit": "如果 registered-users 组被授予特定权限,所有其他组都会收到隐式权限,即使它们未被明确定义/检查。 将显示此隐式权限,因为所有用户都是 registered-users 用户组的一部分,因此无需显式授予其他组的权限。", - "analytics.back": "Back to Categories List", - "analytics.title": "Analytics for \"%1\" category", - "analytics.pageviews-hourly": "Figure 1 – Hourly page views for this category", - "analytics.pageviews-daily": "Figure 2 – Daily page views for this category", - "analytics.topics-daily": "Figure 3 – Daily topics created in this category", - "analytics.posts-daily": "Figure 4 – Daily posts made in this category", + "analytics.back": "返回板块列表", + "analytics.title": "“%1”板块的统计", + "analytics.pageviews-hourly": "图1 – 此板块的每小时页面浏览量", + "analytics.pageviews-daily": "图2 – 此板块的每日页面浏览量", + "analytics.topics-daily": "图3 – 每日在此板块中创建的主题", + "analytics.posts-daily": "图4 – 每日在此板块中每日发布的帖子", - "alert.created": "Created", - "alert.create-success": "Category successfully created!", - "alert.none-active": "You have no active categories.", - "alert.create": "Create a Category", - "alert.confirm-moderate": "Are you sure you wish to grant the moderation privilege to this user group? This group is public, and any users can join at will.", - "alert.confirm-purge": "

Do you really want to purge this category \"%1\"?

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

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

", - "alert.purge-success": "Category purged!", - "alert.copy-success": "Settings Copied!", - "alert.set-parent-category": "Set Parent Category", - "alert.updated": "Updated Categories", - "alert.updated-success": "Category IDs %1 successfully updated.", - "alert.upload-image": "Upload category image", - "alert.find-user": "Find a User", - "alert.user-search": "Search for a user here...", - "alert.find-group": "Find a Group", - "alert.group-search": "Search for a group here..." + "alert.created": "创建", + "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.find-user": "查找用户", + "alert.user-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 bfc488a409..7c5a744488 100644 --- a/public/language/zh-CN/admin/manage/flags.json +++ b/public/language/zh-CN/admin/manage/flags.json @@ -1,19 +1,19 @@ { - "daily": "Daily flags", - "by-user": "Flags by user", - "by-user-search": "Search flagged posts by username", - "category": "Category", - "sort-by": "Sort By", - "sort-by.most-flags": "Most Flags", - "sort-by.most-recent": "Most Recent", - "search": "Search", - "dismiss-all": "Dismiss All", - "none-flagged": "No flagged posts!", - "posted-in": "Posted in %1", - "read-more": "Read More", - "flagged-x-times": "This post has been flagged %1 time(s):", - "dismiss": "Dismiss this Flag", - "delete-post": "Delete the Post", + "daily": "日举报", + "by-user": "用户举报", + "by-user-search": "根据用户名搜索被举报帖子", + "category": "版块", + "sort-by": "排序", + "sort-by.most-flags": "最多举报", + "sort-by.most-recent": "最近", + "search": "搜索", + "dismiss-all": "全部忽略", + "none-flagged": "没有被举报的帖子!", + "posted-in": "发表于 %1", + "read-more": "阅读更多", + "flagged-x-times": "该贴已被举报 %1 次:", + "dismiss": "忽略该举报", + "delete-post": "删除该贴", - "alerts.confirm-delete-post": "Do you really want to delete this 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 b5e526aacf..f2b90b98a0 100644 --- a/public/language/zh-CN/admin/manage/groups.json +++ b/public/language/zh-CN/admin/manage/groups.json @@ -1,34 +1,34 @@ { - "name": "Group Name", - "description": "Group Description", - "system": "System Group", - "edit": "Edit", - "search-placeholder": "Search", - "create": "Create Group", - "description-placeholder": "A short description about your group", - "create-button": "Create", + "name": "用户组名", + "description": "用户组描述", + "system": "系统用户组", + "edit": "编辑", + "search-placeholder": "索索", + "create": "创建用户组", + "description-placeholder": "一个关于你的用户组的简短描述", + "create-button": "创建", - "alerts.create-failure": "Uh-Oh

There was a problem creating your group. Please try again later!

", - "alerts.confirm-delete": "Are you sure you wish to delete this group?", + "alerts.create-failure": "哦不!

创建您的用户组时出现问题。 请稍后再试!

", + "alerts.confirm-delete": "确认要删除这个用户组么?", - "edit.name": "Name", - "edit.description": "Description", - "edit.user-title": "Title of Members", - "edit.icon": "Group Icon", - "edit.label-color": "Group Label Color", - "edit.show-badge": "Show Badge", - "edit.private-details": "If enabled, joining of groups requires approval from a group owner.", - "edit.private-override": "Warning: Private groups is disabled at system level, which overrides this option.", - "edit.disable-requests": "Disable join requests", - "edit.hidden": "Hidden", - "edit.hidden-details": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", - "edit.add-user": "Add User to Group", - "edit.add-user-search": "Search Users", - "edit.members": "Member List", - "control-panel": "Groups Control Panel", - "revert": "Revert", + "edit.name": "名字", + "edit.description": "描述", + "edit.user-title": "成员标题", + "edit.icon": "用户组标志", + "edit.label-color": "群组标签颜色", + "edit.show-badge": "显示徽章", + "edit.private-details": "启用此选项后,加入用户组的请求将需要组长审批。", + "edit.private-override": "警告:系统禁用了私有用户组,优先于该选项。", + "edit.disable-requests": "禁止加入请求", + "edit.hidden": "隐藏", + "edit.hidden-details": "启用此选项后,此用户组将不在用户组列表展现,并且用户只能被手动邀请加入", + "edit.add-user": "向此小组添加成员", + "edit.add-user-search": "搜索用户", + "edit.members": "成员列表", + "control-panel": "小组控制面板", + "revert": "重置", - "edit.no-users-found": "No Users Found", - "edit.confirm-remove-user": "Are you sure you want to remove this user?", - "edit.save-success": "Changes saved!" + "edit.no-users-found": "没有找到用户", + "edit.confirm-remove-user": "确认删除此用户吗?", + "edit.save-success": "设置已保存!" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/manage/ip-blacklist.json b/public/language/zh-CN/admin/manage/ip-blacklist.json index 5106434351..b4938f974b 100644 --- a/public/language/zh-CN/admin/manage/ip-blacklist.json +++ b/public/language/zh-CN/admin/manage/ip-blacklist.json @@ -1,15 +1,15 @@ { - "lead": "Configure your IP blacklist here.", - "description": "Occasionally, a user account ban is not enough of a deterrant. Other times, restricting access to the forum to a specific IP or a range of IPs is the best way to protect a forum. In these scenarios, you can add troublesome IP addresses or entire CIDR blocks to this blacklist, and they will be prevented from logging in to or registering a new account.", - "active-rules": "Active Rules", - "validate": "Validate Blacklist", - "apply": "Apply Blacklist", - "hints": "Syntax Hints", - "hint-1": "Define a single IP addresses per line. You can add IP blocks as long as they follow the CIDR format (e.g. 192.168.100.0/22).", - "hint-2": "You can add in comments by starting lines with the # symbol.", + "lead": "在此配置 IP 黑名单", + "description": "有时,一份账号封禁并不足以作为威慑。更多的时候,限制有权浏览论坛的具体 IP 或者一个 IP 范围这一行为可以更好地保护论坛。在以上情况下,您可以添加一些令人厌恶者的 IP 地址或者 CIDR 地址块到此黑名单,此后他们(被加入黑名单者)将被阻止进行登录或者注册新账号的行为。", + "active-rules": "生效规则", + "validate": "验证黑名单", + "apply": "应用黑名单", + "hints": "格式建议", + "hint-1": "每行定义一个独立 IP 地址。您可以添加 IP 块,只要它们满足 CIDR 格式(e.g. 192.168.100.0/22)。", + "hint-2": "您可以通过以#标志开头的行来添加注释。", - "validate.x-valid": "%1 out of %2 rule(s) valid.", - "validate.x-invalid": "The following %1 rules are invalid:", + "validate.x-valid": "%1 / %2的规则有效。", + "validate.x-invalid": "下列 %0 个规则无效:", - "alerts.applied-success": "Blacklist Applied" + "alerts.applied-success": "黑名单生效" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/manage/registration.json b/public/language/zh-CN/admin/manage/registration.json index f51b4d56e6..26ec422c98 100644 --- a/public/language/zh-CN/admin/manage/registration.json +++ b/public/language/zh-CN/admin/manage/registration.json @@ -1,20 +1,20 @@ { - "queue": "Queue", - "description": "There are no users in the registration queue.
To enable this feature, go to Settings → User → User Registration and set Registration Type to \"Admin Approval\".", + "queue": "队列", + "description": "注册队列里面没有用户。
要开启这项功能,请去设置 → 用户 → 用户注册 并设置注册类型为“管理员批准”。", - "list.name": "Name", - "list.email": "Email", + "list.name": "姓名", + "list.email": "邮件", "list.ip": "IP", - "list.time": "Time", - "list.username-spam": "Frequency: %1 Appears: %2 Confidence: %3", - "list.email-spam": "Frequency: %1 Appears: %2", - "list.ip-spam": "Frequency: %1 Appears: %2", + "list.time": "时间", + "list.username-spam": "频率: %1 显示:%2 信心:%3", + "list.email-spam": "频率:%1 显示: %2", + "list.ip-spam": "频率:%1 显示: %2", - "invitations": "Invitations", - "invitations.description": "Below is a complete list of invitations sent. Use ctrl-f to search through the list by email or username.

The username will be displayed to the right of the emails for users who have redeemed their invitations.", - "invitations.inviter-username": "Inviter Username", - "invitations.invitee-email": "Invitee Email", - "invitations.invitee-username": "Invitee Username (if registered)", + "invitations": "邀请", + "invitations.description": "下面是一份完整的邀请请求列表。请使用Ctrl-F键以及电子邮件或者用户名以便搜索这个列表。

那些已经接受他们邀请的用户的用户名将显示在电子邮箱右边。", + "invitations.inviter-username": "邀请人用户名", + "invitations.invitee-email": "受邀请的电子邮箱", + "invitations.invitee-username": "受邀请的用户名(如果已经注册)", - "invitations.confirm-delete": "Are you sure you wish to delete this invitation?" + "invitations.confirm-delete": "确认删除这个邀请?" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/manage/tags.json b/public/language/zh-CN/admin/manage/tags.json index db40e9f098..bef7caba4e 100644 --- a/public/language/zh-CN/admin/manage/tags.json +++ b/public/language/zh-CN/admin/manage/tags.json @@ -1,18 +1,18 @@ { - "none": "Your forum does not have any topics with tags yet.", - "bg-color": "Background Colour", - "text-color": "Text Colour", - "create-modify": "Create & Modify Tags", - "description": "Select tags via clicking and/or dragging, use shift to select multiple.", - "create": "Create Tag", - "modify": "Modify Tags", - "delete": "Delete Selected Tags", - "search": "Search for tags...", - "settings": "Click here to visit the tag settings page.", - "name": "Tag Name", + "none": "你的论坛目前没有带有话题的主题", + "bg-color": "背景颜色", + "text-color": "文字颜色", + "create-modify": "创建或修改话题", + "description": "通过点击或拖动选择话题,按住shift进行多选。", + "create": "创建话题", + "modify": "修改话题", + "delete": "删除所选话题", + "search": "搜索话题...", + "settings": "点击此处 访问话题设置页面。", + "name": "话题名", - "alerts.editing-multiple": "Editing multiple tags", - "alerts.editing-x": "Editing \"%1\" tag", - "alerts.confirm-delete": "Do you want to delete the selected tags?", - "alerts.update-success": "Tag Updated!" + "alerts.editing-multiple": "编辑多项话题", + "alerts.editing-x": "编辑 \"%1\" 话题", + "alerts.confirm-delete": "是否要删除所选话题?", + "alerts.update-success": "话题已更新!" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/manage/users.json b/public/language/zh-CN/admin/manage/users.json index f1651a814b..bb4ceadcbd 100644 --- a/public/language/zh-CN/admin/manage/users.json +++ b/public/language/zh-CN/admin/manage/users.json @@ -1,91 +1,91 @@ { - "users": "Users", - "edit": "Edit", - "make-admin": "Make Admin", - "remove-admin": "Remove Admin", - "validate-email": "Validate Email", - "send-validation-email": "Send Validation Email", - "password-reset-email": "Send Password Reset Email", - "ban": "Ban User(s)", - "temp-ban": "Ban User(s) Temporarily", - "unban": "Unban User(s)", - "reset-lockout": "Reset Lockout", - "reset-flags": "Reset Flags", - "delete": "Delete User(s)", - "purge": "Delete User(s) and Content", - "download-csv": "Download CSV", - "invite": "Invite", - "new": "New User", + "users": "用户", + "edit": "编辑", + "make-admin": "设为管理", + "remove-admin": "取消管理员", + "validate-email": "验证邮箱", + "send-validation-email": "发送验证邮件", + "password-reset-email": "发送密码重置邮件", + "ban": "封禁用户", + "temp-ban": "暂时封禁用户", + "unban": "解禁用户", + "reset-lockout": "重设闭锁", + "reset-flags": "重设标记", + "delete": "删除用户", + "purge": "删除用户和内容", + "download-csv": "下载CSV", + "invite": "邀请", + "new": "新建用户", - "pills.latest": "Latest Users", - "pills.unvalidated": "Not Validated", - "pills.no-posts": "No Posts", - "pills.top-posters": "Top Posters", - "pills.top-rep": "Most Reputation", - "pills.inactive": "Inactive", - "pills.flagged": "Most Flagged", - "pills.banned": "Banned", - "pills.search": "User Search", + "pills.latest": "最近的用户", + "pills.unvalidated": "未验证", + "pills.no-posts": "没有帖子", + "pills.top-posters": "发帖最多", + "pills.top-rep": "声望最高", + "pills.inactive": "不活跃", + "pills.flagged": "最多举报", + "pills.banned": "被封禁", + "pills.search": "搜寻用户", - "search.username": "By User Name", - "search.username-placeholder": "Enter a username to search", - "search.email": "By Email", - "search.email-placeholder": "Enter a email to search", - "search.ip": "By IP Address", - "search.ip-placeholder": "Enter an IP Address to search", - "search.not-found": "User not found!", + "search.username": "通过用户名", + "search.username-placeholder": "输入你想找的用户名", + "search.email": "通过邮箱", + "search.email-placeholder": "输入你想找的邮箱地址", + "search.ip": "通过IP地址", + "search.ip-placeholder": "输入你想找的IP", + "search.not-found": "未找到用户!", - "inactive.3-months": "3 months", - "inactive.6-months": "6 months", - "inactive.12-months": "12 months", + "inactive.3-months": "3个月", + "inactive.6-months": "6个月", + "inactive.12-months": "12个月", - "users.uid": "uid", - "users.username": "username", - "users.email": "email", - "users.postcount": "postcount", - "users.reputation": "reputation", - "users.flags": "flags", - "users.joined": "joined", - "users.last-online": "last online", - "users.banned": "banned", + "users.uid": "UID", + "users.username": "用户名", + "users.email": "电子邮件", + "users.postcount": "发帖数", + "users.reputation": "威望", + "users.flags": "举报", + "users.joined": "注册时间", + "users.last-online": "最后在线", + "users.banned": "封禁", - "create.username": "User Name", - "create.email": "Email", - "create.email-placeholder": "Email of this user", - "create.password": "Password", - "create.password-confirm": "Confirm Password", + "create.username": "用户名", + "create.email": "电子邮件", + "create.email-placeholder": "该用户的邮箱", + "create.password": "密码", + "create.password-confirm": "确认密码", - "temp-ban.length": "Ban Length", - "temp-ban.reason": "Reason (Optional)", - "temp-ban.hours": "Hours", - "temp-ban.days": "Days", - "temp-ban.explanation": "Enter the length of time for the ban. Note that a time of 0 will be a considered a permanent ban.", + "temp-ban.length": "封禁时长", + "temp-ban.reason": "理由(可选)", + "temp-ban.hours": "小时", + "temp-ban.days": "天", + "temp-ban.explanation": "输入封禁时长。提示,时长为0视为永久封禁。", - "alerts.confirm-ban": "Do you really want to ban this user permanently?", - "alerts.confirm-ban-multi": "Do you really want to ban these users permanently?", - "alerts.ban-success": "User(s) banned!", - "alerts.button-ban-x": "Ban %1 user(s)", - "alerts.unban-success": "User(s) unbanned!", - "alerts.lockout-reset-success": "Lockout(s) reset!", - "alerts.flag-reset-success": "Flags(s) reset!", - "alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!", - "alerts.make-admin-success": "User(s) are now administrators.", - "alerts.confirm-remove-admin": "Do you really want to remove admins?", - "alerts.remove-admin-success": "User(s) are no longer administrators.", - "alerts.confirm-validate-email": "Do you want to validate email(s) of these user(s)?", - "alerts.validate-email-success": "Emails validated", - "alerts.password-reset-confirm": "Do you want to send password reset email(s) to these user(s)?", - "alerts.confirm-delete": "Warning!
Do you really want to delete user(s)?
This action is not reversable! Only the user account will be deleted, their posts and topics will remain.", - "alerts.delete-success": "User(s) Deleted!", - "alerts.confirm-purge": "Warning!
Do you really want to delete user(s) and their content?
This action is not reversable! All user data and content will be erased!", - "alerts.create": "Create User", - "alerts.button-create": "Create", - "alerts.button-cancel": "Cancel", - "alerts.error-passwords-different": "Passwords must match!", - "alerts.error-x": "Error

%1

", - "alerts.create-success": "User created!", + "alerts.confirm-ban": "你确定要永久封禁该用户吗?", + "alerts.confirm-ban-multi": "你确定要永久封禁这些用户吗?", + "alerts.ban-success": "用户已封禁!", + "alerts.button-ban-x": "封禁 %1 名用户", + "alerts.unban-success": "用户已解封!", + "alerts.lockout-reset-success": "闭锁已重置!", + "alerts.flag-reset-success": "标记已重置!", + "alerts.no-remove-yourself-admin": "你无法撤销自己的管理员身份!", + "alerts.make-admin-success": "这些用户现在是管理员了。", + "alerts.confirm-remove-admin": "你确定要移除管理员吗?", + "alerts.remove-admin-success": "这些用户不再是管理员了。", + "alerts.confirm-validate-email": "你确定要验证这些用户的电子邮箱吗?", + "alerts.validate-email-success": "电子邮箱已验证", + "alerts.password-reset-confirm": "你确定要向这些用户发送密码重置邮件吗?", + "alerts.confirm-delete": "警告
你确定要删除这些用户吗?
该操作不可逆转!只有用户账户会被删除,他们的帖子仍会保留。", + "alerts.delete-success": "用户已删除!", + "alerts.confirm-purge": "警告
你确定要删除这些用户和内容吗?
该操作不可逆转!所有用户数据和内容都将被清除!", + "alerts.create": "创建用户", + "alerts.button-create": "创建", + "alerts.button-cancel": "取消", + "alerts.error-passwords-different": "两次输入的密码必须相同!", + "alerts.error-x": "错误

%1

", + "alerts.create-success": "用户已创建!", - "alerts.prompt-email": "Email: ", - "alerts.email-sent-to": "An invitation email has been sent to %1", - "alerts.x-users-found": "%1 user(s) found! Search took %2 ms." + "alerts.prompt-email": "电子邮箱:", + "alerts.email-sent-to": "已发送邀请给 %1", + "alerts.x-users-found": "找到 %1 位用户!搜索耗时 %2 毫秒。" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json index 6a4995ea6e..7e722dfaab 100644 --- a/public/language/zh-CN/admin/menu.json +++ b/public/language/zh-CN/admin/menu.json @@ -1,75 +1,75 @@ { - "section-general": "General", - "general/dashboard": "Dashboard", - "general/homepage": "Home Page", - "general/navigation": "Navigation", - "general/languages": "Languages", - "general/sounds": "Sounds", - "general/social": "Social", + "section-general": "基本", + "general/dashboard": "控制面板", + "general/homepage": "主页", + "general/navigation": "导航", + "general/languages": "语言", + "general/sounds": "声音", + "general/social": "社交", - "section-manage": "Manage", - "manage/categories": "Categories", - "manage/tags": "Tags", - "manage/users": "Users", - "manage/registration": "Registration Queue", - "manage/groups": "Groups", - "manage/flags": "Flags", - "manage/ip-blacklist": "IP Blacklist", + "section-manage": "管理", + "manage/categories": "版块", + "manage/tags": "话题", + "manage/users": "用户", + "manage/registration": "注册队列", + "manage/groups": "用户组", + "manage/flags": "举报", + "manage/ip-blacklist": "IP黑名单", - "section-settings": "Settings", - "settings/general": "General", - "settings/reputation": "Reputation", - "settings/email": "Email", - "settings/user": "User", - "settings/group": "Group", - "settings/guest": "Guests", - "settings/uploads": "Uploads", - "settings/post": "Post", - "settings/chat": "Chat", - "settings/pagination": "Pagination", - "settings/tags": "Tags", - "settings/notifications": "Notifications", + "section-settings": "设置", + "settings/general": "通用", + "settings/reputation": "声望", + "settings/email": "邮件", + "settings/user": "用户", + "settings/group": "用户组", + "settings/guest": "游客", + "settings/uploads": "上传", + "settings/post": "发帖", + "settings/chat": "聊天", + "settings/pagination": "分页", + "settings/tags": "话题", + "settings/notifications": "通知", "settings/cookies": "Cookies", - "settings/web-crawler": "Web Crawler", - "settings/sockets": "Sockets", - "settings/advanced": "Advanced", + "settings/web-crawler": "Web 爬虫", + "settings/sockets": "套接字", + "settings/advanced": "高级", - "settings.page-title": "%1 Settings", + "settings.page-title": "1% 设置", - "section-appearance": "Appearance", - "appearance/themes": "Themes", - "appearance/skins": "Skins", - "appearance/customise": "Custom HTML & CSS", + "section-appearance": "界面", + "appearance/themes": "主题", + "appearance/skins": "皮肤", + "appearance/customise": "自定义 HTML&CSS", - "section-extend": "Extend", - "extend/plugins": "Plugins", - "extend/widgets": "Widgets", - "extend/rewards": "Rewards", + "section-extend": "扩展", + "extend/plugins": "插件", + "extend/widgets": "窗口部件", + "extend/rewards": "奖励", - "section-social-auth": "Social Authentication", + "section-social-auth": "社交认证", - "section-plugins": "Plugins", - "extend/plugins.install": "Install Plugins", + "section-plugins": "插件", + "extend/plugins.install": "已安装", - "section-advanced": "Advanced", - "advanced/database": "Database", - "advanced/events": "Events", - "advanced/logs": "Logs", - "advanced/errors": "Errors", - "advanced/cache": "Cache", - "development/logger": "Logger", - "development/info": "Info", + "section-advanced": "高级", + "advanced/database": "数据库", + "advanced/events": "事件", + "advanced/logs": "日志", + "advanced/errors": "错误", + "advanced/cache": "缓存", + "development/logger": "记录器", + "development/info": "信息", - "reload-forum": "Reload Forum", - "restart-forum": "Restart Forum", - "logout": "Log out", - "view-forum": "View Forum", + "reload-forum": "重载论坛", + "restart-forum": "重启论坛", + "logout": "登出", + "view-forum": "查看论坛", - "search.placeholder": "Search...", - "search.no-results": "No results...", - "search.search-forum": "Search the forum for ", - "search.keep-typing": "Type more to see results...", - "search.start-typing": "Start typing to see results...", + "search.placeholder": "搜索", + "search.no-results": "没有可用结果…", + "search.search-forum": "搜索论坛为", + "search.keep-typing": "输入更多以查看结果...", + "search.start-typing": "开始输入以查看结果...", - "connection-lost": "Connection to %1 has been lost, attempting to reconnect..." + "connection-lost": "与 %1 的连接已丢失,正尝试重新连接..." } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/advanced.json b/public/language/zh-CN/admin/settings/advanced.json index b023528d04..07184f136b 100644 --- a/public/language/zh-CN/admin/settings/advanced.json +++ b/public/language/zh-CN/admin/settings/advanced.json @@ -1,19 +1,19 @@ { - "maintenance-mode": "Maintenance Mode", - "maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.", - "maintenance-mode.message": "Maintenance Message", - "headers": "Headers", - "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame", - "headers.powered-by": "Customise the \"Powered By\" header sent by NodeBB", + "maintenance-mode": "维护模式", + "maintenance-mode.help": "当论坛处在维护模式时,所有请求将被重定向到一个静态页面。管理员不受重定向限制,并可正常访问站点。", + "maintenance-mode.message": "维护消息", + "headers": "标题", + "headers.allow-from": "设置 ALLOW-FROM 来放置 NodeBB 于 iFrame 中", + "headers.powered-by": "自定义由 NodeBB 发送的 \"Powered By\" 头部 ", "headers.acao": "Access-Control-Allow-Origin", - "headers.acao-help": "To deny access to all sites, leave empty or set to null", + "headers.acao-help": "要拒绝所有网站访问?在这留空或者设置成 null", "headers.acam": "Access-Control-Allow-Methods", "headers.acah": "Access-Control-Allow-Headers", - "traffic-management": "Traffic Management", - "traffic.help": "NodeBB deploys equipped with a module that automatically denies requests in high-traffic situations. You can tune these settings here, although the defaults are a good starting point.", - "traffic.enable": "Enable Traffic Management", - "traffic.event-lag": "Event Loop Lag Threshold (in milliseconds)", - "traffic.event-lag-help": "Lowering this value decreases wait times for page loads, but will also show the \"excessive load\" message to more users. (Restart required)", - "traffic.lag-check-interval": "Check Interval (in milliseconds)", - "traffic.lag-check-interval-help": "Lowering this value causes NodeBB to become more sensitive to spikes in load, but may also cause the check to become too sensitive. (Restart required)" + "traffic-management": "流量管理", + "traffic.help": "NodeBB 拥有在高流量情况下自动拒绝请求的模块。 您可以在这里调整这些设置,虽然默认值就很棒。", + "traffic.enable": "启用流量管理", + "traffic.event-lag": "事件循环滞后阈值(毫秒)", + "traffic.event-lag-help": "降低此值会减少页面加载的等待时间,但也会向更多用户显示“过载”消息。(需要重新启动)", + "traffic.lag-check-interval": "检查间隔(毫秒)", + "traffic.lag-check-interval-help": "降低此值会造成 NodeBB 的负载峰值变得更加敏感,但也可能导致检查变得过于敏感(需要重新启动)" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/chat.json b/public/language/zh-CN/admin/settings/chat.json index 0b22127341..de0b292748 100644 --- a/public/language/zh-CN/admin/settings/chat.json +++ b/public/language/zh-CN/admin/settings/chat.json @@ -1,9 +1,9 @@ { - "chat-settings": "Chat Settings", - "disable": "Disable chat", - "disable-editing": "Disable chat message editing/deletion", - "disable-editing-help": "Administrators and global moderators are exempt from this restriction", - "max-length": "Maximum length of chat messages", - "max-room-size": "Maximum number of users in chat rooms", - "delay": "Time between chat messages in milliseconds" + "chat-settings": "聊天设置", + "disable": "禁用聊天", + "disable-editing": "禁止编辑/删除聊天消息", + "disable-editing-help": "管理员和超级管理员不受此限制", + "max-length": "聊天信息的最大长度", + "max-room-size": "聊天室的最多用户数", + "delay": "聊天信息间的毫秒数" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/cookies.json b/public/language/zh-CN/admin/settings/cookies.json index f8b0f0538b..a03212d78d 100644 --- a/public/language/zh-CN/admin/settings/cookies.json +++ b/public/language/zh-CN/admin/settings/cookies.json @@ -1,11 +1,11 @@ { - "eu-consent": "EU Consent", - "consent.enabled": "Enabled", - "consent.message": "Notification message", - "consent.acceptance": "Acceptance message", - "consent.link-text": "Policy Link Text", - "consent.blank-localised-default": "Leave blank to use NodeBB localised defaults", - "settings": "Settings", - "cookie-domain": "Session cookie domain", - "blank-default": "Leave blank for default" + "eu-consent": "欧盟 Cookies 政策", + "consent.enabled": "启用选项", + "consent.message": "通知消息", + "consent.acceptance": "赞成消息", + "consent.link-text": "政策链接文本", + "consent.blank-localised-default": "留空以便使用 NodeBB 本地默认值", + "settings": "设置", + "cookie-domain": "会话 cookie 域名", + "blank-default": "留空以保持默认" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/email.json b/public/language/zh-CN/admin/settings/email.json index 1e92c88490..862ff359b9 100644 --- a/public/language/zh-CN/admin/settings/email.json +++ b/public/language/zh-CN/admin/settings/email.json @@ -1,25 +1,25 @@ { - "email-settings": "Email Settings", - "address": "Email Address", - "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", - "from": "From Name", - "from-help": "The from name to display in the email.", - "gmail-routing": "Gmail Routing", - "gmail-routing-help1": "There have been reports of Gmail Routing not working on accounts with heightened security. In those scenarios, you will have to configure your GMail account to allow less secure apps.", - "gmail-routing-help2": "For more information about this workaround, please consult this NodeMailer article on the issue. An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. Browse available plugins here.", - "gmail-transport": "Route emails through a Gmail/Google Apps account", - "gmail-transport.username": "Username", - "gmail-transport.username-help": "Enter the full email address here, especially if you are using a Google Apps managed domain.", - "gmail-transport.password": "Password", - "template": "Edit Email Template", - "template.select": "Select Email Template", - "template.revert": "Revert to Original", - "testing": "Email Testing", - "testing.select": "Select Email Template", - "testing.send": "Send Test Email", - "testing.send-help": "The test email will be sent to the currently logged in user's email address.", - "subscriptions": "Email Subscriptions", - "subscriptions.disable": "Disable subscriber notification emails", - "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "email-settings": "邮件设置", + "address": "电子邮箱地址", + "address-help": "下面的电子邮件地址代表收件人在“发件人”和“回复”中所看到的地址。", + "from": "发送者", + "from-help": "用于邮件中显示的发送者", + "gmail-routing": "Gmail 代发", + "gmail-routing-help1": "有报告称,Gmail 代发在安全性更高的账户上不工作。. 在这种情况下,你需要将您的Gmail帐户设为允许安全性较低的应用程式。", + "gmail-routing-help2": "有关此解决方法的详细信息, 请参阅此 NodeMailer 有关此问题的文章。 另一种方法是使用第三方电子邮件插件,如 SendGrid,Mailgun 等。在这里浏览可用的插件。", + "gmail-transport": "通过 Gmail / Google Apps 帐户代发电子邮件", + "gmail-transport.username": "用户名", + "gmail-transport.username-help": "请在这里输入完整的电子邮件地址,特别是如果您使用了 Google Apps 管理域。", + "gmail-transport.password": "密码", + "template": "编辑电子邮件模板", + "template.select": "选择电子邮件模板", + "template.revert": "还原为初始模板", + "testing": "电子邮件测试", + "testing.select": "选择电子邮件模板", + "testing.send": "发送测试电子邮件", + "testing.send-help": "测试电子邮件将被发送到当前已登录的用户的电子邮件地址。", + "subscriptions": "电子邮件订阅", + "subscriptions.disable": "禁用订阅者通知电子邮件", + "subscriptions.hour": "摘要小时", + "subscriptions.hour-help": "请输入一个代表小时的数字来发送计划的电子邮件摘要 (例如,对于午夜,0,对于下午5:00,17)。 请记住,这是根据服务器本身的时间,可能与您的系统时钟不完全匹配。
服务器的大致时间为:
下一个每日摘要被计划在发送" } \ 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 c26740ee4f..69c25c04bf 100644 --- a/public/language/zh-CN/admin/settings/general.json +++ b/public/language/zh-CN/admin/settings/general.json @@ -1,30 +1,30 @@ { - "site-settings": "Site Settings", - "title": "Site Title", - "title.name": "Your Community Name", - "title.show-in-header": "Show Site Title in Header", - "browser-title": "Browser Title", - "browser-title-help": "If no browser title is specified, the site title will be used", - "title-layout": "Title Layout", - "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", - "description.placeholder": "A short description about your community", - "description": "Site Description", - "keywords": "Site Keywords", - "keywords-placeholder": "Keywords describing your community, comma-separated", - "logo": "Site Logo", - "logo.image": "Image", - "logo.image-placeholder": "Path to a logo to display on forum header", - "logo.upload": "Upload", - "logo.url": "URL", - "logo.url-placeholder": "The URL of the site logo", - "logo.url-help": "When the logo is clicked, send users to this address. If left blank, user will be sent to the forum index.", - "logo.alt-text": "Alt Text", - "log.alt-text-placeholder": "Alternative text for accessibility", - "favicon": "Favicon", - "favicon.upload": "Upload", - "touch-icon": "Homescreen/Touch Icon", - "touch-icon.upload": "Upload", - "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" + "site-settings": "站点设置", + "title": "站点标题", + "title.name": "您的社区名称", + "title.show-in-header": "在顶部显示站点标题", + "browser-title": "浏览器标题", + "browser-title-help": "如果没有指定浏览器标题,将会使用站点标题", + "title-layout": "标题布局", + "title-layout-help": "定义浏览器标题的布局,即{页面标题} | {浏览器标题}", + "description.placeholder": "关于您的社区的简短说明", + "description": "站点描述", + "keywords": "站点关键字", + "keywords-placeholder": "描述您的社区的关键字(以逗号分隔)", + "logo": "站点 Logo", + "logo.image": "图像", + "logo.image-placeholder": "要在论坛标题上显示的 Logo 的路径", + "logo.upload": "上传", + "logo.url": "网址", + "logo.url-placeholder": "站点 Logo 链接", + "logo.url-help": "当 Logo 被点击时,将用户跳转到此地址。如果留空,用户将被跳转到论坛首页。", + "logo.alt-text": "替代文本", + "log.alt-text-placeholder": "辅助功能的替代文本", + "favicon": "站点图标", + "favicon.upload": "上传", + "touch-icon": "主屏幕/触摸图标", + "touch-icon.upload": "上传", + "touch-icon.help": "推荐的尺寸和格式:192x192,仅限PNG格式。 如果没有指定触摸图标,NodeBB将回退到使用站点图标。", + "outgoing-links": "站外链接", + "outgoing-links.warning-page": "使用站外链接警告页" } \ 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 1ae88c9cf5..d19d417f86 100644 --- a/public/language/zh-CN/admin/settings/group.json +++ b/public/language/zh-CN/admin/settings/group.json @@ -1,12 +1,12 @@ { - "general": "General", - "private-groups": "Private Groups", - "private-groups.help": "If enabled, joining of groups requires the approval of the group owner (Default: enabled)", - "private-groups.warning": "Beware! If this option is disabled and you have private groups, they automatically become public.", - "allow-creation": "Allow Group Creation", - "allow-creation-help": "If enabled, users can create groups (Default: disabled)", - "max-name-length": "Maximum Group Name Length", - "cover-image": "Group Cover Image", - "default-cover": "Default Cover Images", - "default-cover-help": "Add comma-separated default cover images for groups that don't have an uploaded cover image" + "general": "通用", + "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/guest.json b/public/language/zh-CN/admin/settings/guest.json index 6b2ac2c8b2..8cf23e04aa 100644 --- a/public/language/zh-CN/admin/settings/guest.json +++ b/public/language/zh-CN/admin/settings/guest.json @@ -1,8 +1,8 @@ { - "handles": "Guest Handles", - "handles.enabled": "Allow guest handles", - "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "privileges": "Guest Privileges", - "privileges.can-search": "Allow guests to search without logging in", - "privileges.can-search-users": "Allow guests to search users without logging in" + "handles": "游客用户名", + "handles.enabled": "允许游客用户名", + "handles.enabled-help": "这个选项将允许游客使用一个额外的输入框来设置发帖时的用户名,如果被禁用,仅会统一显示为“游客”", + "privileges": "游客权限", + "privileges.can-search": "允许未登录的游客使用搜索", + "privileges.can-search-users": "允许未登录的游客查找用户" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/notifications.json b/public/language/zh-CN/admin/settings/notifications.json index 4eff7f341a..fdda86bfaf 100644 --- a/public/language/zh-CN/admin/settings/notifications.json +++ b/public/language/zh-CN/admin/settings/notifications.json @@ -1,5 +1,5 @@ { - "notifications": "Notifications", - "welcome-notification": "Welcome Notification", - "welcome-notification-link": "Welcome Notification Link" + "notifications": "通知", + "welcome-notification": "欢迎通知", + "welcome-notification-link": "欢迎通知链接" } \ 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 27d71b4de5..ec44dd3661 100644 --- a/public/language/zh-CN/admin/settings/pagination.json +++ b/public/language/zh-CN/admin/settings/pagination.json @@ -1,9 +1,9 @@ { - "pagination": "Pagination Settings", - "enable": "Paginate topics and posts instead of using infinite scroll.", - "topics": "Topic Pagination", - "posts-per-page": "Posts per Page", - "categories": "Category Pagination", - "topics-per-page": "Topics per Page", - "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" + "pagination": "分页设置", + "enable": "在主题和帖子使用分页替代无限滚动浏览。", + "topics": "话题分页", + "posts-per-page": "每页帖子数", + "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 f293e554d9..ecd208c477 100644 --- a/public/language/zh-CN/admin/settings/post.json +++ b/public/language/zh-CN/admin/settings/post.json @@ -1,44 +1,44 @@ { - "sorting": "Post Sorting", - "sorting.post-default": "Default Post Sorting", - "sorting.oldest-to-newest": "Oldest to Newest", - "sorting.newest-to-oldest": "Newest to Oldest", - "sorting.most-votes": "Most Votes", - "sorting.topic-default": "Default Topic Sorting", - "restrictions": "Posting Restrictions", - "restrictions.seconds-between": "Seconds between Posts", - "restrictions.seconds-between-new": "Seconds between Posts for New Users", - "restrictions.rep-threshold": "Reputation threshold before this restriction is lifted", - "restrictions.seconds-defore-new": "Seconds before new user can post", - "restrictions.seconds-edit-after": "Number of seconds users are allowed to edit posts after posting. (0 disabled)", - "restrictions.seconds-delete-after": "Number of seconds users are allowed to delete posts after posting. (0 disabled)", - "restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics. (0 disabled)", - "restrictions.min-title-length": "Minimum Title Length", - "restrictions.max-title-length": "Maximum Title Length", - "restrictions.min-post-length": "Minimum Post Length", - "restrictions.max-post-length": "Maximum Post Length", - "restrictions.days-until-stale": "Days until Topic is considered stale", - "restrictions.stale-help": "If a topic is considered \"stale\", then a warning will be shown to users who attempt to reply to that topic.", - "timestamp": "Timestamp", - "timestamp.cut-off": "Date cut-off (in days)", - "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", - "teaser": "Teaser Post", - "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", - "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", - "teaser.first": "First", - "unread": "Unread Settings", - "unread.cutoff": "Unread cutoff days", - "unread.min-track-last": "Minimum posts in topic before tracking last read", - "signature": "Signature Settings", - "signature.disable": "Disable signatures", - "signature.no-links": "Disable links in signatures", - "signature.no-images": "Disable images in signatures", - "signature.max-length": "Maximum Signature Length", - "composer": "Composer Settings", - "composer-help": "The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.", - "composer.show-help": "Show \"Help\" tab", - "composer.enable-plugin-help": "Allow plugins to add content to the help tab", - "composer.custom-help": "Custom Help Text", - "ip-tracking": "IP Tracking", - "ip-tracking.each-post": "Track IP Address for each post" + "sorting": "帖子排序", + "sorting.post-default": "默认帖子排序", + "sorting.oldest-to-newest": "从旧到新", + "sorting.newest-to-oldest": "从新到旧", + "sorting.most-votes": "最多投票", + "sorting.topic-default": "默认主题排序", + "restrictions": "发帖限制", + "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.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.stale-help": "如果某个主题被视为“过时”,则会向尝试回复该主题的用户显示警告。", + "timestamp": "时间戳", + "timestamp.cut-off": "日期截止日期 (天) ", + "timestamp.cut-off-help": "日期&时间将以相对方式 (例如,“3小时前” / “5天前”) 显示,并且被本地化为各种各样的\n\\t\\t\\t\\t\\t语言。在某一点之后,可以切换该文本以显示本地化日期本身\n\\t\\t\\t\\t\\t (例如2016年11月5日15:30) 。
(默认值: 30 或一个月) 。 设置为0可始终显示日期,留空以始终显示相对时间。", + "teaser": "预览帖子", + "teaser.last-post": "最后– 显示最新的帖子,包括原帖,如果没有回复", + "teaser.last-reply": "最后– 显示最新回复,如果没有回复,则显示“无回复”占位符", + "teaser.first": "第一", + "unread": "未读设置", + "unread.cutoff": "未读截止天数", + "unread.min-track-last": "跟踪最后阅读之前的主题最小帖子", + "signature": "签名设置", + "signature.disable": "禁用签名", + "signature.no-links": "禁用签名中的链接", + "signature.no-images": "禁用签名中的图片", + "signature.max-length": "签名最大长度", + "composer": "编辑器设置", + "composer-help": "以下设置控制所示后期编辑器的功能和/或外观\n\\t\\t\\t\\t当用户创建新主题或回复现有主题时。", + "composer.show-help": "显示“帮助”选项卡", + "composer.enable-plugin-help": "允许插件将内容添加到帮助选项卡", + "composer.custom-help": "自定义帮助文本", + "ip-tracking": "IP 跟踪", + "ip-tracking.each-post": "跟踪每个帖子的 IP 地址" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/reputation.json b/public/language/zh-CN/admin/settings/reputation.json index 11d6184721..dc3ed12168 100644 --- a/public/language/zh-CN/admin/settings/reputation.json +++ b/public/language/zh-CN/admin/settings/reputation.json @@ -1,8 +1,8 @@ { - "reputation": "Reputation Settings", - "disable": "Disable Reputation System", - "disable-down-voting": "Disable Down Voting", - "thresholds": "Activity Thresholds", - "min-rep-downvote": "Minimum reputation to downvote posts", - "min-rep-flag": "Minimum reputation to flag posts" + "reputation": "声望设置", + "disable": "禁用声望系统", + "disable-down-voting": "禁用 踩", + "thresholds": "活动阈值", + "min-rep-downvote": "踩帖子所需要声望的最小值", + "min-rep-flag": "举报帖子所需要声望的最小值" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/sockets.json b/public/language/zh-CN/admin/settings/sockets.json index d04ee42fcf..27cd0e4738 100644 --- a/public/language/zh-CN/admin/settings/sockets.json +++ b/public/language/zh-CN/admin/settings/sockets.json @@ -1,6 +1,6 @@ { - "reconnection": "Reconnection Settings", - "max-attempts": "Max Reconnection Attempts", - "default-placeholder": "Default: %1", - "delay": "Reconnection Delay" + "reconnection": "重新连接设置", + "max-attempts": "最大重新连接尝试", + "default-placeholder": "默认:%1", + "delay": "重连等待时间" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/tags.json b/public/language/zh-CN/admin/settings/tags.json index 6f31f60ba0..c72093340f 100644 --- a/public/language/zh-CN/admin/settings/tags.json +++ b/public/language/zh-CN/admin/settings/tags.json @@ -1,12 +1,12 @@ { - "tag": "Tag Settings", - "min-per-topic": "Minimum Tags per Topic", - "max-per-topic": "Maximum Tags per Topic", - "min-length": "Minimum Tag Length", - "max-length": "Maximum Tag Length", - "goto-manage": "Click here to visit the tag management page.", - "privacy": "Privacy", - "list-private": "Make the tags list private", - "related-topics": "Related Topics", - "max-related-topics": "Maximum related topics to display (if supported by theme)" + "tag": "话题设置", + "min-per-topic": "每个主题的最少话题数", + "max-per-topic": "每话题的最大话题数", + "min-length": "最短话题长度", + "max-length": "最大话题长度", + "goto-manage": "点击这里访问话题管理页面。", + "privacy": "隐私", + "list-private": "使话题列表私有化", + "related-topics": "相关主题", + "max-related-topics": "最大相关主题显示量(如果主题支持)" } \ 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 8a56c85663..ca9f92012e 100644 --- a/public/language/zh-CN/admin/settings/uploads.json +++ b/public/language/zh-CN/admin/settings/uploads.json @@ -1,28 +1,28 @@ { - "posts": "Posts", - "allow-files": "Allow users to upload regular files", - "private": "Make uploaded files private", - "max-image-width": "Resize images down to specified width (in pixels)", - "max-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)", - "max-file-size": "Maximum File Size (in KiB)", - "max-file-size-help": "(in kilobytes, default: 2048 KiB)", - "allow-topic-thumbnails": "Allow users to upload topic thumbnails", - "topic-thumb-size": "Topic Thumb Size", - "allowed-file-extensions": "Allowed File Extensions", - "allowed-file-extensions-help": "Enter comma-separated list of file extensions here (e.g. pdf,xls,doc).\n\t\t\t\t\tAn empty list means all extensions are allowed.", - "profile-avatars": "Profile Avatars", - "allow-profile-image-uploads": "Allow users to upload profile images", - "convert-profile-image-png": "Convert profile image uploads to PNG", - "default-avatar": "Custom Default Avatar", - "upload": "Upload", - "profile-image-dimension": "Profile Image Dimension", - "profile-image-dimension-help": "(in pixels, default: 128 pixels)", - "max-profile-image-size": "Maximum Profile Image File Size", - "max-profile-image-size-help": "(in kilobytes, default: 256 KiB)", - "max-cover-image-size": "Maximum Cover Image File Size", - "max-cover-image-size-help": "(in kilobytes, default: 2,048 KiB)", - "keep-all-user-images": "Keep old versions of avatars and profile covers on the server", - "profile-covers": "Profile Covers", - "default-covers": "Default Cover Images", - "default-covers-help": "Add comma-separated default cover images for accounts that don't have an uploaded cover image" + "posts": "帖子", + "allow-files": "允许用户上传普通文件", + "private": "使上传的文件私有化", + "max-image-width": "缩小图片到指定宽度(单位像素)", + "max-image-width-help": "(像素单位,默认760像素,设置为0以禁用)", + "max-file-size": "最大文件尺寸(单位 KiB)", + "max-file-size-help": "(单位 KiB,默认2048KiB)", + "allow-topic-thumbnails": "允许用户上传主题缩略图", + "topic-thumb-size": "主题缩略图大小", + "allowed-file-extensions": "允许的文件扩展名", + "allowed-file-extensions-help": "在这里输入以逗号分隔的文件扩展名(例如:pdf,xls,doc)。\n填写空意味着所有扩展名是允许的。", + "profile-avatars": "个人头像", + "allow-profile-image-uploads": "允许用户上传个人资料照片", + "convert-profile-image-png": "转换个人资料图片为 PNG", + "default-avatar": "访客默认头像", + "upload": "上传", + "profile-image-dimension": "个人资料相片尺寸", + "profile-image-dimension-help": "(使用像素作为单位,默认:128px)", + "max-profile-image-size": "个人资料相片最大大小", + "max-profile-image-size-help": "(单位KiB,默认256KiB)", + "max-cover-image-size": "最大封面图片文件大小", + "max-cover-image-size-help": "(单位kb,默认:2048KiB)", + "keep-all-user-images": "在服务器上保留旧头像和旧的资料封面", + "profile-covers": "资料封面", + "default-covers": "默认封面图片", + "default-covers-help": "为没有上传封面图片的帐户添加以逗号分隔的默认封面图片" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/user.json b/public/language/zh-CN/admin/settings/user.json index bdabb075e9..8d30a90366 100644 --- a/public/language/zh-CN/admin/settings/user.json +++ b/public/language/zh-CN/admin/settings/user.json @@ -1,59 +1,59 @@ { - "authentication": "Authentication", - "allow-local-login": "Allow local login", - "require-email-confirmation": "Require Email Confirmation", - "email-confirm-interval": "User may not resend a confirmation email until", - "email-confirm-email2": "minutes have elapsed", - "allow-login-with": "Allow login with", - "allow-login-with.username-email": "Username or Email", - "allow-login-with.username": "Username Only", - "allow-login-with.email": "Email Only", - "account-settings": "Account Settings", - "disable-username-changes": "Disable username changes", - "disable-email-changes": "Disable email changes", - "disable-password-changes": "Disable password changes", - "allow-account-deletion": "Allow account deletion", - "user-info-private": "Make user info private", - "themes": "Themes", - "disable-user-skins": "Prevent users from choosing a custom skin", - "account-protection": "Account Protection", - "login-attempts": "Login attempts per hour", - "login-attempts-help": "If login attempts to a user's account exceeds this threshold, that account will be locked for a pre-configured amount of time", - "lockout-duration": "Account Lockout Duration (minutes)", - "login-days": "Days to remember user login sessions", - "password-expiry-days": "Force password reset after a set number of days", - "registration": "User Registration", - "registration-type": "Registration Type", - "registration-type.normal": "Normal", - "registration-type.admin-approval": "Admin Approval", - "registration-type.admin-approval-ip": "Admin Approval for IPs", - "registration-type.invite-only": "Invite Only", - "registration-type.admin-invite-only": "Admin Invite Only", - "registration-type.disabled": "No registration", - "registration-type.help": "Normal - Users can register from the /register page.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", - "registration.max-invites": "Maximum Invitations per User", - "max-invites": "Maximum Invitations per User", - "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", - "min-username-length": "Minimum Username Length", - "max-username-length": "Maximum Username Length", - "min-password-length": "Minimum Password Length", - "max-about-me-length": "Maximum About Me Length", - "terms-of-use": "Forum Terms of Use (Leave blank to disable)", - "user-search": "User Search", - "user-search-results-per-page": "Number of results to display", - "default-user-settings": "Default User Settings", - "show-email": "Show email", - "show-fullname": "Show fullname", - "restrict-chat": "Only allow chat messages from users I follow", - "outgoing-new-tab": "Open outgoing links in new tab", - "topic-search": "Enable In-Topic Searching", - "digest-freq": "Subscribe to Digest", - "digest-freq.off": "Off", - "digest-freq.daily": "Daily", - "digest-freq.weekly": "Weekly", - "digest-freq.monthly": "Monthly", - "email-chat-notifs": "Send an email if a new chat message arrives and I am not online", - "email-post-notif": "Send an email when replies are made to topics I am subscribed to", - "follow-created-topics": "Follow topics you create", - "follow-replied-topics": "Follow topics that you reply to" + "authentication": "验证", + "allow-local-login": "允许本地登录", + "require-email-confirmation": "需要邮件确认", + "email-confirm-interval": "用户无法重新发送确认直到", + "email-confirm-email2": "分钟已经过", + "allow-login-with": "允许使用何种登录名", + "allow-login-with.username-email": "用户名或者邮箱", + "allow-login-with.username": "仅限用户名", + "allow-login-with.email": "仅限邮箱", + "account-settings": "用户设置", + "disable-username-changes": "禁用修改用户名", + "disable-email-changes": "禁用修改邮箱", + "disable-password-changes": "禁用修改密码", + "allow-account-deletion": "允许消除帐号", + "user-info-private": "使用户信息私有化", + "themes": "主题", + "disable-user-skins": "阻止用户选择自定义皮肤", + "account-protection": "帐号保护", + "login-attempts": "每小时尝试登录次数", + "login-attempts-help": "如果用户的尝试登录次数超过此界限,该帐号将会被被锁定预设的时间。", + "lockout-duration": "帐户锁定时间(分钟)", + "login-days": "记录用户会话天数", + "password-expiry-days": "强制重置密码天数", + "registration": "用户注册", + "registration-type": "注册方式", + "registration-type.normal": "通常", + "registration-type.admin-approval": "管理员批准", + "registration-type.admin-approval-ip": "管理员批准 IP地址", + "registration-type.invite-only": "仅限邀请", + "registration-type.admin-invite-only": "仅限管理员邀请", + "registration-type.disabled": "禁止注册", + "registration-type.help": "通常 - 用户可以通过/register页面注册
\n管理员批准 - 用户注册请求会被放入 请求队列 待管理员批准。
\n管理员批准 IP地址 - 新用户不受影响,已存在帐户的IP地址注册需要管理员批准。
\n邀请制 - 用户可以通过 用户 页面邀请其它用户。
\n管理员邀请制 - 只有管理员可以通过 用户admin/manage/users 页面邀请其它用户。
\n无注册 - 不开放用户注册。
", + "registration.max-invites": "每个用户最大邀请数", + "max-invites": "每个用户最大邀请数", + "max-invites-help": "无限制填0。管理员没有邀请限制
仅在邀请制时可用", + "min-username-length": "最小用户名长度", + "max-username-length": "最大用户名长度", + "min-password-length": "最小密码长度", + "max-about-me-length": "最大自我介绍长度", + "terms-of-use": "论坛使用条款 (留空即可禁用)", + "user-search": "用户搜索", + "user-search-results-per-page": "展示的结果数量", + "default-user-settings": "默认用户设置", + "show-email": "显示邮箱", + "show-fullname": "显示全名", + "restrict-chat": "只允许我关注的用户给我发送聊天消息", + "outgoing-new-tab": "在新标签打开外部链接", + "topic-search": "启用主题内搜索", + "digest-freq": "订阅摘要", + "digest-freq.off": "关闭", + "digest-freq.daily": "每日", + "digest-freq.weekly": "每周", + "digest-freq.monthly": "每月", + "email-chat-notifs": "当我不在线并收到新的聊天消息时,给我发送邮件通知", + "email-post-notif": "当我订阅的主题有新回复时,给我发送邮件通知", + "follow-created-topics": "关注您创建的主题", + "follow-replied-topics": "关注您回复的主题" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/web-crawler.json b/public/language/zh-CN/admin/settings/web-crawler.json index 2e0d31d12b..aca41db4b6 100644 --- a/public/language/zh-CN/admin/settings/web-crawler.json +++ b/public/language/zh-CN/admin/settings/web-crawler.json @@ -1,10 +1,10 @@ { - "crawlability-settings": "Crawlability Settings", - "robots-txt": "Custom Robots.txt Leave blank for default", - "sitemap-feed-settings": "Sitemap & Feed Settings", - "disable-rss-feeds": "Disable RSS Feeds", - "disable-sitemap-xml": "Disable Sitemap.xml", - "sitemap-topics": "Number of Topics to display in the Sitemap", - "clear-sitemap-cache": "Clear Sitemap Cache", - "view-sitemap": "View Sitemap" + "crawlability-settings": "爬虫抓取设置", + "robots-txt": "自定义 Robots.txt,留空以使用默认设置", + "sitemap-feed-settings": "站点地图与订阅设置", + "disable-rss-feeds": "禁用 RSS 订阅", + "disable-sitemap-xml": "禁用 Sitemap.xml", + "sitemap-topics": "要在 Stemap 中展示的主题数量", + "clear-sitemap-cache": "清除 Sitemap 缓存", + "view-sitemap": "查看 Sitemap" } \ No newline at end of file diff --git a/public/language/zh-CN/category.json b/public/language/zh-CN/category.json index 68480df46d..e9ce41a2e3 100644 --- a/public/language/zh-CN/category.json +++ b/public/language/zh-CN/category.json @@ -6,14 +6,14 @@ "no_topics": "此版块还没有任何内容。
赶紧来发帖吧!", "browsing": "正在浏览", "no_replies": "尚无回复", - "no_new_posts": "没有新帖", + "no_new_posts": "没有新主题", "share_this_category": "分享此版块", "watch": "关注", "ignore": "忽略", - "watching": "关注中", + "watching": "正在关注", "ignoring": "已忽略", - "watching.description": "显示未读帖子", - "ignoring.description": "不显示未读帖子", + "watching.description": "显示未读主题", + "ignoring.description": "不显示未读主题", "watch.message": "您关注了此版块的动态。", "ignore.message": "您未关注此版块的动态。", "watched-categories": "已关注的版块" diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index 616287357f..d7f706ff2c 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -24,14 +24,14 @@ "no-email-to-confirm": "本论坛需要电子邮箱确认,请点击这里输入电子邮箱地址", "email-confirm-failed": "我们无法确认您的电子邮箱,请重试", "confirm-email-already-sent": "确认邮件已发出,如需重新发送请等待 %1 分钟后再试。", - "sendmail-not-found": "无法找到sendmail可执行程序,请确保sendmail已经安装并可被运行NodeBB的用户执行", + "sendmail-not-found": "无法找到 sendmail 可执行程序,请确保 sendmail 已经安装并可被运行 NodeBB 的用户执行", "username-too-short": "用户名太短", "username-too-long": "用户名太长", "password-too-long": "密码太长", "user-banned": "用户已禁止", "user-banned-reason": "抱歉,此帐号已经被封号 (原因:%1)", "user-too-new": "抱歉,您需要等待 %1 秒后,才可以发帖!", - "blacklisted-ip": "对不起,您的IP地址已被社区禁用。如果您认为这是一个错误,请与管理员联系。", + "blacklisted-ip": "对不起,您的 IP 地址已被社区禁用。如果您认为这是一个错误,请与管理员联系。", "ban-expiry-missing": "请提供此次禁言结束日期", "no-category": "版块不存在", "no-topic": "主题不存在", @@ -64,7 +64,7 @@ "title-too-long": "请缩减标题,不超过 %1 个字符。", "category-not-selected": "未选择版块。", "too-many-posts": "发帖需要间隔 %1 秒以上 - 请稍候再发帖", - "too-many-posts-newbie": "因为您是新用户,所以限制每隔 %1 秒才能发帖一次,直到您有 %2 点威望为止 —— 请稍候再发帖", + "too-many-posts-newbie": "因为您是新用户,所以限制每隔 %1 秒才能发帖一次,直到您有 %2 点声望为止 —— 请稍候再发帖", "tag-too-short": "话题太短,不能少于 %1 个字符", "tag-too-long": "话题太长,不能超过 %1 个字符", "not-enough-tags": "没有足够的话题标签。主题必须有至少 %1 个话题标签", @@ -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": "此帖已被删除", @@ -98,7 +98,7 @@ "invalid-file": "无效文件", "uploads-are-disabled": "上传已禁用", "signature-too-long": "抱歉,您的签名不能超过 %1 个字符。", - "about-me-too-long": "抱歉,您的‘关于我’不能超过 %1 个字符。", + "about-me-too-long": "抱歉,您的关于我不能超过 %1 个字符。", "cant-chat-with-yourself": "您不能和自己聊天!", "chat-restricted": "此用户限制了他的聊天消息。必须他先关注您,您才能和他聊天。", "chat-disabled": "聊天系统已关闭", @@ -109,10 +109,10 @@ "cant-remove-last-user": "您不能移除这个用户", "cant-delete-chat-message": "您不允许删除这条消息", "already-voting-for-this-post": "您已为此帖回复投过票了。", - "reputation-system-disabled": "威望系统已禁用。", - "downvoting-disabled": "扣分功能已禁用", - "not-enough-reputation-to-downvote": "您的威望不足以给此帖扣分", - "not-enough-reputation-to-flag": "您的威望不足以举报此帖", + "reputation-system-disabled": "声望系统已禁用。", + "downvoting-disabled": "踩已被禁用", + "not-enough-reputation-to-downvote": "您的声望不足以踩此帖", + "not-enough-reputation-to-flag": "您的声望不足以举报此帖", "already-flagged": "您已举报此帖", "reload-failed": "刷新 NodeBB 时遇到问题: \"%1\"。NodeBB 保持给已连接的客户端服务,您应该撤销刷新前做的更改。", "registration-error": "注册错误", diff --git a/public/language/zh-CN/global.json b/public/language/zh-CN/global.json index 395856eed8..f864947bf4 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": "在线", @@ -58,7 +58,7 @@ "downvoters": "踩的人", "downvoted": "踩", "views": "浏览", - "reputation": "威望", + "reputation": "声望", "read_more": "阅读更多", "more": "更多", "posted_ago_by_guest": "游客发布于 %1", @@ -92,7 +92,7 @@ "delete_all": "全部删除", "map": "地图", "sessions": "已登录的会话", - "ip_address": "IP地址", + "ip_address": "IP 地址", "enter_page_number": "输入页码", "upload_file": "上传文件", "upload": "上传", @@ -100,8 +100,8 @@ "unsaved-changes": "您有未保存的更改,您确定您要离开么?", "reconnecting-message": "与 %1 的连接断开,我们正在尝试重连,请耐心等待", "play": "播放", - "cookies.message": "此网站使用 cookie 以保障您在我们网站的最佳体验。", - "cookies.accept": "知道了!", + "cookies.message": "此网站使用 Cookies 以保障您在我们网站的最佳体验。", + "cookies.accept": "知道了!", "cookies.learn_more": "了解更多", - "edited": "Edited" + "edited": "已编辑" } \ No newline at end of file diff --git a/public/language/zh-CN/groups.json b/public/language/zh-CN/groups.json index 7132eb4889..22da18c205 100644 --- a/public/language/zh-CN/groups.json +++ b/public/language/zh-CN/groups.json @@ -1,9 +1,9 @@ { - "groups": "小组", - "view_group": "查看小组", + "groups": "用户组", + "view_group": "查看用户组", "owner": "组长", - "new_group": "创建小组", - "no_groups_found": "尚无小组信息", + "new_group": "创建用户组", + "no_groups_found": "尚无用户组信息", "pending.accept": "接受", "pending.reject": "拒绝", "pending.accept_all": "接受全部", @@ -11,25 +11,25 @@ "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.disableJoinRequests": "禁止申请加入用户组", "details.grant": "授予/取消管理权", - "details.kick": "踢出小组", - "details.owner_options": "小组管理", - "details.group_name": "小组名", - "details.member_count": "小组成员数", + "details.kick": "踢出用户组", + "details.owner_options": "用户组管理", + "details.group_name": "用户组名", + "details.member_count": "用户组成员数", "details.creation_date": "创建时间", "details.description": "描述", "details.badge_preview": "徽章预览", @@ -37,21 +37,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": "输入您要邀请加入此小组的用户名,多个用户以逗号分隔", + "bulk-invite-instructions": "输入您要邀请加入此用户组的用户名,多个用户以逗号分隔", "bulk-invite": "批量邀请", - "remove_group_cover_confirm": "Are you sure you want to remove the cover picture?" + "remove_group_cover_confirm": "确定要移除封面图片吗?" } \ No newline at end of file diff --git a/public/language/zh-CN/login.json b/public/language/zh-CN/login.json index d46196e47d..de01676899 100644 --- a/public/language/zh-CN/login.json +++ b/public/language/zh-CN/login.json @@ -1,5 +1,5 @@ { - "username-email": "用户名/电子邮箱", + "username-email": "用户名 / 邮箱", "username": "用户名", "email": "邮件", "remember_me": "记住我?", diff --git a/public/language/zh-CN/modules.json b/public/language/zh-CN/modules.json index 343b660049..94874032f2 100644 --- a/public/language/zh-CN/modules.json +++ b/public/language/zh-CN/modules.json @@ -13,7 +13,7 @@ "chat.contacts": "联系人", "chat.message-history": "消息历史", "chat.pop-out": "弹出聊天窗口", - "chat.minimize": "Minimize", + "chat.minimize": "最小化", "chat.maximize": "最大化", "chat.seven_days": "7天", "chat.thirty_days": "30天", @@ -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/pages.json b/public/language/zh-CN/pages.json index 32419753d0..af1f0bedfa 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 聊天", "account/edit": "正在编辑 \"%1\"", @@ -36,7 +36,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/search.json b/public/language/zh-CN/search.json index 3f2ec28189..691a528d7e 100644 --- a/public/language/zh-CN/search.json +++ b/public/language/zh-CN/search.json @@ -8,7 +8,7 @@ "posted-by": "发表", "in-categories": "在版面", "search-child-categories": "搜索子版面", - "has-tags": "Has tags", + "has-tags": "有标签", "reply-count": "回复数", "at-least": "至少", "at-most": "至多", @@ -30,7 +30,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 04bb512dc1..ec9d3a7242 100644 --- a/public/language/zh-CN/topic.json +++ b/public/language/zh-CN/topic.json @@ -86,8 +86,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/unread.json b/public/language/zh-CN/unread.json index bd4d52074b..1a71850e6f 100644 --- a/public/language/zh-CN/unread.json +++ b/public/language/zh-CN/unread.json @@ -5,7 +5,7 @@ "mark_as_read": "标为已读", "selected": "已选", "all": "全部", - "all_categories": "全部分类", + "all_categories": "全部板块", "topics_marked_as_read.success": "主题被标为已读!", "all-topics": "全部主题", "new-topics": "新建主题", diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json index 0fe73681e2..ec8ce2a270 100644 --- a/public/language/zh-CN/user.json +++ b/public/language/zh-CN/user.json @@ -1,5 +1,5 @@ { - "banned": "禁止", + "banned": "封禁", "offline": "离线", "username": "用户名", "joindate": "注册日期", @@ -7,8 +7,8 @@ "email": "电子邮件", "confirm_email": "确认电子邮箱", "account_info": "账户信息", - "ban_account": "禁止账户", - "ban_account_confirm": "您确定禁止这位用户吗?", + "ban_account": "封禁账户", + "ban_account_confirm": "您确定封禁这位用户吗?", "unban_account": "解禁账户", "delete_account": "删除帐号", "delete_account_confirm": "确认要删除您的帐户吗?
此操作是不可逆转的,您将无法恢复您的任何数据

请输入您的用户名,确认您想要删除此帐户。", @@ -22,9 +22,9 @@ "lastonline": "最后登录", "profile": "资料", "profile_views": "资料浏览", - "reputation": "威望", + "reputation": "声望", "bookmarks": "书签", - "watched": "已订阅", + "watched": "已关注", "followers": "粉丝", "following": "关注", "aboutme": "关于我", @@ -42,7 +42,7 @@ "change_email": "更改电子邮箱", "edit": "编辑", "edit-profile": "编辑资料", - "default_picture": "缺省图标", + "default_picture": "默认图标", "uploaded_picture": "已有头像", "upload_new_picture": "上传新头像", "upload_new_picture_from_url": "从 URL 上传新图片", @@ -62,8 +62,8 @@ "upload_picture": "上传头像", "upload_a_picture": "上传头像", "remove_uploaded_picture": "删除已上传的头像", - "upload_cover_picture": "上传个人资料封面图片", - "remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?", + "upload_cover_picture": "上传封面图片", + "remove_cover_picture_confirm": "您确定要移除封面图片吗?", "settings": "设置", "show_email": "显示我的电子邮箱", "show_fullname": "显示我的全名", @@ -95,22 +95,22 @@ "incoming-message-sound": "消息到达提示音", "outgoing-message-sound": "消息送出提示音", "notification-sound": "通知提示音", - "no-sound": "没有声音", + "no-sound": "无提示音", "browsing": "浏览设置", "open_links_in_new_tab": "在新标签打开外部链接", "enable_topic_searching": "启用主题内搜索", "topic_search_help": "如果启用此项,主题内搜索会替代浏览器默认的页面搜索,您将可以在整个主题内搜索,而不仅仅只搜索页面上展现的内容。", "delay_image_loading": "延迟图片加载", "image_load_delay_help": "启用后,帖子中的图片仅在用户滚动到图片所在位置时加载", - "scroll_to_my_post": "在提交回复之后显示新帖子", + "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": "首页", - "homepage_description": "选择一个页面作为论坛的首页,否则设置为 ‘空’ 使用缺省首页。", + "homepage_description": "选择一个页面作为论坛的首页,否则设置为 ‘空’ 使用默认首页。", "custom_route": "自定义首页路由", "custom_route_help": "输入路由名称,前面不需要斜杠 ( 例如, \"recent\" 或 \"popular\" )", "sso.title": "单点登录服务", diff --git a/public/language/zh-CN/users.json b/public/language/zh-CN/users.json index 44af27c94d..d6795469f2 100644 --- a/public/language/zh-CN/users.json +++ b/public/language/zh-CN/users.json @@ -1,7 +1,7 @@ { "latest_users": "最新会员", "top_posters": "发帖排行", - "most_reputation": "威望排行", + "most_reputation": "声望排行", "most_flags": "最多举报", "search": "搜索", "enter_username": "输入用户名搜索", diff --git a/public/language/zh-TW/admin/admin.json b/public/language/zh-TW/admin/admin.json index 9c01f56006..eb44d22c6c 100644 --- a/public/language/zh-TW/admin/admin.json +++ b/public/language/zh-TW/admin/admin.json @@ -1,7 +1,7 @@ { - "alert.confirm-reload": "Are you sure you wish to reload NodeBB?", - "alert.confirm-restart": "Are you sure you wish to restart NodeBB?", + "alert.confirm-reload": "確認重載NodeBB?", + "alert.confirm-restart": "確認重啟NodeBB?", - "acp-title": "%1 | NodeBB Admin Control Panel", - "settings-header-contents": "Contents" + "acp-title": "%1 | NodeBB 管理控制面板", + "settings-header-contents": "内容" } \ No newline at end of file diff --git a/public/language/zh-TW/global.json b/public/language/zh-TW/global.json index 1c4a8990bb..b6f8f5d7d2 100644 --- a/public/language/zh-TW/global.json +++ b/public/language/zh-TW/global.json @@ -99,7 +99,7 @@ "allowed-file-types": "允許的檔案類型是 %1", "unsaved-changes": "你還沒有儲存更動。你確定想要離開這個頁面?", "reconnecting-message": "看起來你的連線到 %1 已經遺失,請稍等一下我們嘗試重新連線。", - "play": "Play", + "play": "播放", "cookies.message": "This website uses cookies to ensure you get the best experience on our website.", "cookies.accept": "Got it!", "cookies.learn_more": "Learn More", diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 351c7a624b..cb0eb22a35 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -73,7 +73,7 @@ define('admin/manage/category', [ } - $('form.category input, form.category select') + $('form.category input, form.category select').not($('.privilege-table-container input')) .on('change', function (ev) { modified(ev.target); }) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 7eb46343e5..6b18e5dda0 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -67,9 +67,7 @@ $(document).ready(function () { apiXHR.abort(); } - if (!window.location.pathname.match(/\/(403|404)$/g)) { - app.previousUrl = window.location.href; - } + app.previousUrl = window.location.href; url = ajaxify.start(url); @@ -95,10 +93,7 @@ $(document).ready(function () { retry = true; app.template = data.template.name; - require(['translator'], function (translator) { - translator.load(translator.getLanguage(), data.template.name); - renderTemplate(url, data.template.name, data, callback); - }); + renderTemplate(url, data.template.name, data, callback); }); return true; diff --git a/public/src/client/category.js b/public/src/client/category.js index 4afabb5093..24b0d274f6 100644 --- a/public/src/client/category.js +++ b/public/src/client/category.js @@ -103,12 +103,9 @@ define('forum/category', [ return bottomIndex; }; - $(window).on('action:popstate', function (ev, data) { - if (data.url.startsWith('category/')) { - var cid = data.url.match(/^category\/(\d+)/); - if (cid && cid[1]) { - cid = cid[1]; - } + $(window).on('action:ajaxify.contentLoaded', function (ev, data) { + if (ajaxify.data.template.category) { + var cid = ajaxify.data.cid; if (!cid) { return; } @@ -140,7 +137,9 @@ define('forum/category', [ $('[component="category"]').empty(); loadTopicsAfter(Math.max(0, bookmarkIndex - 1) + 1, 1, function () { - Category.scrollToTopic(bookmarkIndex, clickedIndex, 0); + $(window).one('action:topics.loaded', function () { + Category.scrollToTopic(bookmarkIndex, clickedIndex, 0); + }); }); } } @@ -167,9 +166,8 @@ define('forum/category', [ } var scrollTo = components.get('category/topic', 'index', bookmarkIndex); - var cid = ajaxify.data.cid; - if (scrollTo.length && cid) { + if (scrollTo.length) { $('html, body').animate({ scrollTop: (scrollTo.offset().top - offset) + 'px' }, duration !== undefined ? duration : 400, function () { @@ -272,7 +270,7 @@ define('forum/category', [ return callback(); } - $(window).trigger('action:categories.loading'); + $(window).trigger('action:category.loading'); var params = utils.params(); infinitescroll.loadMore('categories.loadMore', { cid: ajaxify.data.cid, @@ -288,7 +286,7 @@ define('forum/category', [ done(); } - $(window).trigger('action:categories.loaded'); + $(window).trigger('action:category.loaded'); callback(); }); } diff --git a/public/src/client/infinitescroll.js b/public/src/client/infinitescroll.js index 6ae9b5cbbc..ed43e4da22 100644 --- a/public/src/client/infinitescroll.js +++ b/public/src/client/infinitescroll.js @@ -23,7 +23,9 @@ define('forum/infinitescroll', function () { }; function onScroll() { - if (loadingMore) { + var bsEnv = utils.findBootstrapEnvironment(); + var mobileComposerOpen = (bsEnv === 'xs' || bsEnv === 'sm') && $('html').hasClass('composing'); + if (loadingMore || mobileComposerOpen) { return; } var currentScrollTop = $(window).scrollTop(); diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index a913da80b7..3035d29fc4 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -69,10 +69,10 @@ helpers.stripTags = function (str) { if (typeof S !== 'undefined') { - return S(str).stripTags().s; + return S(String(str)).stripTags().s; } else { var S = require('string'); - return S(str).stripTags().s; + return S(String(str)).stripTags().s; } }; diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index ff2aa53bb0..aa719ff1a2 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -450,10 +450,12 @@ return cb(''); } - Translator.create(lang).translate(text).then(function (output) { - return cb(output); - }).catch(function (err) { + Translator.create(lang).translate(text).catch(function (err) { warn('Translation failed: ' + err.stack); + }).then(function (output) { + cb(output); + }).catch(function (err) { + console.error(err); }); }, diff --git a/public/vendor/bootbox/wrapper.js b/public/vendor/bootbox/wrapper.js index 8e54e0e7db..505b42788f 100644 --- a/public/vendor/bootbox/wrapper.js +++ b/public/vendor/bootbox/wrapper.js @@ -22,8 +22,9 @@ require(['translator'], function (shim) { var translator = shim.Translator.create(); var dialog = bootbox.dialog; + var attrsToTranslate = ['placeholder', 'title', 'value']; bootbox.dialog = function (options) { - var show, $elem, nodes, text; + var show, $elem, nodes, text, attrNodes, attrText; show = options.show !== false; options.show = false; @@ -36,10 +37,31 @@ require(['translator'], function (shim) { return node.nodeValue; }).join(' || '); - translator.translate(text).then(function (translated) { - translated.split(' || ').forEach(function (html, i) { - $(nodes[i]).replaceWith(html); - }); + attrNodes = attrsToTranslate.reduce(function (prev, attr) { + return prev.concat(nodes.map.call($elem.find('[' + attr + '*="[["]'), function (el) { + return [attr, el]; + })); + }, []); + attrText = attrNodes.map(function (node) { + return node[1].getAttribute(node[0]); + }).join(' || '); + + Promise.all([ + translator.translate(text), + translator.translate(attrText), + ]).then(function (ref) { + var translated = ref[0]; + var translatedAttrs = ref[1]; + if (translated) { + translated.split(' || ').forEach(function (html, i) { + $(nodes[i]).replaceWith(html); + }); + } + if (translatedAttrs) { + translatedAttrs.split(' || ').forEach(function (text, i) { + attrNodes[i][1].setAttribute(attrNodes[i][0], text); + }); + } if (show) { $elem.modal('show'); } diff --git a/src/categories/topics.js b/src/categories/topics.js index 1459bca531..9e477e51ef 100644 --- a/src/categories/topics.js +++ b/src/categories/topics.js @@ -28,7 +28,7 @@ module.exports = function (Categories) { topics[i].index = data.start + i; } - plugins.fireHook('filter:category.topics.get', {topics: topics, uid: data.uid}, next); + plugins.fireHook('filter:category.topics.get', {cid: data.cid, topics: topics, uid: data.uid}, next); }, function (results, next) { next(null, {topics: results.topics, nextStart: data.stop + 1}); diff --git a/src/controllers/admin/blacklist.js b/src/controllers/admin/blacklist.js index c9ba71169e..73e4d6c333 100644 --- a/src/controllers/admin/blacklist.js +++ b/src/controllers/admin/blacklist.js @@ -9,7 +9,10 @@ blacklistController.get = function (req, res, next) { if (err) { return next(err); } - res.render('admin/manage/ip-blacklist', { rules: rules }); + res.render('admin/manage/ip-blacklist', { + rules: rules, + title: '[[pages:ip-blacklist]]' + }); }); }; diff --git a/src/controllers/admin/dashboard.js b/src/controllers/admin/dashboard.js index 22105b6652..09c2838d73 100644 --- a/src/controllers/admin/dashboard.js +++ b/src/controllers/admin/dashboard.js @@ -19,14 +19,14 @@ dashboardController.get = function (req, res, next) { var notices = [ { done: !meta.reloadRequired, - doneText: 'Restart not required', - notDoneText:'Restart required' + doneText: '[[admin/general/dashboard:restart-not-required]]', + notDoneText:'[[admin/general/dashboard:restart-required]]' }, { done: plugins.hasListeners('filter:search.query'), - doneText: 'Search Plugin Installed', - notDoneText:'Search Plugin not installed', - tooltip: 'Install a search plugin from the plugin page in order to activate search functionality', + doneText: '[[admin/general/dashboard:search-plugin-installed]]', + notDoneText:'[[admin/general/dashboard:search-plugin-not-installed]]', + tooltip: '[[admin/general/dashboard:search-plugin-tooltip]]', link:'/admin/extend/plugins' } ]; @@ -62,10 +62,10 @@ function getStats(callback) { if (err) { return callback(err); } - results[0].name = 'Unique Visitors'; - results[1].name = 'Users'; - results[2].name = 'Posts'; - results[3].name = 'Topics'; + results[0].name = '[[admin/general/dashboard:unique-visitors]]'; + results[1].name = '[[admin/general/dashboard:users]]'; + results[2].name = '[[admin/general/dashboard:posts]]'; + results[3].name = '[[admin/general/dashboard:topics]]'; callback(null, results); }); @@ -101,4 +101,4 @@ function getGlobalField(field, callback) { }); } -module.exports = dashboardController; \ No newline at end of file +module.exports = dashboardController; diff --git a/src/controllers/index.js b/src/controllers/index.js index 57943d7078..7b97c878d6 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -212,7 +212,9 @@ Controllers.registerInterstitial = function (req, res, next) { } if (!data.interstitials.length) { - return next(); + // No interstitials, redirect to home + delete req.session.registration; + return res.redirect('/'); } var renders = data.interstitials.map(function (interstitial) { diff --git a/src/controllers/uploads.js b/src/controllers/uploads.js index b50b851e90..18b0b63dda 100644 --- a/src/controllers/uploads.js +++ b/src/controllers/uploads.js @@ -197,11 +197,8 @@ function uploadFile(uid, uploadedFile, callback) { if (meta.config.hasOwnProperty('allowedFileExtensions')) { var allowed = file.allowedExtensions(); - var extension = path.extname(uploadedFile.name); - if (!extension) { - extension = '.' + mime.extension(uploadedFile.type); - } - if (allowed.length > 0 && allowed.indexOf(extension) === -1) { + var extension = typeToExtension(uploadedFile.type); + if (!extension || (allowed.length > 0 && allowed.indexOf(extension) === -1)) { return callback(new Error('[[error:invalid-file-type, ' + allowed.join(', ') + ']]')); } } @@ -210,14 +207,13 @@ function uploadFile(uid, uploadedFile, callback) { } function saveFileToLocal(uploadedFile, callback) { - var extension = path.extname(uploadedFile.name); - if (!extension && uploadedFile.type) { - extension = '.' + mime.extension(uploadedFile.type); + var extension = typeToExtension(uploadedFile.type); + if (!extension) { + return callback(new Error('[[error:invalid-extension]]')); } - var filename = uploadedFile.name || 'upload'; - filename = Date.now() + '-' + validator.escape(filename.replace(extension, '')).substr(0, 255) + extension; + filename = Date.now() + '-' + validator.escape(filename.replace(path.extname(uploadedFile.name) || '', '')).substr(0, 255) + extension; file.saveFileToLocal(filename, 'files', uploadedFile.path, function (err, upload) { if (err) { @@ -232,6 +228,14 @@ function saveFileToLocal(uploadedFile, callback) { }); } +function typeToExtension(type) { + var extension; + if (type) { + extension = '.' + mime.extension(type); + } + return extension; +} + function deleteTempFiles(files) { async.each(files, function (file, next) { fs.unlink(file.path, function (err) { diff --git a/src/coverPhoto.js b/src/coverPhoto.js index 9380b347f4..6307110253 100644 --- a/src/coverPhoto.js +++ b/src/coverPhoto.js @@ -15,7 +15,7 @@ coverPhoto.getDefaultProfileCover = function (uid) { function getCover(type, id) { if (meta.config[type + ':defaultCovers']) { - var covers = meta.config[type + ':defaultCovers'].split(/\s*?,\s*?/g); + var covers = meta.config[type + ':defaultCovers'].trim().split(/[\s,]+/g); if (typeof id === 'string') { id = (id.charCodeAt(0) + id.charCodeAt(1)) % covers.length; @@ -29,4 +29,4 @@ function getCover(type, id) { return nconf.get('relative_path') + '/assets/images/cover-default.png'; } -module.exports = coverPhoto; \ No newline at end of file +module.exports = coverPhoto; diff --git a/src/database/mongo.js b/src/database/mongo.js index 2e09047da1..3a3331e900 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -47,7 +47,7 @@ module.helpers.mongo = require('./mongo/helpers'); module.init = function (callback) { - callback = callback || function () {}; + callback = callback || function () { }; var mongoClient; try { mongoClient = require('mongodb').MongoClient; @@ -111,38 +111,46 @@ if (err) { return callback(err); } - createSessionStore(); + callback(); }); } else { winston.warn('You have no mongo password setup!'); - createSessionStore(); - } - - function createSessionStore() { - var sessionStore; - if (nconf.get('redis')) { - sessionStore = require('connect-redis')(session); - var rdb = require('./redis'); - rdb.client = rdb.connect(); - - module.sessionStore = new sessionStore({ - client: rdb.client, - ttl: 60 * 60 * 24 * 14 - }); - } else if (nconf.get('mongo')) { - sessionStore = require('connect-mongo')(session); - module.sessionStore = new sessionStore({ - db: db - }); - } callback(); - } + } }); }; + module.initSessionStore = function (callback) { + var meta = require('../meta'); + var sessionStore; + + var ttlDays = 1000 * 60 * 60 * 24 * (parseInt(meta.config.loginDays, 10) || 0); + var ttlSeconds = 1000 * (parseInt(meta.config.loginSeconds, 10) || 0); + var ttl = ttlSeconds || ttlDays || 1209600000; // Default to 14 days + + if (nconf.get('redis')) { + sessionStore = require('connect-redis')(session); + var rdb = require('./redis'); + rdb.client = rdb.connect(); + + module.sessionStore = new sessionStore({ + client: rdb.client, + ttl: ttl + }); + } else if (nconf.get('mongo')) { + sessionStore = require('connect-mongo')(session); + module.sessionStore = new sessionStore({ + db: db, + ttl: ttl + }); + } + + callback(); + }; + module.createIndices = function (callback) { function createIndex(collection, index, options, callback) { - module.client.collection(collection).createIndex(index, options, callback); + module.client.collection(collection).createIndex(index, options, callback); } if (!module.client) { @@ -152,9 +160,9 @@ winston.info('[database] Checking database indices.'); async.series([ - async.apply(createIndex, 'objects', {_key: 1, score: -1}, {background: true}), - async.apply(createIndex, 'objects', {_key: 1, value: -1}, {background: true, unique: true, sparse: true}), - async.apply(createIndex, 'objects', {expireAt: 1}, {expireAfterSeconds: 0, background: true}) + async.apply(createIndex, 'objects', { _key: 1, score: -1 }, { background: true }), + async.apply(createIndex, 'objects', { _key: 1, value: -1 }, { background: true, unique: true, sparse: true }), + async.apply(createIndex, 'objects', { expireAt: 1 }, { expireAfterSeconds: 0, background: true }) ], function (err) { if (err) { winston.error('Error creating index ' + err.message); @@ -162,16 +170,16 @@ } winston.info('[database] Checking database indices done!'); callback(); - }); + }); }; module.checkCompatibility = function (callback) { var mongoPkg = require.main.require('./node_modules/mongodb/package.json'); - + if (semver.lt(mongoPkg.version, '2.0.0')) { return callback(new Error('The `mongodb` package is out-of-date, please run `./nodebb setup` again.')); } - + callback(); }; @@ -181,10 +189,10 @@ } async.parallel({ serverStatus: function (next) { - db.command({'serverStatus': 1}, next); + db.command({ 'serverStatus': 1 }, next); }, stats: function (next) { - db.command({'dbStats': 1}, next); + db.command({ 'dbStats': 1 }, next); }, listCollections: function (next) { db.listCollections().toArray(function (err, items) { @@ -239,4 +247,4 @@ db.close(); }; -}(exports)); +} (exports)); diff --git a/src/database/redis.js b/src/database/redis.js index f1c00a2316..8519b57bae 100644 --- a/src/database/redis.js +++ b/src/database/redis.js @@ -38,7 +38,6 @@ module.init = function (callback) { try { redis = require('redis'); - connectRedis = require('connect-redis')(session); } catch (err) { winston.error('Unable to initialize Redis! Is Redis installed? Error :' + err.message); process.exit(); @@ -48,11 +47,6 @@ module.client = redisClient; - module.sessionStore = new connectRedis({ - client: redisClient, - ttl: 60 * 60 * 24 * 14 - }); - require('./redis/main')(redisClient, module); require('./redis/hash')(redisClient, module); require('./redis/sets')(redisClient, module); @@ -64,6 +58,24 @@ } }; + module.initSessionStore = function (callback) { + var meta = require('../meta'); + var sessionStore = require('connect-redis')(session); + + var ttlDays = 1000 * 60 * 60 * 24 * (parseInt(meta.config.loginDays, 10) || 0); + var ttlSeconds = 1000 * (parseInt(meta.config.loginSeconds, 10) || 0); + var ttl = ttlSeconds || ttlDays || 1209600000; // Default to 14 days + + module.sessionStore = new sessionStore({ + client: module.client, + ttl: ttl + }); + + if (typeof callback === 'function') { + callback(); + } + }; + module.connect = function (options) { var redis_socket_or_host = nconf.get('redis:host'); var cxn; @@ -97,7 +109,7 @@ var dbIdx = parseInt(nconf.get('redis:database'), 10); if (dbIdx) { cxn.select(dbIdx, function (error) { - if(error) { + if (error) { winston.error("NodeBB could not connect to your Redis database. Redis returned the following error: " + error.message); process.exit(); } @@ -156,5 +168,5 @@ module.helpers = module.helpers || {}; module.helpers.redis = require('./redis/helpers'); -}(exports)); +} (exports)); diff --git a/src/emailer.js b/src/emailer.js index ce90839f12..4ccd35ed99 100644 --- a/src/emailer.js +++ b/src/emailer.js @@ -131,7 +131,7 @@ var fallbackTransport; data.from = data.from_name + '<' + data.from + '>'; delete data.from_name; - winston.verbose('[emailer] Sending email to uid ' + data.uid); + winston.verbose('[emailer] Sending email to uid ' + data.uid + ' (' + data.to + ')'); fallbackTransport.sendMail(data, function (err) { if (err) { winston.error(err); diff --git a/src/languages.js b/src/languages.js index 5374b9d87f..0769656519 100644 --- a/src/languages.js +++ b/src/languages.js @@ -52,7 +52,10 @@ Languages.list = function (callback) { return next(err); } if (buffer) { - languages.push(JSON.parse(buffer.toString())); + var lang = JSON.parse(buffer.toString()); + if (lang.name && lang.code && lang.dir) { + languages.push(lang); + } } next(); }); diff --git a/src/messaging.js b/src/messaging.js index 5bb668ae6e..a37503e3e3 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -210,7 +210,9 @@ Messaging.getTeaser = function (uid, roomId, callback) { }, function (user, next) { teaser.user = user; - next(null, teaser); + plugins.fireHook('filter:messaging.getTeaser', { teaser: teaser }, function (err, data) { + next(err, data.teaser); + }); } ], callback); }; diff --git a/build.js b/src/meta/build.js similarity index 94% rename from build.js rename to src/meta/build.js index 89c55177ad..2351a4f6c8 100644 --- a/build.js +++ b/src/meta/build.js @@ -14,9 +14,9 @@ exports.buildAll = function (callback) { exports.build = function build(targets, callback) { buildStart = Date.now(); - var db = require('./src/database'); - var meta = require('./src/meta'); - var plugins = require('./src/plugins'); + var db = require('../database'); + var meta = require('../meta'); + var plugins = require('../plugins'); targets = (targets === true ? valid : targets.split(',').filter(function (target) { @@ -43,9 +43,8 @@ exports.build = function build(targets, callback) { }; exports.buildTargets = function (targets, callback) { - var meta = require('./src/meta'); - var cacheBuster = require('./src/meta/cacheBuster'); - + var cacheBuster = require('./cacheBuster'); + var meta = require('../meta'); buildStart = buildStart || Date.now(); var step = function (startTime, target, next, err) { diff --git a/src/meta/languages.js b/src/meta/languages.js index fca4473b0b..b7c79db5ba 100644 --- a/src/meta/languages.js +++ b/src/meta/languages.js @@ -5,6 +5,7 @@ var path = require('path'); var async = require('async'); var fs = require('fs'); var mkdirp = require('mkdirp'); +var rimraf = require('rimraf'); var file = require('../file'); var utils = require('../../public/src/utils'); @@ -14,19 +15,9 @@ var db = require('../database'); var buildLanguagesPath = path.join(__dirname, '../../build/public/language'); var coreLanguagesPath = path.join(__dirname, '../../public/language'); -function extrude(languageDir, paths) { - return paths.map(function (p) { - var rel = p.split(languageDir)[1].split(/[\/\\]/).slice(1); - return { - language: rel.shift().replace('_', '-').replace('@', '-x-'), - namespace: rel.join('/').replace(/\.json$/, ''), - path: p, - }; - }); -} - function getTranslationTree(callback) { async.waterfall([ + // get plugin data function (next) { db.getSortedSetRange('plugins:active', 0, -1, next); }, @@ -44,70 +35,162 @@ function getTranslationTree(callback) { function (paths, next) { async.map(paths, Plugins.loadPluginInfo, next); }, + + // generate list of languages and namespaces function (plugins, next) { - async.parallel({ - corePaths: function (cb) { + var languages = [], namespaces = []; + + // pull languages and namespaces from paths + function extrude(languageDir, paths) { + paths.forEach(function (p) { + var rel = p.split(languageDir)[1].split(/[\/\\]/).slice(1); + var language = rel.shift().replace('_', '-').replace('@', '-x-'); + var namespace = rel.join('/').replace(/\.json$/, ''); + + if (!language || !namespace) { + return; + } + + if (languages.indexOf(language) === -1) { + languages.push(language); + } + if (namespaces.indexOf(namespace) === -1) { + namespaces.push(namespace); + } + }); + } + + plugins = plugins.filter(function (pluginData) { + return (typeof pluginData.languages === 'string'); + }); + async.parallel([ + // get core languages and namespaces + function (nxt) { utils.walk(coreLanguagesPath, function (err, paths) { if (err) { - return cb(err); + return nxt(err); } - cb(null, extrude(coreLanguagesPath, paths)); + extrude(coreLanguagesPath, paths); + nxt(); }); }, - pluginPaths: function (nxt) { - plugins = plugins.filter(function (pluginData) { - return (typeof pluginData.languages === 'string'); - }); - async.map(plugins, function (pluginData, cb) { + // get plugin languages and namespaces + function (nxt) { + async.each(plugins, function (pluginData, cb) { var pathToFolder = path.join(__dirname, '../../node_modules/', pluginData.id, pluginData.languages); utils.walk(pathToFolder, function (err, paths) { if (err) { return cb(err); } - cb(null, extrude(pathToFolder, paths)); + extrude(pathToFolder, paths); + cb(); }); }, nxt); + }, + ], function (err) { + if (err) { + return next(err); } - }, next); - }, - function (data, next) { - var paths = data.pluginPaths.concat.apply([], data.pluginPaths); - paths = data.corePaths.concat(paths); - paths = paths.filter(function (p) { - return p.language && p.namespace && p.path; + + next(null, { + languages: languages, + namespaces: namespaces, + plugins: plugins, + }); }); + }, + + // for each language and namespace combination, + // run through core and all plugins to generate + // a full translation hash + function (ref, next) { + var languages = ref.languages; + var namespaces = ref.namespaces; + var plugins = ref.plugins; var tree = {}; - - async.eachLimit(paths, 1000, function (data, cb) { - fs.readFile(data.path, function (err, file) { - if (err) { - return cb(err); - } - try { - var obj = JSON.parse(file.toString()); + async.eachLimit(languages, 10, function (lang, nxt) { + async.eachLimit(namespaces, 10, function (ns, cb) { + var translations = {}; - tree[data.language] = tree[data.language] || {}; - tree[data.language][data.namespace] = tree[data.language][data.namespace] || {}; - Object.assign(tree[data.language][data.namespace], obj); - - cb(); - } catch (e) { - winston.warn('[build] Invalid JSON file at `' + data.path + '`'); - cb(); - } - }); + async.series([ + // core first + function (n) { + fs.readFile(path.join(coreLanguagesPath, lang, ns + '.json'), function (err, buffer) { + if (err) { + if (err.code === 'ENOENT') { + return n(); + } + return n(err); + } + + try { + Object.assign(translations, JSON.parse(buffer.toString())); + n(); + } catch (err) { + n(err); + } + }); + }, + function (n) { + // for each plugin, fallback in this order: + // 1. correct language string (en-GB) + // 2. old language string (en_GB) + // 3. corrected plugin defaultLang (en-US) + // 4. old plugin defaultLang (en_US) + async.eachLimit(plugins, 10, function (pluginData, call) { + var pluginLanguages = path.join(__dirname, '../../node_modules/', pluginData.id, pluginData.languages); + var defaultLang = pluginData.defaultLang || 'en-GB'; + + async.some([ + lang, + lang.replace('-', '_').replace('-x-', '@'), + defaultLang.replace('_', '-').replace('@', '-x-'), + defaultLang.replace('-', '_').replace('-x-', '@'), + ], function (language, next) { + fs.readFile(path.join(pluginLanguages, language, ns + '.json'), function (err, buffer) { + if (err) { + if (err.code === 'ENOENT') { + return next(null, false); + } + return next(err); + } + + try { + Object.assign(translations, JSON.parse(buffer.toString())); + next(null, true); + } catch (err) { + next(err); + } + }); + }, call); + }, function (err) { + if (err) { + return n(err); + } + + if (Object.keys(translations).length) { + tree[lang] = tree[lang] || {}; + tree[lang][ns] = translations; + } + n(); + }); + }, + ], cb); + }, nxt); }, function (err) { next(err, tree); }); - } + }, ], callback); } +// write translation hashes from the generated tree to language files function writeLanguageFiles(tree, callback) { + // iterate over languages and namespaces async.eachLimit(Object.keys(tree), 10, function (language, cb) { var namespaces = tree[language]; async.eachLimit(Object.keys(namespaces), 100, function (namespace, next) { @@ -126,17 +209,18 @@ function writeLanguageFiles(tree, callback) { }, callback); } -module.exports = { - build: function buildLanguages(callback) { - async.waterfall([ - getTranslationTree, - writeLanguageFiles, - ], function (err) { - if (err) { - winston.error('[build] Language build failed'); - throw err; - } - callback(); - }); - }, +exports.build = function buildLanguages(callback) { + async.waterfall([ + function (next) { + rimraf(buildLanguagesPath, next); + }, + getTranslationTree, + writeLanguageFiles, + ], function (err) { + if (err) { + winston.error('[build] Language build failed: ' + err.message); + throw err; + } + callback(); + }); }; diff --git a/src/middleware/render.js b/src/middleware/render.js index 59348aba34..688b32c66f 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -3,6 +3,7 @@ var async = require('async'); var nconf = require('nconf'); var validator = require('validator'); +var winston = require('winston'); var plugins = require('../plugins'); var translator = require('../../public/src/modules/translator'); @@ -114,7 +115,13 @@ module.exports = function (middleware) { var clean = req.path.replace(/^\/api/, '').replace(/^\/|\/$/g, ''); var parts = clean.split('/').slice(0, 3); parts.forEach(function (p, index) { - p = decodeURIComponent(p); + try { + p = decodeURIComponent(p); + } catch (err) { + winston.error(err.message); + p = ''; + } + parts[index] = index ? parts[0] + '-' + p : 'page-' + (p || 'home'); }); return parts.join(' '); diff --git a/src/posts/create.js b/src/posts/create.js index 2b626bd52b..3484bc424e 100644 --- a/src/posts/create.js +++ b/src/posts/create.js @@ -19,6 +19,7 @@ module.exports = function (Posts) { var tid = data.tid; var content = data.content.toString(); var timestamp = data.timestamp || Date.now(); + var isMain = data.isMain || false; if (!uid && parseInt(uid, 10) !== 0) { return callback(new Error('[[error:invalid-uid]]')); @@ -106,6 +107,7 @@ module.exports = function (Posts) { }); }, function (postData, next) { + postData.isMain = isMain; plugins.fireHook('action:post.save', _.clone(postData)); next(null, postData); } diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index b16bafa296..987f607ec9 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -57,7 +57,7 @@ SocketAdmin.reload = function (socket, data, callback) { }; SocketAdmin.restart = function (socket, data, callback) { - require('../../build').buildAll(function (err) { + require('../meta/build').buildAll(function (err) { if (err) { return callback(err); } diff --git a/src/start.js b/src/start.js index f44b90643d..d314596036 100644 --- a/src/start.js +++ b/src/start.js @@ -40,6 +40,9 @@ start.start = function () { next(err); }); }, + function (next) { + db.initSessionStore(next); + }, function (next) { var webserver = require('./webserver'); require('./socket.io').init(webserver.server); diff --git a/src/topics/tools.js b/src/topics/tools.js index c69b0692ab..cccffa8c75 100644 --- a/src/topics/tools.js +++ b/src/topics/tools.js @@ -272,7 +272,7 @@ module.exports = function (Topics) { db.sortedSetsRemove([ 'cid:' + topicData.cid + ':tids', 'cid:' + topicData.cid + ':tids:pinned', - 'cid:' + topicData.cid + ':tids:posts' + 'cid:' + topicData.cid + ':tids:posts' // post count ], tid, next); }, function (next) { diff --git a/src/views/admin/manage/flags.tpl b/src/views/admin/manage/flags.tpl index 542c0587ca..c267b84dd5 100644 --- a/src/views/admin/manage/flags.tpl +++ b/src/views/admin/manage/flags.tpl @@ -51,7 +51,7 @@ - +
diff --git a/src/views/admin/settings/user.tpl b/src/views/admin/settings/user.tpl index b10ed37da9..c7373fbeb7 100644 --- a/src/views/admin/settings/user.tpl +++ b/src/views/admin/settings/user.tpl @@ -20,7 +20,8 @@
- +
@@ -103,10 +104,6 @@ -
- - -
@@ -115,6 +112,24 @@
+
+
+ Session time +
+
+
+
+ + + + +

Note that only one of these values will be used. If there is no seconds value we fall back to days. If + there is no days value we default to 14 days.

+
+
+
+
+
[[admin/settings/user:registration]]
@@ -259,4 +274,4 @@
- + \ No newline at end of file diff --git a/src/webserver.js b/src/webserver.js index a8324f7376..ee2605cdb2 100644 --- a/src/webserver.js +++ b/src/webserver.js @@ -52,7 +52,7 @@ server.on('error', function (err) { }); module.exports.listen = function (callback) { - callback = callback || function () {}; + callback = callback || function () { }; emailer.registerApp(app); setupExpressApp(app); @@ -135,7 +135,7 @@ function setupExpressApp(app) { app.use(relativePath + '/apple-touch-icon', middleware.routeTouchIcon); - app.use(bodyParser.urlencoded({extended: true})); + app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(cookieParser()); app.use(useragent.express()); @@ -166,8 +166,12 @@ function setupFavicon(app) { } function setupCookie() { + var ttlDays = 1000 * 60 * 60 * 24 * (parseInt(meta.config.loginDays, 10) || 0); + var ttlSeconds = 1000 * (parseInt(meta.config.loginSeconds, 10) || 0); + var ttl = ttlSeconds || ttlDays || 1209600000; // Default to 14 days + var cookie = { - maxAge: 1000 * 60 * 60 * 24 * (parseInt(meta.config.loginDays, 10) || 14) + maxAge: ttl }; if (nconf.get('cookieDomain') || meta.config.cookieDomain) { @@ -187,7 +191,7 @@ function setupCookie() { } function listen(callback) { - callback = callback || function () {}; + callback = callback || function () { }; var port = parseInt(nconf.get('port'), 10); var isSocket = isNaN(port); var socketPath = isSocket ? nconf.get('port') : ''; diff --git a/test/mocks/databasemock.js b/test/mocks/databasemock.js index b7ed4cfb8c..fa17493ae2 100644 --- a/test/mocks/databasemock.js +++ b/test/mocks/databasemock.js @@ -100,6 +100,9 @@ function (next) { meta.configs.init(next); }, + function (next) { + db.initSessionStore(next); + }, function (next) { meta.dependencies.check(next); }, @@ -140,7 +143,7 @@ nconf.set('theme_config', path.join(nconf.get('themes_path'), 'nodebb-theme-persona', 'theme.json')); nconf.set('bcrypt_rounds', 1); - require('../../build').buildAll(next); + next(); }, function (next) { var webserver = require('../../src/webserver');