diff --git a/.editorconfig b/.editorconfig index 71340c4063..71cf54ef4d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,6 +1,6 @@ root = true -[*.js, *.css, *.tpl, *.json] +[{*.js, *.css, *.tpl, *.json}] indent_style = tab end_of_line = lf charset = utf-8 diff --git a/.tx/config b/.tx/config index 3d20c53234..d8dce705c9 100644 --- a/.tx/config +++ b/.tx/config @@ -19,6 +19,7 @@ trans.fi = public/language/fi/category.json trans.fr = public/language/fr/category.json trans.he = public/language/he/category.json trans.hu = public/language/hu/category.json +trans.id = public/language/id/category.json trans.it = public/language/it/category.json trans.ja = public/language/ja/category.json trans.ko = public/language/ko/category.json @@ -58,6 +59,7 @@ trans.fi = public/language/fi/login.json trans.fr = public/language/fr/login.json trans.he = public/language/he/login.json trans.hu = public/language/hu/login.json +trans.id = public/language/id/login.json trans.it = public/language/it/login.json trans.ja = public/language/ja/login.json trans.ko = public/language/ko/login.json @@ -96,6 +98,7 @@ trans.fi = public/language/fi/recent.json trans.fr = public/language/fr/recent.json trans.he = public/language/he/recent.json trans.hu = public/language/hu/recent.json +trans.id = public/language/id/recent.json trans.it = public/language/it/recent.json trans.ja = public/language/ja/recent.json trans.ko = public/language/ko/recent.json @@ -134,6 +137,7 @@ trans.fi = public/language/fi/unread.json trans.fr = public/language/fr/unread.json trans.he = public/language/he/unread.json trans.hu = public/language/hu/unread.json +trans.id = public/language/id/unread.json trans.it = public/language/it/unread.json trans.ja = public/language/ja/unread.json trans.ko = public/language/ko/unread.json @@ -172,6 +176,7 @@ trans.fi = public/language/fi/modules.json trans.fr = public/language/fr/modules.json trans.he = public/language/he/modules.json trans.hu = public/language/hu/modules.json +trans.id = public/language/id/modules.json trans.it = public/language/it/modules.json trans.ja = public/language/ja/modules.json trans.ko = public/language/ko/modules.json @@ -210,6 +215,7 @@ trans.fi = public/language/fi/register.json trans.fr = public/language/fr/register.json trans.he = public/language/he/register.json trans.hu = public/language/hu/register.json +trans.id = public/language/id/register.json trans.it = public/language/it/register.json trans.ja = public/language/ja/register.json trans.ko = public/language/ko/register.json @@ -248,6 +254,7 @@ trans.fi = public/language/fi/user.json trans.fr = public/language/fr/user.json trans.he = public/language/he/user.json trans.hu = public/language/hu/user.json +trans.id = public/language/id/user.json trans.it = public/language/it/user.json trans.ja = public/language/ja/user.json trans.ko = public/language/ko/user.json @@ -286,6 +293,7 @@ trans.fi = public/language/fi/global.json trans.fr = public/language/fr/global.json trans.he = public/language/he/global.json trans.hu = public/language/hu/global.json +trans.id = public/language/id/global.json trans.it = public/language/it/global.json trans.ja = public/language/ja/global.json trans.ko = public/language/ko/global.json @@ -324,6 +332,7 @@ trans.fi = public/language/fi/notifications.json trans.fr = public/language/fr/notifications.json trans.he = public/language/he/notifications.json trans.hu = public/language/hu/notifications.json +trans.id = public/language/id/notifications.json trans.it = public/language/it/notifications.json trans.ja = public/language/ja/notifications.json trans.ko = public/language/ko/notifications.json @@ -362,6 +371,7 @@ trans.fi = public/language/fi/reset_password.json trans.fr = public/language/fr/reset_password.json trans.he = public/language/he/reset_password.json trans.hu = public/language/hu/reset_password.json +trans.id = public/language/id/reset_password.json trans.it = public/language/it/reset_password.json trans.ja = public/language/ja/reset_password.json trans.ko = public/language/ko/reset_password.json @@ -400,6 +410,7 @@ trans.fi = public/language/fi/users.json trans.fr = public/language/fr/users.json trans.he = public/language/he/users.json trans.hu = public/language/hu/users.json +trans.id = public/language/id/users.json trans.it = public/language/it/users.json trans.ja = public/language/ja/users.json trans.ko = public/language/ko/users.json @@ -438,6 +449,7 @@ trans.fi = public/language/fi/language.json trans.fr = public/language/fr/language.json trans.he = public/language/he/language.json trans.hu = public/language/hu/language.json +trans.id = public/language/id/language.json trans.it = public/language/it/language.json trans.ja = public/language/ja/language.json trans.ko = public/language/ko/language.json @@ -476,6 +488,7 @@ trans.fi = public/language/fi/pages.json trans.fr = public/language/fr/pages.json trans.he = public/language/he/pages.json trans.hu = public/language/hu/pages.json +trans.id = public/language/id/pages.json trans.it = public/language/it/pages.json trans.ja = public/language/ja/pages.json trans.ko = public/language/ko/pages.json @@ -514,6 +527,7 @@ trans.fi = public/language/fi/topic.json trans.fr = public/language/fr/topic.json trans.he = public/language/he/topic.json trans.hu = public/language/hu/topic.json +trans.id = public/language/id/topic.json trans.it = public/language/it/topic.json trans.ja = public/language/ja/topic.json trans.ko = public/language/ko/topic.json @@ -552,6 +566,7 @@ trans.fi = public/language/fi/success.json trans.fr = public/language/fr/success.json trans.he = public/language/he/success.json trans.hu = public/language/hu/success.json +trans.id = public/language/id/success.json trans.it = public/language/it/success.json trans.ja = public/language/ja/success.json trans.ko = public/language/ko/success.json @@ -590,6 +605,7 @@ trans.fi = public/language/fi/error.json trans.fr = public/language/fr/error.json trans.he = public/language/he/error.json trans.hu = public/language/hu/error.json +trans.id = public/language/id/error.json trans.it = public/language/it/error.json trans.ja = public/language/ja/error.json trans.ko = public/language/ko/error.json @@ -628,6 +644,7 @@ trans.fi = public/language/fi/tags.json trans.fr = public/language/fr/tags.json trans.he = public/language/he/tags.json trans.hu = public/language/hu/tags.json +trans.id = public/language/id/tags.json trans.it = public/language/it/tags.json trans.ja = public/language/ja/tags.json trans.ko = public/language/ko/tags.json @@ -666,6 +683,7 @@ trans.fi = public/language/fi/email.json trans.fr = public/language/fr/email.json trans.he = public/language/he/email.json trans.hu = public/language/hu/email.json +trans.id = public/language/id/email.json trans.it = public/language/it/email.json trans.ja = public/language/ja/email.json trans.ko = public/language/ko/email.json @@ -704,6 +722,7 @@ trans.fi = public/language/fi/search.json trans.fr = public/language/fr/search.json trans.he = public/language/he/search.json trans.hu = public/language/hu/search.json +trans.id = public/language/id/search.json trans.it = public/language/it/search.json trans.ja = public/language/ja/search.json trans.ko = public/language/ko/search.json @@ -742,6 +761,7 @@ trans.fi = public/language/fi/groups.json trans.fr = public/language/fr/groups.json trans.he = public/language/he/groups.json trans.hu = public/language/hu/groups.json +trans.id = public/language/id/groups.json trans.it = public/language/it/groups.json trans.ja = public/language/ja/groups.json trans.ko = public/language/ko/groups.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 111cd41c46..5223929285 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,14 @@ +# Submitting a Pull Request to NodeBB? + +First of all, thank you! Please consider this [style guide](https://docs.nodebb.org/en/latest/contributing/style-guide.html) when submitting your changes. Also, please join our [community](https://community.nodebb.org) to meet other NodeBB developers and designers :) + +## Contributor License Agreement + +Thank you for considering contributing to NodeBB. **Before we can accept any pull requests, please take a moment to read and sign our [license agreement](https://www.clahub.com/agreements/NodeBB/NodeBB)**. In summary, signing this document means that 1) you own the code that you are contributing and 2) you give permission to NodeBB Inc. to license the code to others. This agreement applies to any repository under the NodeBB organization. + +If you are writing contributions as part of employment from another company / individual, then your employer will need to sign a separate agreement. Please [contact us](mailto:accounts@nodebb.org) so that we can send this additional agreement to your employer. + + # Having problems installing NodeBB? Chances are somebody has run into this problem before. After consulting our [documentation](https://docs.nodebb.org/en/latest/installing/os.html), please head over to our [community support forum](https://community.nodebb.org) for advice. @@ -39,8 +50,17 @@ $ git rev-parse HEAD If you have downloaded the `.zip` or `.tar.gz` packages from GitHub (or elsewhere), please let us know. +## Provide theme versions if issue is related to the theme/display + +``` bash +$ npm ls nodebb-theme-vanilla nodebb-theme-lavender +nodebb@0.7.0-dev /home/julian/Projects/nodebb/forum +├── nodebb-theme-lavender@0.2.13 +└── nodebb-theme-vanilla@0.2.35 +``` + ## Attempt to use `git bisect` If you have installed NodeBB via GitHub clone, are familiar with utilising git, and are willing to help us narrow down the specific commit that causes a bug, consider running `git bisect`. -A full guide can be found here: [Debugging with Git/Binary Search](http://git-scm.com/book/en/Git-Tools-Debugging-with-Git#Binary-Search) \ No newline at end of file +A full guide can be found here: [Debugging with Git/Binary Search](http://git-scm.com/book/en/Git-Tools-Debugging-with-Git#Binary-Search) diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000000..551d8d7ed3 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,78 @@ +"use strict"; + +var fork = require('child_process').fork, + env = process.env, + worker, + incomplete = []; + + +module.exports = function(grunt) { + function update(action, filepath, target) { + var args = [], + fromFile = '', + compiling = '', + time = Date.now(); + + if (!grunt.option('verbose')) { + args.push('--log-level=info'); + } + + if (target === 'lessUpdated') { + fromFile = ['js','tpl']; + compiling = 'less'; + } else if (target === 'clientUpdated') { + fromFile = ['less','tpl']; + compiling = 'js'; + } else if (target === 'templatesUpdated') { + fromFile = ['js','less']; + compiling = 'tpl'; + } else if (target === 'serverUpdated') { + fromFile = ['less','js','tpl']; + } + + fromFile = fromFile.filter(function(ext) { + return incomplete.indexOf(ext) === -1; + }); + + args.push('--from-file=' + fromFile.join(',')); + incomplete.push(compiling); + + worker.kill(); + worker = fork('app.js', args, { env: env }); + + worker.on('message', function() { + if (incomplete.length) { + incomplete = []; + + if (grunt.option('verbose')) { + grunt.log.writeln('NodeBB restarted in ' + (Date.now() - time) + ' ms'); + } + } + }); + } + + grunt.initConfig({ + watch: { + lessUpdated: { + files: ['public/**/*.less', 'node_modules/nodebb-*/*.less', 'node_modules/nodebb-*/*/*.less', 'node_modules/nodebb-*/*/*/*.less', 'node_modules/nodebb-*/*/*/*/*.less'] + }, + clientUpdated: { + files: ['public/src/**/*.js', 'node_modules/nodebb-*/*.js', 'node_modules/nodebb-*/*/*.js', 'node_modules/nodebb-*/*/*/*.js', 'node_modules/nodebb-*/*/*/*/*.js'] + }, + serverUpdated: { + files: ['*.js', 'src/**/*.js'] + }, + templatesUpdated: { + files: ['src/views/**/*.tpl', 'node_modules/nodebb-*/*.tpl', 'node_modules/nodebb-*/*/*.tpl', 'node_modules/nodebb-*/*/*/*.tpl', 'node_modules/nodebb-*/*/*/*/*.tpl', 'node_modules/nodebb-*/*/*/*/*/*.tpl'] + } + } + }); + + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.registerTask('default', ['watch']); + + env.NODE_ENV = 'development'; + + worker = fork('app.js', [], { env: env }); + grunt.event.on('watch', update); +}; \ No newline at end of file diff --git a/app.js b/app.js index fb757a497d..ef113e5ece 100644 --- a/app.js +++ b/app.js @@ -43,14 +43,9 @@ winston.add(winston.transports.Console, { var date = new Date(); return date.getDate() + '/' + (date.getMonth() + 1) + ' ' + date.toTimeString().substr(0,5) + ' [' + global.process.pid + ']'; }, - level: global.env === 'production' ? 'info' : 'verbose' + level: (global.env === 'production' || nconf.get('log-level') === 'info') ? 'info' : 'verbose' }); -// TODO: remove once https://github.com/flatiron/winston/issues/280 is fixed -winston.err = function (err) { - winston.error(err.stack); -}; - if(os.platform() === 'linux') { require('child_process').exec('/usr/bin/which convert', function(err, stdout, stderr) { if(err || !stdout) { @@ -121,7 +116,7 @@ function start() { nconf.set('use_port', !!urlObject.port); nconf.set('relative_path', relativePath); nconf.set('port', urlObject.port || nconf.get('port') || nconf.get('PORT') || 4567); - nconf.set('upload_url', relativePath + '/uploads/'); + nconf.set('upload_url', '/uploads/'); if (nconf.get('isPrimary') === 'true') { winston.info('Time: %s', (new Date()).toString()); @@ -328,7 +323,7 @@ function resetThemes(callback) { function resetPlugin(pluginId) { var db = require('./src/database'); - db.setRemove('plugins:active', pluginId, function(err) { + db.sortedSetRemove('plugins:active', pluginId, function(err) { if (err) { winston.error('[reset] Could not disable plugin: %s encountered error %s', pluginId, err.message); } else { diff --git a/bcrypt.js b/bcrypt.js index 7611ab61a9..ae81d09eb7 100644 --- a/bcrypt.js +++ b/bcrypt.js @@ -9,7 +9,7 @@ process.on('message', function(msg) { if (msg.type === 'hash') { hashPassword(msg.password, msg.rounds); } else if (msg.type === 'compare') { - compare(msg.password, msg.hash); + bcrypt.compare(msg.password, msg.hash, done); } }); @@ -21,23 +21,14 @@ function hashPassword(password, rounds) { function(salt, next) { bcrypt.hash(password, salt, next); } - ], function(err, hash) { - if (err) { - process.send({err: err.message}); - return process.disconnect(); - } - process.send({result: hash}); - process.disconnect(); - }); + ], done); } -function compare(password, hash) { - bcrypt.compare(password, hash, function(err, res) { - if (err) { - process.send({err: err.message}); - return process.disconnect(); - } - process.send({result: res}); - process.disconnect(); - }); +function done(err, result) { + if (err) { + process.send({err: err.message}); + return process.disconnect(); + } + process.send({result: result}); + process.disconnect(); } \ No newline at end of file diff --git a/install/data/defaults.json b/install/data/defaults.json index 5507ad0822..778dee3838 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -27,6 +27,10 @@ "field": "minimumPostLength", "value": 8 }, + { + "field": "maximumPostLength", + "value": 32767 + }, { "field": "allowGuestSearching", "value": 0 diff --git a/install/data/footer.json b/install/data/footer.json new file mode 100644 index 0000000000..69d55448ac --- /dev/null +++ b/install/data/footer.json @@ -0,0 +1,10 @@ +[ + { + "widget": "html", + "data" : { + "html": "", + "title":"", + "container":"" + } + } +] \ No newline at end of file diff --git a/install/data/navigation.json b/install/data/navigation.json new file mode 100644 index 0000000000..228f9c4b3d --- /dev/null +++ b/install/data/navigation.json @@ -0,0 +1,82 @@ +[ + { + "id": "unread-count", + "route": "/unread", + "title": "\\[\\[global:header.unread\\]\\]", + "enabled": true, + "iconClass": "fa-inbox", + "textClass": "visible-xs-inline", + "text": "\\[\\[global:header.unread\\]\\]", + "properties": { + "loggedIn": true + } + }, + { + "route": "/recent", + "title": "\\[\\[global:header.recent\\]\\]", + "enabled": true, + "iconClass": "fa-clock-o", + "textClass": "visible-xs-inline", + "text": "\\[\\[global:header.recent\\]\\]" + }, + { + "route": "/tags", + "title": "\\[\\[global:header.tags\\]\\]", + "enabled": true, + "iconClass": "fa-tags", + "textClass": "visible-xs-inline", + "text": "\\[\\[global:header.tags\\]\\]" + }, + { + "route": "/popular", + "title": "\\[\\[global:header.popular\\]\\]", + "enabled": true, + "iconClass": "fa-fire", + "textClass": "visible-xs-inline", + "text": "\\[\\[global:header.popular\\]\\]" + }, + { + "route": "/users", + "title": "\\[\\[global:header.users\\]\\]", + "enabled": true, + "iconClass": "fa-user", + "textClass": "visible-xs-inline", + "text": "\\[\\[global:header.users\\]\\]", + "properties": { + "loggedIn": true + } + }, + { + "route": "/groups", + "title": "\\[\\[global:header.groups\\]\\]", + "enabled": true, + "iconClass": "fa-group", + "textClass": "visible-xs-inline", + "text": "\\[\\[global:header.groups\\]\\]" + }, + { + "route": "/admin", + "title": "\\[\\[global:header.admin\\]\\]", + "enabled": true, + "iconClass": "fa-cogs", + "textClass": "visible-xs-inline", + "text": "\\[\\[global:header.admin\\]\\]", + "properties": { + "target": "_top", + "adminOnly": true + } + }, + { + "route": "/search", + "title": "\\[\\[global:header.search\\]\\]", + "enabled": true, + "iconClass": "fa-search", + "textClass": "visible-xs-inline", + "text": "\\[\\[global:header.search\\]\\]", + "properties": { + "installed": { + "search": true + } + } + } +] \ No newline at end of file diff --git a/install/data/welcome.md b/install/data/welcome.md new file mode 100644 index 0000000000..399850e6e2 --- /dev/null +++ b/install/data/welcome.md @@ -0,0 +1,10 @@ +# Welcome to your brand new NodeBB forum! + +This is what a topic and post looks like. As an administator, you can edit the post\'s title and content. +To customise your forum, go to the [Administrator Control Panel](../../admin). You can modify all aspects of your forum there, including installation of third-party plugins. + +## Additional Resources + +* [NodeBB Documentation](https://docs.nodebb.org) +* [Community Support Forum](https://community.nodebb.org) +* [Project repository](https://github.com/nodebb/nodebb) \ No newline at end of file diff --git a/nodebb b/nodebb index e9922f8007..2f4f38a4be 100755 --- a/nodebb +++ b/nodebb @@ -110,9 +110,10 @@ case "$1" in ;; watch) - echo "Launching NodeBB in \"development\" mode." - echo "To run the production build of NodeBB, please use \"forever\"." - echo "More Information: https://docs.nodebb.org/en/latest/running/index.html" + echo "***************************************************************************" + echo "WARNING: ./nodebb watch will be deprecated soon. Please use grunt: " + echo "https://docs.nodebb.org/en/latest/running/index.html#grunt-development" + echo "***************************************************************************" NODE_ENV=development supervisor -q --ignore public/templates,public/nodebb.min.js,public/nodebb.min.js.map --extensions 'node|js|tpl|less' -- app "$@" ;; diff --git a/nodebb.bat b/nodebb.bat new file mode 100644 index 0000000000..d432dd3143 --- /dev/null +++ b/nodebb.bat @@ -0,0 +1,122 @@ +@echo off + +rem %1 action +rem %2 subaction + +setlocal enabledelayedexpansion +2>nul call :CASE_%1 +if ERRORLEVEL 1 call :DEFAULT_CASE + +exit /B + +:CASE_start + echo Starting NodeBB + echo "nodebb.bat stop" to stop the NodeBB server + echo "nodebb.bat log" to view server output + + rem Start the loader daemon + node loader %* + + goto END_CASE + +:CASE_stop + call :pidexists + if %_result%==0 ( + echo NodeBB is already stopped. + ) else ( + echo Stopping NodeBB. Goodbye! + + rem Doing this forcefully is probably not the best method + taskkill /PID !_pid! /f>nul + ) + + goto END_CASE + +:CASE_restart + echo Unsupported + + goto END_CASE + +:CASE_reload + echo Unsupported + + goto END_CASE + +:CASE_status + call :pidexists + if %_result%==0 ( + echo NodeBB is not running + echo "nodebb.bat start" to launch the NodeBB server + ) else ( + echo NodeBB Running ^(pid !_pid!^) + echo "nodebb.bat stop" to stop the NodeBB server + echo "nodebb.bat log" to view server output + echo "nodebb.bat restart" to restart NodeBB + ) + + goto END_CASE + +:CASE_log + cls + type .\logs\output.log + + goto END_CASE + +:CASE_upgrade + call npm install + call npm i nodebb-theme-vanilla nodebb-theme-lavender nodebb-widget-essentials + node app --upgrade + copy /b package.json +,,>nul + + goto END_CASE + +:CASE_setup + node app --setup %* + + goto END_CASE + +:CASE_reset + node app --reset --%2 + + goto END_CASE + +:CASE_dev + echo Launching NodeBB in "development" mode. + echo To run the production build of NodeBB, please use "forever". + echo More Information: https://docs.nodebb.org/en/latest/running/index.html + set NODE_ENV=development + node loader --no-daemon %* + + goto END_CASE + +:CASE_watch + echo Not supported + + goto END_CASE + +:DEFAULT_CASE + echo Welcome to NodeBB + echo Usage: nodebb.bat ^{start^|stop^|reload^|restart^|log^|setup^|reset^|upgrade^|dev^|watch^} + + goto END_CASE + +:END_CASE + endlocal + VER > NUL + goto :EOF + +:pidexists +if exist %~dp0pidfile ( + set /p _pid=لا توجد مواضيع في هذه الفئةلم لا تحاول إنشاء موضوع؟
", "browsing": "تصفح", "no_replies": "لم يرد أحد", diff --git a/public/language/ar/email.json b/public/language/ar/email.json index a015fa445c..d295a3a70f 100644 --- a/public/language/ar/email.json +++ b/public/language/ar/email.json @@ -9,6 +9,9 @@ "reset.text1": "لقد توصلنا بطلب إعادة تعيين كلمة السرالخاصة بك، ربما لكونك قد نسيتها, إن لم يكن الأمر كذلك، المرجو تجاهل هذه الرسالة.", "reset.text2": "لمواصلة طلب إعاة تعيين كلمة السر، المرجو تتبع هذا الرابط.", "reset.cta": "انقر هنا لإعادة تعيين كلمة السر الخاصة بك.", + "reset.notify.subject": "تم تغيير كلمة المرور بنجاح", + "reset.notify.text1": "نحيطك علما أن كلمة مرورك قد تم تغييرها في %1", + "reset.notify.text2": "إن لم يكن لديك علم بهذا، المرجو إشعار مدبر النظام بأسرع مايمكن.", "digest.notifications": "لديك تنبيهات غير مقروءة من طرف %1:", "digest.latest_topics": "آخر المستجدات من %1", "digest.cta": "انقر هنا لمشاهدة %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "هناك محادثة جديدة من %1", "notif.chat.cta": "انقر هنا لمتابعة المحادثة", "notif.chat.unsub.info": "تم إرسال هذا الإشعار بوجودة محادثة جديدة وفقا لخيارات تسجيلك.", + "notif.post.cta": "انقر هنا لقراءة الموضوع بأكمله", + "notif.post.unsub.info": "تم إشعارك بهذه المشاركة بناءً على الخيارات التي سبق وأن حددتها.", "test.text1": "هذه رسالة تجريبية للتأكد من صحة إعدادت الرسائل الإلكترونية في منتدى NodeBB خاصتك.", "unsub.cta": "انقر هنا لتغيير تلك الإعدادات", "closing": "شكرًا لك!" diff --git a/public/language/ar/error.json b/public/language/ar/error.json index 21b27c5bce..e5d2f8c856 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -18,6 +18,9 @@ "username-taken": "اسم المستخدم مأخوذ", "email-taken": "البريد الالكتروني مأخوذ", "email-not-confirmed": "عنوان بريدك الإلكتروني غير مفعل بعد. انقر هنا لتفعيله من فضلك.", + "email-not-confirmed-chat": "لايمكنك الدردشة إلا بعد تفعيل بريدك الإلكتروني", + "no-email-to-confirm": "هذا المنتدى يستلزم تفعيل بريدك الإلكتروني، انقر هنا من فضلك لإدخاله.", + "email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.", "username-too-short": "اسم المستخدم قصير.", "username-too-long": "اسم المستخدم طويل", "user-banned": "المستخدم محظور", @@ -32,21 +35,29 @@ "no-emailers-configured": "لا يمكن إرسال رسالة إلكترونية تجريبية لعدم وجود قوالب خاصة بالرسائل الإلكترونية،", "category-disabled": "قائمة معطلة", "topic-locked": "الموضوع مقفول", + "post-edit-duration-expired": "لايمكنك تعديل مشاركتك بعد مرور أكثر من %1 ثانية على كتابتها.", "still-uploading": "الرجاء انتظار الرفع", "content-too-short": "المرجو إدخال موضوع أطول من هذا. يجب أن تتوفر المواضيع على %1 حروف على الأقل.", + "content-too-long": "لا يمكن للمشاركات أن تتجاوز %1 حرفًا/أحرف.", "title-too-short": "المرجو إدخال عنوان أطول من هذا. يجب أن تتوفر العناوين على %1 حروف على الأقل.", "title-too-long": "المرجو إدخال عنوان أقصر من هذا. يجب ألا تتجاوز العناوين %1 حرفًا.", "too-many-posts": "يمكنك إنشاء المواضيع بمعدل موضوع واحد كل %1 ثانية - المرجو الانتظار قليلا.", "too-many-posts-newbie": "بصفتك مستخدمًا جديدًا، يمكنك إنشاء المواضيع بمعدل موضوع واحد كل %1 ثانية حتى تحصل على سمعة %2 - المرجو الانتظار قليلا.", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "حجم الملفات الأقصى المسموح به هو %1 كب - المرجو رفع ملف أقل حجمًا", "cant-vote-self-post": "لايمكنك التصويت لردك", "already-favourited": "لقد سبق وأضفت هذا الرد إلى المفضلة", "already-unfavourited": "لقد سبق وحذفت هذا الرد من المفضلة", "cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.", - "invalid-image-type": "نوع الصورة ممنوع", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "اسم المجموعة قصير", "group-already-exists": "المجموعة موجودة مسبقا", "group-name-change-not-allowed": "لايسمح بتغيير أسماء المجموعات", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "سبق وتم حذف هذا الرد", "post-already-restored": "سبق وتم إلغاء حذف هذا الرد", "topic-already-deleted": "سبق وتم حذف هذا الموضوع", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "الصور المصغرة غير مفعلة.", "invalid-file": "ملف غير مقبول", "uploads-are-disabled": "رفع الملفات غير مفعل", - "upload-error": "مشكلة في الرفع: 1%", "signature-too-long": "عذرا، توقيعك يجب ألا يتجاوز %1 حرفًا", "cant-chat-with-yourself": "لايمكنك فتح محادثة مع نفسك", "chat-restricted": "هذا المستخدم عطل المحادثات الواردة عليه. يجب أن يتبعك حتى تتمكن من فتح محادثة معه.", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "نظام السمعة معطل", "downvoting-disabled": "التصويتات السلبية معطلة", "not-enough-reputation-to-downvote": "ليس لديك سمعة تكفي لإضافة صوت سلبي لهذا الموضوع", "not-enough-reputation-to-flag": "ليس لديك سمعة تكفي للإشعار بموضوع مخل", "reload-failed": "المنتدى واجه مشكلة أثناء إعادة التحميل: \"%1\". سيواصل المنتدى خدمة العملاء السابقين لكن يجب عليك إلغاء أي تغيير قمت به قبل إعادة التحميل.", - "registration-error": "حدث خطأ أثناء التسجيل" + "registration-error": "حدث خطأ أثناء التسجيل", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/ar/global.json b/public/language/ar/global.json index 78853f6439..1671e2806f 100644 --- a/public/language/ar/global.json +++ b/public/language/ar/global.json @@ -3,9 +3,10 @@ "search": "بحث", "buttons.close": "أغلق", "403.title": "غير مسموح بالدخول", - "403.message": "يبدو أنك قد تعثر على الصفحة التي لم يكن لديك الوصول إليها. ربما يجب عليك تسجيل الدخول ", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "لم يتم العثور", - "404.message": "يبدو أنك قد تعثرت على صفحة غير موجودة. عودة إلى الصفحة الرئيسية.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "خطأ داخلي.", "500.message": "عفوا! يبدو وكأنه شيء ذهب على نحو خاطئ!", "register": "تسجيل", @@ -26,6 +27,7 @@ "header.tags": "وسم", "header.popular": "الأكثر شهرة", "header.users": "المستخدمين", + "header.groups": "Groups", "header.chats": "المحادثات", "header.notifications": "التنبيهات", "header.search": "بحث", @@ -73,5 +75,7 @@ "updated.title": "تم تحديث المنتدى", "updated.message": "لقد تم تحديث المنتدى إلى آخر نسخة للتو. المرجو إعادة تحميل الصفحة.", "privacy": "الخصوصية", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "حذف الكل" } \ No newline at end of file diff --git a/public/language/ar/groups.json b/public/language/ar/groups.json index 9cc78c49e8..1c6a8f90e5 100644 --- a/public/language/ar/groups.json +++ b/public/language/ar/groups.json @@ -1,8 +1,34 @@ { "groups": "المجموعات", "view_group": "معاينة المجموعة", + "owner": "مالك المجموعة", + "new_group": "أنشئ مجموعة جديدة", + "no_groups_found": "لاوجدود لمجموعات يمكن معاينتها", + "pending.accept": "موافق", + "pending.reject": "رفض", + "cover-instructions": "اسحب وأسقِط صورة، اسحبها للموضع المرغوب، وانقر على حفظ", + "cover-change": "تغيير", + "cover-save": "حفظ", + "cover-saving": "جاري الحفظ", "details.title": "تفاصيل المجموعة", "details.members": "لائحة الأعضاء", + "details.pending": "المستخدمون في الانتظار", "details.has_no_posts": "أعضاء هذه المجموعة لم يضيفوا أية مشاركة", - "details.latest_posts": "آخر المشاركات" + "details.latest_posts": "آخر المشاركات", + "details.private": "خاص", + "details.grant": "منح/سحب المِلكية", + "details.kick": "طرد", + "details.owner_options": "تدبير المجموعة", + "details.group_name": "اسم المجموعة", + "details.description": "الوصف", + "details.badge_preview": "معاينة الوسام", + "details.change_icon": "تغيير الأيقونة", + "details.change_colour": "تغيير اللون", + "details.badge_text": "نص الوسام", + "details.userTitleEnabled": "إظهار الوسام", + "details.private_help": "في حالة تفعيل الخيار، الانضمام إلى المجموعة يستلزم قبول مالكها", + "details.hidden": "مخفي", + "details.hidden_help": "في حالة تفعيل الخيار، لن تظهر المجموعة للعموم والإنضمام إليها سيتلزم دعوة يدوية.", + "event.updated": "تم تحديث بيانات المجموعة", + "event.deleted": "تم حذف المجموعة %1" } \ No newline at end of file diff --git a/public/language/ar/login.json b/public/language/ar/login.json index ffc5beb15a..878a32533c 100644 --- a/public/language/ar/login.json +++ b/public/language/ar/login.json @@ -1,5 +1,7 @@ { - "username": "اسم المستخدم / عنوان البريد الإلكتروني", + "username-email": "اسم المستخدم / البريد الإلكتروني", + "username": "اسم المستخدم", + "email": "البريد الإلكتروني", "remember_me": "تذكرني؟", "forgot_password": "نسيت كلمة المرور؟", "alternative_logins": "تسجيلات الدخول البديلة", diff --git a/public/language/ar/notifications.json b/public/language/ar/notifications.json index 0c1f53f377..98890331a5 100644 --- a/public/language/ar/notifications.json +++ b/public/language/ar/notifications.json @@ -2,6 +2,7 @@ "title": "تنبيهات", "no_notifs": "ليس لديك أية تنبيهات جديدة", "see_all": "معاينة كل التنبيهات", + "mark_all_read": "اجعل كل التنبيهات مقروءة", "back_to_home": "عودة إلى %1", "outgoing_link": "رابط خارجي", "outgoing_link_message": "أنت تغادر %1 حاليا.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 صار يتابعك.", "email-confirmed": "تم التحقق من عنوان البريد الإلكتروني", "email-confirmed-message": "شكرًا على إثبات صحة عنوان بريدك الإلكتروني. صار حسابك مفعلًا بالكامل.", - "email-confirm-error": "حدث خطأ ما...", "email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.", "email-confirm-sent": "تم إرسال بريد التفعيل." } \ No newline at end of file diff --git a/public/language/ar/pages.json b/public/language/ar/pages.json index 0dc17e025a..15e8209928 100644 --- a/public/language/ar/pages.json +++ b/public/language/ar/pages.json @@ -11,6 +11,7 @@ "user.followers": "المستخدمون الذين يتبعون %1", "user.posts": "ردود %1", "user.topics": "مواضيع %1", + "user.groups": "%1's Groups", "user.favourites": "مفضلات %1", "user.settings": "خيارات المستخدم", "maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.", diff --git a/public/language/ar/recent.json b/public/language/ar/recent.json index 12b5140260..02003e5d81 100644 --- a/public/language/ar/recent.json +++ b/public/language/ar/recent.json @@ -5,5 +5,15 @@ "month": "شهر", "year": "سنة", "alltime": "دائمًا", - "no_recent_topics": "لاوجود لمشاركات جديدة" + "no_recent_topics": "لاوجود لمشاركات جديدة", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/ar/reset_password.json b/public/language/ar/reset_password.json index 603f117b7e..b4f95dd780 100644 --- a/public/language/ar/reset_password.json +++ b/public/language/ar/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "يرجى إدخال عنوان البريد الإلكتروني الخاص بك وسوف نرسل لك رسالة بالبريد الالكتروني مع تعليمات حول كيفية إستعادة حسابك.", "enter_email_address": "ادخل عنوان البريد الإلكتروني", "password_reset_sent": "إعادة تعيين كلمة السر أرسلت", - "invalid_email": "بريد إلكتروني غير صالح أو غير موجود" + "invalid_email": "بريد إلكتروني غير صالح أو غير موجود", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/ar/search.json b/public/language/ar/search.json index 3321c45835..9128baf408 100644 --- a/public/language/ar/search.json +++ b/public/language/ar/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 نتيجة (نتائج) موافقة ل \"%2\", (%3 ثواني)", - "no-matches": "لم يتم إيجاد أية مشاركات" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/ar/tags.json b/public/language/ar/tags.json index 2aa28aa7c5..004681a32a 100644 --- a/public/language/ar/tags.json +++ b/public/language/ar/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "لاوجود لمواضيع تحمل هذا الوسم.", "tags": "بطاقات", - "enter_tags_here": "أدخل البطاقات هنا. اضغط ENTER بعد كل بطاقة.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "أدخل البطاقات...", "no_tags": "لاتوجد هناك بطاقات بعد." } \ No newline at end of file diff --git a/public/language/ar/topic.json b/public/language/ar/topic.json index 6df5a6018f..c63f32e61c 100644 --- a/public/language/ar/topic.json +++ b/public/language/ar/topic.json @@ -12,6 +12,7 @@ "notify_me": "تلق تنبيهات بالردود الجديدة في هذا الموضوع", "quote": "اقتبس", "reply": "رد", + "guest-login-reply": "Log in to reply", "edit": "تعديل", "delete": "حذف", "purge": "تطهير", @@ -74,6 +75,7 @@ "fork_no_pids": "لم تختر أي مشاركة", "fork_success": "تم إنشاء فرع للموضوع بنجاح! إضغط هنا لمعاينة الفرع.", "composer.title_placeholder": "أدخل عنوان موضوعك هنا...", + "composer.handle_placeholder": "Name", "composer.discard": "نبذ التغييرات", "composer.submit": "حفظ", "composer.replying_to": "الرد على %1", @@ -92,5 +94,6 @@ "sort_by": "ترتيب حسب", "oldest_to_newest": "من الأقدم إلى الأحدث", "newest_to_oldest": "من الأحدث إلى الأقدم", - "most_votes": "الأكثر تصويتًا" + "most_votes": "الأكثر تصويتًا", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/ar/user.json b/public/language/ar/user.json index ff95cadcb6..29094b2d39 100644 --- a/public/language/ar/user.json +++ b/public/language/ar/user.json @@ -2,6 +2,8 @@ "banned": "محظور", "offline": "ليس موجود حالياً", "username": "إسم المستخدم", + "joindate": "Join Date", + "postcount": "Post Count", "email": "البريد الإلكتروني", "confirm_email": "تأكيد عنوان البريد الإلكتروني", "delete_account": "حذف الحساب", @@ -16,6 +18,7 @@ "profile_views": "عدد مشاهدات الملف الشخصي", "reputation": "السمعة", "favourites": "المفضلات", + "watched": "Watched", "followers": "المتابعون", "following": "يتابع", "signature": "توقيع", @@ -56,10 +59,12 @@ "digest_weekly": "أسبوعيًّا", "digest_monthly": "شهريًّا", "send_chat_notifications": "استلام رسالة إلكترونية عند ورود محادثة وأنا غير متصل.", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "هذا المستخدم ليس لديه أي متابع :(", "follows_no_one": "هذا المستخدم لا يتابع أحد :(", "has_no_posts": "هذا المستخدم لم يكتب أي شيء بعد.", "has_no_topics": "هذا المستخدم لم ينشئ أي موضوع بعد.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "البريد الإلكتروني مخفي", "hidden": "مخفي", "paginate_description": "عرض المواضيع والردود موزعة على صفحات عوض صفحة واحدة.", diff --git a/public/language/ar/users.json b/public/language/ar/users.json index bd81c8d5ba..a842def62b 100644 --- a/public/language/ar/users.json +++ b/public/language/ar/users.json @@ -5,5 +5,8 @@ "search": "بحث", "enter_username": "أدخل اسم مستخدم للبحث", "load_more": "حمل المزيد", - "users-found-search-took": "تم إيجاد %1 مستخدمـ(ين)! استغرق البحث %2 ميليثانية." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/bn/category.json b/public/language/bn/category.json index faad73c96f..b706e85080 100644 --- a/public/language/bn/category.json +++ b/public/language/bn/category.json @@ -1,7 +1,8 @@ { "new_topic_button": "নতুন টপিক", + "guest-login-post": "Log in to post", "no_topics": "এই বিভাগে কোন টপিক নেই!
আপনি চাইলে একটি পোষ্ট করতে পারেন।", - "browsing": "browsing", + "browsing": "ব্রাউজিং", "no_replies": "কোন রিপ্লাই নেই", "share_this_category": "এই বিভাগটি অন্যের সাথে ভাগাভাগি করুন", "ignore": "উপেক্ষা করুন" diff --git a/public/language/bn/email.json b/public/language/bn/email.json index 7b6b69c0ed..91169e5549 100644 --- a/public/language/bn/email.json +++ b/public/language/bn/email.json @@ -1,23 +1,28 @@ { - "password-reset-requested": "Password Reset Requested - %1!", - "welcome-to": "Welcome to %1", - "greeting_no_name": "Hello", - "greeting_with_name": "Hello %1", + "password-reset-requested": "পাসওয়ার্ড রিসেটের জন্য অনুরোধ করা হয়েছে - %1!", + "welcome-to": "%1 এ স্বাগতম", + "greeting_no_name": "স্বাগতম", + "greeting_with_name": "স্বাগতম %1", "welcome.text1": "%1 এ নিবন্ধন করার জন্য আপনাকে ধন্যবাদ!", "welcome.text2": "আপনার একাউন্ট এ্যাক্টিভেট করার জন্য, আপনি যে ইমেইল এড্রেস ব্যাবহার করে নিবন্ধন করেছেন তা যাচাই করতে হবে", "welcome.cta": "আপনার ইমেইল এড্রেস নিশ্চিত করার জন্য এখানে ক্লিক করুন", "reset.text1": "আমরা আপনার পাসওয়ার্ড রিসেট করার অনুরোধ পেয়েছি, সম্ভবত আপনি আপনার পাসওয়ার্ড ভুলে গিয়েছেন বলেই। তবে যদি তা না হয়ে থাকে, তাহলে এই মেইলকে উপেক্ষা করতে পারেন।", "reset.text2": "পাসওয়ার্ড রিসেট করতে নিচের লিংকে ক্লিক করুন", "reset.cta": "পাসওয়ার্ড রিসেট করতে এখানে ক্লিক করুন", - "digest.notifications": "You have unread notifications from %1:", - "digest.latest_topics": "Latest topics from %1", - "digest.cta": "Click here to visit %1", - "digest.unsub.info": "This digest was sent to you due to your subscription settings.", - "digest.no_topics": "There have been no active topics in the past %1", - "notif.chat.subject": "New chat message received from %1", - "notif.chat.cta": "Click here to continue the conversation", - "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", - "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", - "unsub.cta": "Click here to alter those settings", - "closing": "Thanks!" + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "digest.notifications": "%1 থেকে আনরিড নোটিফিকেশন আছে।", + "digest.latest_topics": "%1 এর সর্বশেষ টপিকসমূহ", + "digest.cta": "%1 ভিজিট করতে এখানে ক্লিক করুন", + "digest.unsub.info": "আপনার সাবস্ক্রীপশন সেটিংসের কারনে আপনাকে এই ডাইজেষ্টটি পাঠানো হয়েছে।", + "digest.no_topics": "%1 এ কোন সক্রিয় টপিক নেই।", + "notif.chat.subject": "%1 এর থেকে নতুন মেসেজ এসেছে।", + "notif.chat.cta": "কথপোকথন চালিয়ে যেতে এখানে ক্লিক করুন", + "notif.chat.unsub.info": "আপনার সাবস্ক্রীপশন সেটিংসের কারনে আপনার এই নোটিফিকেশন পাঠানো হয়েছে", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", + "test.text1": "আপনি সঠিকভাবে নোডবিবির জন্য মেইলার সেটাপ করেছেন কিনা নিশ্চিত করার জন্য এই টেষ্ট ইমেইল পাঠানো হয়েছে", + "unsub.cta": "সেটিংসগুলো পরিবর্তন করতে এখানে ক্লিক করুন", + "closing": "ধন্যবাদ!" } \ No newline at end of file diff --git a/public/language/bn/error.json b/public/language/bn/error.json index 01ae731780..946b152345 100644 --- a/public/language/bn/error.json +++ b/public/language/bn/error.json @@ -18,6 +18,9 @@ "username-taken": "ইউজারনেম আগেই ব্যবহৃত", "email-taken": "ইমেইল আগেই ব্যবহৃত", "email-not-confirmed": "আপনার ইমেইল এড্রেস নিশ্চিত করা হয় নি, নিশ্চিত করতে এখানে ক্লিক করুন।", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "খুব ছোট ইউজারনেম", "username-too-long": "ইউজারনেম বড় হয়ে গিয়েছে", "user-banned": "ব্যবহারকারী নিষিদ্ধ", @@ -32,21 +35,29 @@ "no-emailers-configured": "কোন ইমেল প্লাগইন লোড করা নেই, কাজেই টেস্ট মেইল পাঠানো সম্ভব হচ্ছে না", "category-disabled": "বিভাগটি নিষ্ক্রিয়", "topic-locked": "টপিক বন্ধ", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "আপলোড সম্পূর্ণ জন্য অনুগ্রহ করে অপেক্ষা করুন", "content-too-short": "অনুগ্রহকরে অপেক্ষকৃত বড় পোষ্ট করুন। একটি পোষ্টে নূন্যতম %1 অক্ষর থাকতে হবে।", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "অনুগ্রহপূর্বক বড় শিরোনাম ব্যাবহার করুন। শিরোনামের জন্য নূন্যতম %1 অক্ষর ব্যাবহার করতে হবে।", "title-too-long": "অনুগ্রহ করে সংক্ষিপ্ত শিরোনাম লিখুন। শিরোনাম %1 অক্ষরের বেশি হতে পারবে না।", "too-many-posts": "আপনি প্রতি %1 সেকেন্ডে একবার পোষ্ট করতে পারবেন। পরবর্তী পোষ্ট করার জন্য অপেক্ষা করুন। ", "too-many-posts-newbie": "নতুন সদস্য হিসাবে %2 সন্মানণা পাওয়া পর্যন্ত আপনি প্রতি %1 সেকেন্ডে একবার পোষ্ট করতে পারবেন। পরবর্তী পোষ্ট করার জন্য অপেক্ষা করুন। ", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "সর্বোচ্চ গৃহীত ফাইলসাইজ হচ্ছে %1 kb - অনুগ্রহপূর্বক ছোট ফাইল আপলোড করুন", "cant-vote-self-post": "আপনি নিজের পোস্টে ভোট দিতে পারবেন না।", "already-favourited": "আপনি ইতিমধ্যে এই পোষ্টটি পছন্দের তালিকায় যোগ করেছেন", "already-unfavourited": "আপনি ইতিমধ্যে এই পোষ্টটি আপনার পছন্দের তালিকা থেকে সরিয়ে ফেলেছেন", "cant-ban-other-admins": "আপনি অন্য এ্যাডমিনদের নিষিদ্ধ করতে পারেন না!", - "invalid-image-type": "ভুল ছবির টাইপ", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "গ্রুপের নাম খুব ছোট", "group-already-exists": "গ্রুপ ইতিমধ্যেই বিদ্যমান", "group-name-change-not-allowed": "গ্রুপের নাম পরিবর্তনের অনুমতি নেই", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "এই পোস্টটি ইতিমধ্যে ডিলিট করা হয়ে গিয়েছে", "post-already-restored": "এই পোষ্টটি ইতিমধ্যে পুনরোদ্ধার করা হয়েছে", "topic-already-deleted": "এই টপিকটি ইতিমধ্যে ডিলিট করা হয়েছে", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "টপিক থাম্বনেল নিষ্ক্রিয় করা। ", "invalid-file": "ভুল ফাইল", "uploads-are-disabled": "আপলোড নিষ্ক্রিয় করা", - "upload-error": "আপলোড ত্রুটিঃ %1", "signature-too-long": "দুঃখিত, আপনার সাক্ষর %1 অক্ষরের বেশী হতে পারবে না। ", "cant-chat-with-yourself": "আপনি নিজের সাথে চ্যাট করতে পারবেন না!", "chat-restricted": "এই সদস্য তার বার্তালাপ সংরক্ষিত রেখেছেন। এই সদস্য আপনাকে ফলো করার পরই কেবলমাত্র আপনি তার সাথে চ্যাট করতে পারবেন", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "সম্মাননা ব্যাবস্থা নিস্ক্রীয় রাখা হয়েছে", "downvoting-disabled": "ঋণাত্মক ভোট নিস্ক্রীয় রাখা হয়েছে।", "not-enough-reputation-to-downvote": "আপনার এই পোস্ট downvote করার জন্য পর্যাপ্ত সম্মাননা নেই", "not-enough-reputation-to-flag": "এই পোষ্টকে ফ্লাগ করার জন্য আপনার পর্যাপ্ত সম্মাননা নেই", - "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "নিবন্ধন এরর!" + "reload-failed": "\"%1\" রিলোড করতে সমস্যা হয়েছে। রিলোডের পূর্বে যা করা হয়েছিল সেটি আনডু করা সমীচীন। ", + "registration-error": "নিবন্ধন এরর!", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/bn/global.json b/public/language/bn/global.json index 760766d189..64d9b71ff3 100644 --- a/public/language/bn/global.json +++ b/public/language/bn/global.json @@ -3,9 +3,10 @@ "search": "অনুসন্ধান", "buttons.close": "বন্ধ", "403.title": "প্রবেশাধিকার প্রত্যাখ্যাত", - "403.message": "আপনি এমন একটি পাতায় যাওয়ার চেষ্টা করছেন যেখানে আপনার প্রবেশাধিকার নেই। আপনি কি প্রবেশ করে আবার চেষ্টা করবেন?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "পাওয়া যায়নি", - "404.message": "আপনি এমন একটি পাতায় যাওয়ার চেষ্টা করছেন যার অস্তিত্ব নেই। নীড়পাতায় ফিরে যান। ", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "অভ্যন্তরীণ ত্রুটি।", "500.message": "ওহো! কিছু ভুল হয়েছে মনে হচ্ছে!", "register": "নিবন্ধন", @@ -26,6 +27,7 @@ "header.tags": "ট্যাগ", "header.popular": "জনপ্রিয়", "header.users": "ব্যবহারকারীগণ", + "header.groups": "Groups", "header.chats": "কথোপকথন", "header.notifications": "বিজ্ঞপ্তি", "header.search": "অনুসন্ধান", @@ -73,5 +75,7 @@ "updated.title": "ফোরাম আপডেট করা হয়েছে", "updated.message": "এই ফোরামে এইমাত্র সর্বশেষ সংস্করণে আপডেট করা হয়েছে। পৃষ্ঠাটি রিফ্রেশ করতে এখানে ক্লিক করুন।", "privacy": "নিরাপত্তা", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "সব মুছে ফেলুন" } \ No newline at end of file diff --git a/public/language/bn/groups.json b/public/language/bn/groups.json index bf69c732b0..50e0a886dc 100644 --- a/public/language/bn/groups.json +++ b/public/language/bn/groups.json @@ -1,8 +1,34 @@ { - "groups": "Groups", - "view_group": "View Group", - "details.title": "Group Details", - "details.members": "Member List", - "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "groups": "গ্রুপসমূহ", + "view_group": "গ্রুপ দেখুন", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", + "details.title": "গ্রুপের বিস্তারিত", + "details.members": "সদস্য তালিকা", + "details.pending": "Pending Members", + "details.has_no_posts": "এই গ্রুপের সদস্যরা এখনো কোন পোষ্ট করেন নি", + "details.latest_posts": "সর্বশেষ পোষ্টসমূহ", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/bn/login.json b/public/language/bn/login.json index 36cdebe2be..c34f1de706 100644 --- a/public/language/bn/login.json +++ b/public/language/bn/login.json @@ -1,9 +1,11 @@ { - "username": "ইউজারনেম / ইমেইল", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "মনে রাখুন", "forgot_password": "পাসওয়ার্ড ভুলে গিয়েছেন?", "alternative_logins": "বিকল্প প্রবেশ", - "failed_login_attempt": "ব্যর্থ প্রবেশের প্রচেষ্টা, আবার চেষ্টা করুন।", + "failed_login_attempt": "প্রবেশ সফল হয় নি, আবার চেষ্টা করুন।", "login_successful": "আপনি সফলভাবে প্রবেশ করেছেন!", "dont_have_account": "কোন একাউন্ট নেই?" } \ No newline at end of file diff --git a/public/language/bn/modules.json b/public/language/bn/modules.json index eacf0556fe..cbd625d77a 100644 --- a/public/language/bn/modules.json +++ b/public/language/bn/modules.json @@ -1,20 +1,20 @@ { "chat.chatting_with": " এর সাথে কথোপকথন", - "chat.placeholder": "Type chat message here, press enter to send", + "chat.placeholder": "এখানে আপনার বার্তা লিখুন। পাঠানোর জন্য Enter চাপুন", "chat.send": "প্রেরন করুন", "chat.no_active": "আপনার কোন সচল কথোপকথন নেই", "chat.user_typing": "%1 লিখছেন", "chat.user_has_messaged_you": "%1 আপনাকে বার্তা পাঠিয়েছেন", "chat.see_all": "সকল কথোপকথন দেখুন", - "chat.no-messages": "Please select a recipient to view chat message history", - "chat.recent-chats": "Recent Chats", - "chat.contacts": "Contacts", - "chat.message-history": "Message History", - "chat.pop-out": "Pop out chat", - "chat.maximize": "Maximize", - "chat.seven_days": "7 Days", - "chat.thirty_days": "30 Days", - "chat.three_months": "3 Months", + "chat.no-messages": "মেসেজ হিস্টোরী দেখতে প্রাপক নির্বাচন করুন", + "chat.recent-chats": "সাম্প্রতিক চ্যাটসমূহ", + "chat.contacts": "কন্টাক্টস", + "chat.message-history": "মেসেজ হিস্টোরী", + "chat.pop-out": "চ্যাট উইন্ডো আলাদা করুন", + "chat.maximize": "ম্যাক্সিমাইজ", + "chat.seven_days": "৭ দিন", + "chat.thirty_days": "৩০ দিন", + "chat.three_months": "৩ মাস", "composer.user_said_in": "%1 বলেছেন %2:", "composer.user_said": "%1 বলেছেনঃ", "composer.discard": "আপনি কি নিশ্চিত যে আপনি এই পোস্ট বাতিল করতে ইচ্ছুক?" diff --git a/public/language/bn/notifications.json b/public/language/bn/notifications.json index 0c6c8d4485..2c29c68362 100644 --- a/public/language/bn/notifications.json +++ b/public/language/bn/notifications.json @@ -2,26 +2,26 @@ "title": "বিজ্ঞপ্তিগুলো", "no_notifs": "আপনার নতুন কোন বিজ্ঞপ্তি নেই", "see_all": "সকল বিজ্ঞপ্তিগুলো দেখুন", + "mark_all_read": "Mark all notifications read", "back_to_home": "ফিরুন %1", "outgoing_link": "বহির্গামী লিঙ্ক", - "outgoing_link_message": "You are now leaving %1.", - "continue_to": "Continue to %1", - "return_to": "Return to %1", + "outgoing_link_message": "আপনি এখন %1 ত্যাগ করছেন", + "continue_to": "%1 তে আগান", + "return_to": "%1 এ ফেরত যান", "new_notification": "নতুন বিজ্ঞপ্তি", "you_have_unread_notifications": "আপনার অপঠিত বিজ্ঞপ্তি আছে।", "new_message_from": "%1 থেকে নতুন বার্তা", - "upvoted_your_post_in": "%1 has upvoted your post in %2.", - "moved_your_post": "%1 has moved your post.", - "moved_your_topic": "%1 has moved your topic.", + "upvoted_your_post_in": "%1 , %2 এ আপানার পোষ্টকে আপভোট করেছেন। ", + "moved_your_post": "%1 আপনার পোষ্ট সরিয়ে নিয়েছেন। ", + "moved_your_topic": "%1 আপনার টপিক সরিয়ে নিয়েছেন। ", "favourited_your_post_in": "%1 has favourited your post in %2.", "user_flagged_post_in": "%1 flagged a post in %2", "user_posted_to": "%1 একটি উত্তর দিয়েছেন: %2", "user_posted_topic": "%1 has posted a new topic: %2", "user_mentioned_you_in": "%1, %2 এ আপনার নাম উল্লেখ করেছেন", - "user_started_following_you": "%1 started following you.", + "user_started_following_you": "%1 আপনাকে অনুসরন করা শুরু করেছেন।", "email-confirmed": "ইমেইল নিশ্চিত করা হয়েছে", "email-confirmed-message": "আপনার ইমেইল যাচাই করার জন্য আপনাকে ধন্যবাদ। আপনার অ্যাকাউন্টটি এখন সম্পূর্ণরূপে সক্রিয়।", - "email-confirm-error": "একটি ত্রুটি ঘটেছে...", "email-confirm-error-message": "আপনার ইমেল ঠিকানার বৈধতা যাচাইয়ে একটি সমস্যা হয়েছে। সম্ভবত কোডটি ভুল ছিল অথবা কোডের মেয়াদ শেষ হয়ে গিয়েছে।", "email-confirm-sent": "নিশ্চিতকরণ ইমেইল পাঠানো হয়েছে।" } \ No newline at end of file diff --git a/public/language/bn/pages.json b/public/language/bn/pages.json index 62413970b1..4ab90a11a2 100644 --- a/public/language/bn/pages.json +++ b/public/language/bn/pages.json @@ -5,12 +5,13 @@ "recent": "সাম্প্রতিক টপিক", "users": "নিবন্ধিত সদস্যগণ", "notifications": "বিজ্ঞপ্তি", - "tags": "Topics tagged under \"%1\"", + "tags": "\"%1\" এ ট্যগকৃত টপিকসমূহ", "user.edit": "সম্পাদনা \"%1\"", "user.following": "%1 যাদের অনুসরণ করেন", "user.followers": "যারা %1 কে অনুসরণ করেন", "user.posts": "%1 এর পোস্ট সমুহ", "user.topics": "%1 এর টপিক সমুহ", + "user.groups": "%1's Groups", "user.favourites": "%1'র প্রিয় পোস্টগুলো", "user.settings": "সদস্য সেটিংস", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/bn/recent.json b/public/language/bn/recent.json index 248267756e..720bab2407 100644 --- a/public/language/bn/recent.json +++ b/public/language/bn/recent.json @@ -5,5 +5,15 @@ "month": "মাস", "year": "বছর", "alltime": "সবসময় ", - "no_recent_topics": "কোন সাম্প্রতিক টপিক নেই। " + "no_recent_topics": "কোন সাম্প্রতিক টপিক নেই। ", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/bn/reset_password.json b/public/language/bn/reset_password.json index 70cfbc337b..5643e1c427 100644 --- a/public/language/bn/reset_password.json +++ b/public/language/bn/reset_password.json @@ -7,8 +7,10 @@ "wrong_reset_code.message": "প্রাপ্ত রিসেট কোডটি ভুল ছিল। আবার চেষ্টা করুন, অথবা একটি নতুন রিসেট কোড অনুরোধ করুন।", "new_password": "নতুন পাসওয়ার্ড", "repeat_password": "পাসওয়ার্ড নিশ্চিত করুন", - "enter_email": "Please enter your email address and we will send you an email with instructions on how to reset your account.", - "enter_email_address": "Enter Email Address", - "password_reset_sent": "Password Reset Sent", - "invalid_email": "Invalid Email / Email does not exist!" + "enter_email": "অনুগ্রহপূর্বক আপনার ইমেইল এড্রেস প্রদান করুন, আমরা আপনাকে আপনার পাসওয়ার্ড রিসেট সম্পর্কিত তথ্যাবলী ইমেইলে পাঠিয়ে দিবো। ", + "enter_email_address": "আপনার ইমেইল এড্রেস", + "password_reset_sent": "পাসওয়ার্ড রিসেট মেইল পাঠানো হয়েছে", + "invalid_email": "ভুল ইমেইল / ইমেইল ডেটাবেইজে নেই", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/bn/search.json b/public/language/bn/search.json index daf27f87ac..8fef1aef5a 100644 --- a/public/language/bn/search.json +++ b/public/language/bn/search.json @@ -1,4 +1,40 @@ { "results_matching": "\"%2\" এর সাথে মিলিয়ে %1 ফলাফল পাওয়া গেছে, ( %3 seconds সময় লেগেছে )", - "no-matches": "কোন পোষ্ট খুঁজে পাওয়া যায় নি" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/bn/success.json b/public/language/bn/success.json index ecdecbdb27..281c9af652 100644 --- a/public/language/bn/success.json +++ b/public/language/bn/success.json @@ -1,6 +1,6 @@ { "success": "সফল হয়েছে", "topic-post": "আপনি সফলভাবে পোষ্ট করেছেন। ", - "authentication-successful": "Authentication Successful", + "authentication-successful": "অথেন্টিকেশন সফল হয়েছে", "settings-saved": "সেটিংস সেভ করা হয়েছে। " } \ No newline at end of file diff --git a/public/language/bn/tags.json b/public/language/bn/tags.json index d2e9a213ac..e99c0f835d 100644 --- a/public/language/bn/tags.json +++ b/public/language/bn/tags.json @@ -1,7 +1,7 @@ { - "no_tag_topics": "There are no topics with this tag.", - "tags": "Tags", - "enter_tags_here": "Enter tags here. Press enter after each tag.", - "enter_tags_here_short": "Enter tags...", - "no_tags": "There are no tags yet." + "no_tag_topics": "এই ট্যাগ সম্বলিত কোন টপিক নেই", + "tags": "ট্যাগসমূহ", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here_short": "ট্যাগ বসান", + "no_tags": "এখন পর্যন্ত কোন ট্যাগ নেই" } \ No newline at end of file diff --git a/public/language/bn/topic.json b/public/language/bn/topic.json index b448763aa6..3b0835cf2e 100644 --- a/public/language/bn/topic.json +++ b/public/language/bn/topic.json @@ -12,9 +12,10 @@ "notify_me": "এই টপিকে নতুন উত্তর আসলে জানুন", "quote": "উদ্ধৃতি", "reply": "উত্তর", + "guest-login-reply": "Log in to reply", "edit": "সম্পাদণা", "delete": "মুছে ফেলুন", - "purge": "Purge", + "purge": "পার্জ", "restore": "পুনরূদ্ধার", "move": "সরানো", "fork": "শাখা", @@ -35,62 +36,64 @@ "watch": "দেখা", "unwatch": "অদেখা", "watch.title": "এই টপিকে নতুন উত্তর এলে বিজ্ঞাপণের মাধ্যমে জানুন।", - "unwatch.title": "Stop watching this topic", - "share_this_post": "Share this Post", - "thread_tools.title": "Topic Tools", - "thread_tools.markAsUnreadForAll": "Mark Unread", - "thread_tools.pin": "Pin Topic", - "thread_tools.unpin": "Unpin Topic", - "thread_tools.lock": "Lock Topic", - "thread_tools.unlock": "Unlock Topic", - "thread_tools.move": "Move Topic", - "thread_tools.move_all": "Move All", - "thread_tools.fork": "Fork Topic", - "thread_tools.delete": "Delete Topic", - "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", - "thread_tools.restore": "Restore Topic", - "thread_tools.restore_confirm": "Are you sure you want to restore this topic?", - "thread_tools.purge": "Purge Topic", - "thread_tools.purge_confirm": "Are you sure you want to purge this topic?", - "topic_move_success": "This topic has been successfully moved to %1", - "post_delete_confirm": "Are you sure you want to delete this post?", - "post_restore_confirm": "Are you sure you want to restore this post?", - "post_purge_confirm": "Are you sure you want to purge this post?", - "load_categories": "Loading Categories", - "disabled_categories_note": "Disabled Categories are greyed out", - "confirm_move": "Move", - "confirm_fork": "Fork", - "favourite": "Favourite", - "favourites": "Favourites", - "favourites.has_no_favourites": "You don't have any favourites, favourite some posts to see them here!", - "loading_more_posts": "Loading More Posts", - "move_topic": "Move Topic", - "move_topics": "Move Topics", - "move_post": "Move Post", - "post_moved": "Post moved!", - "fork_topic": "Fork Topic", - "topic_will_be_moved_to": "This topic will be moved to the category", - "fork_topic_instruction": "Click the posts you want to fork", - "fork_no_pids": "No posts selected!", - "fork_success": "Successfully forked topic! Click here to go to the forked topic.", - "composer.title_placeholder": "Enter your topic title here...", - "composer.discard": "Discard", - "composer.submit": "Submit", - "composer.replying_to": "Replying to %1", - "composer.new_topic": "New Topic", - "composer.uploading": "uploading...", - "composer.thumb_url_label": "Paste a topic thumbnail URL", - "composer.thumb_title": "Add a thumbnail to this topic", + "unwatch.title": "এই টপিক দেখা বন্ধ করুন", + "share_this_post": "এই পোষ্টটি শেয়ার করুন", + "thread_tools.title": "টপিক সম্পর্কিত টুলস", + "thread_tools.markAsUnreadForAll": "\"অপঠিত\" হিসেবে চিহ্নিত করুন", + "thread_tools.pin": "টপিক পিন করুন", + "thread_tools.unpin": "টপিক আনপিন করুন", + "thread_tools.lock": "টপিক বন্ধ করুন", + "thread_tools.unlock": "টপিক খুলে দিন", + "thread_tools.move": "টপিক সরান", + "thread_tools.move_all": "সমস্ত টপিক সরান", + "thread_tools.fork": "টপিক ফর্ক করুন", + "thread_tools.delete": "টপিক মুছে ফেলুন", + "thread_tools.delete_confirm": "আপনি নিশ্চিত যে আপনি এই টপিকটি মুছে ফেলতে চান?", + "thread_tools.restore": "টপিক পুনরূদ্ধার করুন", + "thread_tools.restore_confirm": "আপনি নিশ্চিত যে আপনি টপিকটি পুনরূদ্ধার করতে চান?", + "thread_tools.purge": "টপিক পার্জ করুন", + "thread_tools.purge_confirm": "আপনি নিশ্চিত যে আপনি টপিকটি পার্জ করতে চাচ্ছেন ? ", + "topic_move_success": "টপিকটি %1 এ সরিয়ে নেয়া হয়েছে", + "post_delete_confirm": "আপনি নিশ্চিত যে আপনি এই পোষ্টটি মুছে ফেলতে চান ?", + "post_restore_confirm": "আপনি নিশ্চিত যে আপনি এই পোষ্টটি পুনরূূদ্ধার করতে চান ? ", + "post_purge_confirm": "আপনি নিশ্চিত যে আপনি এই পোষ্টটি পার্জ করতে চান ? ", + "load_categories": "ক্যাটাগরী লোড করা হচ্ছে", + "disabled_categories_note": "নিস্ক্রীয় ক্যাটাগরীসমূহ ধূসর কালিতে লেখা রয়েছে। ", + "confirm_move": "সরান", + "confirm_fork": "ফর্ক", + "favourite": "পছন্দ", + "favourites": "পছন্দতালিকা", + "favourites.has_no_favourites": "আপনার যদি কোন পছন্দের পোষ্ট না থেকে থাকে তাহলে কিছু পোষ্ট ফেভারিট করা হলে সেগুলো এখানে দেখতে পাবেন।", + "loading_more_posts": "আরো পোষ্ট লোড করা হচ্ছে", + "move_topic": "টপিক সরান", + "move_topics": "টপিক সমূহ সরান", + "move_post": "পোষ্ট সরান", + "post_moved": "পোষ্ট সরানো হয়েছে", + "fork_topic": "টপিক ফর্ক করুন", + "topic_will_be_moved_to": "এই টপিকটি ক্যাটাগরীতে সরানো হবে", + "fork_topic_instruction": "যে পোষ্টটি ফর্ক করতে চান সেটি ক্লিক করুন", + "fork_no_pids": "কোন পোষ্ট সিলেক্ট করা হয় নি", + "fork_success": "টপিক ফর্ক করা হয়েছে। ফর্ক করা টপিকে যেতে এখানে ক্লিক করুন", + "composer.title_placeholder": "আপনার টপিকের শিরোনাম দিন", + "composer.handle_placeholder": "Name", + "composer.discard": "বাতিল", + "composer.submit": "সাবমিট", + "composer.replying_to": "%1 এর উত্তরে:", + "composer.new_topic": "নতুন টপিক", + "composer.uploading": "আপলোডিং", + "composer.thumb_url_label": "টপিকে থাম্বনেইল URL পেষ্ট করুন", + "composer.thumb_title": "এই টপিকে থাম্বনেইল যোগ করুন", "composer.thumb_url_placeholder": "http://example.com/thumb.png", - "composer.thumb_file_label": "Or upload a file", - "composer.thumb_remove": "Clear fields", - "composer.drag_and_drop_images": "Drag and Drop Images Here", + "composer.thumb_file_label": "অথবা একটি ফাইল আপলোড করুন", + "composer.thumb_remove": "ফিল্ড ক্লিয়ার করুন", + "composer.drag_and_drop_images": "ছবি এখানে ড্র্যাগ করে এনে ছেড়ে দিন", "more_users_and_guests": "%1 more user(s) and %2 guest(s)", "more_users": "%1 more user(s)", "more_guests": "%1 more guest(s)", "users_and_others": "%1 and %2 others", - "sort_by": "Sort by", - "oldest_to_newest": "Oldest to Newest", - "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "sort_by": "সাজানোর ভিত্তি:", + "oldest_to_newest": "পুরাতন থেকে নতুন", + "newest_to_oldest": "নতুন থেকে পুরাতন", + "most_votes": "সর্বোচ্চ ভোট", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/bn/unread.json b/public/language/bn/unread.json index 8f7de2bd14..c5541d28e9 100644 --- a/public/language/bn/unread.json +++ b/public/language/bn/unread.json @@ -1,9 +1,9 @@ { - "title": "Unread", + "title": "অপঠিত", "no_unread_topics": "কোন অপঠিত টপিক নেই", "load_more": "আরো লোড করুন", - "mark_as_read": "Mark as Read", - "selected": "Selected", - "all": "All", - "topics_marked_as_read.success": "Topics marked as read!" + "mark_as_read": "পঠিত হিসেবে চিহ্নিত করুন", + "selected": "নির্বাচিত", + "all": "সবগুলো", + "topics_marked_as_read.success": "পঠিত হিসেবে চিহ্নিত টপিকসমূহ" } \ No newline at end of file diff --git a/public/language/bn/user.json b/public/language/bn/user.json index 2317c20a50..98f94c7936 100644 --- a/public/language/bn/user.json +++ b/public/language/bn/user.json @@ -2,10 +2,12 @@ "banned": "নিষিদ্ধ", "offline": "অফলাইন", "username": "সদস্যের নাম", + "joindate": "Join Date", + "postcount": "Post Count", "email": "ইমেইল", "confirm_email": "ইমেইল নিশ্চিত করুন", "delete_account": "একাউন্ট মুছে ফেলুন", - "delete_account_confirm": "Are you sure you want to delete your account?
This action is irreversible and you will not be able to recover any of your data

Enter your username to confirm that you wish to destroy this account.", + "delete_account_confirm": "আপনি কি নিশ্চিত যে আপনি আপনার একাউন্ট মুছে ফেলতে চান ?
এই কাজটির ফলে আপনার কোন তথ্য পুনরূদ্ধার করা সম্ভব নয়

নিশ্চিত করতে আপনার ইউজারনেম প্রবেশ করান। ", "fullname": "পুর্ণ নাম", "website": "ওয়েবসাইট", "location": "স্থান", @@ -16,6 +18,7 @@ "profile_views": "প্রোফাইল দেখেছেন", "reputation": "সন্মাননা", "favourites": "পছন্দের তালিকা", + "watched": "Watched", "followers": "যাদের অনুসরণ করছেন", "following": "যারা আপনাকে অনুসরণ করছে", "signature": "স্বাক্ষর", @@ -40,7 +43,7 @@ "change_password_success": "আপনার পাসওয়ার্ড আপডেট করা হয়েছে", "confirm_password": "পাসওয়ার্ড নিশ্চিত করুন", "password": "পাসওয়ার্ড", - "username_taken_workaround": "The username you requested was already taken, so we have altered it slightly. You are now known as %1", + "username_taken_workaround": "আপনি যে ইউজারনেম চাচ্ছিলেন সেটি ইতিমধ্যে নেয়া হয়ে গেছে, কাজেই আমরা এটি কিঞ্চিং পরিবর্তন করেছি। আপনি এখন %1 হিসেবে পরিচিত", "upload_picture": "ছবি আপলোড করুন", "upload_a_picture": "ছবি (একটি) আপলোড করুন", "image_spec": "আপনি কেবলমাত্র PNG, JPG অথবা GIF ফাইল আপলোড করতে পারবেন", @@ -49,27 +52,29 @@ "show_email": "আমার ইমেইল দেখাও", "show_fullname": "আমার সম্পূর্ণ নাম দেখাও", "restrict_chats": "আমি যাদের ফলো করি কেবলমাত্র তাদের থেকে বার্তা গ্রহন করা হোক", - "digest_label": "Subscribe to Digest", - "digest_description": "Subscribe to email updates for this forum (new notifications and topics) according to a set schedule", + "digest_label": "ডাইজেষ্টে সাবস্ক্রাইব করুন", + "digest_description": "শিডিউল অনূযায়ী এই ফোরামের ইমেইল আপডেটের জন্য সাবস্ক্রাইব করুন (নতুন নোটিফিকেশন এবং টপিকসমূহ )", "digest_off": "বন্ধ", "digest_daily": "দৈনিক", "digest_weekly": "সাপ্তাহিক", "digest_monthly": "মাসিক", - "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", - "has_no_follower": "This user doesn't have any followers :(", - "follows_no_one": "This user isn't following anyone :(", - "has_no_posts": "This user didn't post anything yet.", - "has_no_topics": "This user didn't post any topics yet.", - "email_hidden": "Email Hidden", - "hidden": "hidden", - "paginate_description": "Paginate topics and posts instead of using infinite scroll.", - "topics_per_page": "Topics per Page", - "posts_per_page": "Posts per Page", - "notification_sounds": "Play a sound when you receive a notification.", - "browsing": "Browsing Settings", - "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.", - "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "send_chat_notifications": "যদি আমি অনলাইনে না থাকি, সেক্ষেত্রে নতুন চ্যাট মেসেজ আসলে আমাকে ইমেইল করুন", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "has_no_follower": "এই সদস্যের কোন ফলোয়ার নেই :(", + "follows_no_one": "এই সদস্য কাউকে ফলো করছেন না :(", + "has_no_posts": "এই সদস্য এখনো কোন পোষ্ট করেন নি", + "has_no_topics": "এই সদস্য এখনো কোন টপিক পোষ্ট করেন নি", + "has_no_watched_topics": "This user didn't watch any topics yet.", + "email_hidden": "ইমেইল গোপন রাখা হয়েছে", + "hidden": "গোপন করা হয়েছে", + "paginate_description": "ইনফাইনাইট স্ক্রলের বদলে টপিক এবং পোষ্টের জন্য পেজিনেশন ব্যাবহার করুন", + "topics_per_page": "প্রতি পেজে কতগুলো টপিক থাকবে", + "posts_per_page": "প্রতি পেইজে কতগুলো পোষ্ট থাকবে", + "notification_sounds": "নতুন নোটিফিকেশনের জন্য নোটিফিকেশন সাউন্ড বাজাও।", + "browsing": "Browsing সেটিংস", + "open_links_in_new_tab": "বাইরের URL গুলো নতুন ট্যাবে খোলা হবে ?", + "enable_topic_searching": "In-Topic সার্চ সক্রীয় করো", + "topic_search_help": "যদি এনাবল করা হয়ে থাকে, In-topic সার্চিং ব্রাউজারের ডিফল্ট সার্চের বদলে পুরো টপিকজুড়ে সার্চ করার সুবিধা দিবে, যা কেবলমাত্র বর্তমান স্কৃণে দেখানো অংশের মধ্যে সীমাবদ্ধ থাকবে না। ", + "follow_topics_you_reply_to": "আপনার উত্তর দেয়া টপিকগুলো ফলো করুন", + "follow_topics_you_create": "আপনার তৈরীকরা টপিকসমূহ ফলো করুন" } \ No newline at end of file diff --git a/public/language/bn/users.json b/public/language/bn/users.json index 923718a0f7..402aa33c27 100644 --- a/public/language/bn/users.json +++ b/public/language/bn/users.json @@ -5,5 +5,8 @@ "search": "খুঁজুন", "enter_username": "ইউজারনেম এর ভিত্তিতে সার্চ করুন", "load_more": "আরো লোড করুন", - "users-found-search-took": "%1 সদস্য(দের) খুঁজে পাওয়া গিয়েছে! সময় লেগেছে %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/cs/category.json b/public/language/cs/category.json index 92d0e10df2..0d598e974a 100644 --- a/public/language/cs/category.json +++ b/public/language/cs/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Nové téma", + "guest-login-post": "Log in to post", "no_topics": "V této kategorii zatím nejsou žádné příspěvky.
Můžeš být první!", "browsing": "prohlíží", "no_replies": "Nikdo ještě neodpověděl", diff --git a/public/language/cs/email.json b/public/language/cs/email.json index 2702ddcc83..a259648e70 100644 --- a/public/language/cs/email.json +++ b/public/language/cs/email.json @@ -9,6 +9,9 @@ "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.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": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "Máte tu nepřečtená oznámení od %1:", "digest.latest_topics": "Nejnovější témata od %1", "digest.cta": "Kliknutím zde navštívíte %1", @@ -17,6 +20,8 @@ "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.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "Tento testovací email slouží k ověření, že mailer je správně nastaven. NodeBB.", "unsub.cta": "Chcete-li změnit tyto nastavení, klikněte zde.", "closing": "Díky!" diff --git a/public/language/cs/error.json b/public/language/cs/error.json index 7583f801b7..6be7f9f69d 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -18,6 +18,9 @@ "username-taken": "Uživatelské jméno je již použito", "email-taken": "Email je již použit", "email-not-confirmed": "Vaše emailová adresa zatím nebyla potvrzena. Kliknutím zde svůj email potvrdíte.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Uživatelské jméno je příliš krátké", "username-too-long": "Uživatelské jméno je příliš dlouhé", "user-banned": "Uživatel byl zakázán", @@ -32,21 +35,29 @@ "no-emailers-configured": "Protože není zaveden žádný emailový plugin, není možné odeslat testovací email.", "category-disabled": "Kategorie zakázána", "topic-locked": "Téma uzamčeno", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Vyčkejte, prosím, nežli se vše kompletně nahraje.", "content-too-short": "Vložte, prosím, delší příspěvek. Příspěvky by měly obsahovat nejméně %1 znaků.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Vložte, prosím, delší titulek. Titulky by měly obsahovat nejméně %1 znaků.", "title-too-long": "Vložte, prosím, kratší titulek. Titulky by neměly být delší, než-li %1 znaků.", "too-many-posts": "Své příspěvky můžete odesílat po %1 sekundách - vyčkejte, prosím, před dalším odesláním", "too-many-posts-newbie": "Jako nový uživatel můžete své příspěvky odesílat po %1 sekundách, dokud nedosáhnete %2 reputace - vyčkejte, prosím, před dalším odesláním", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximální povolená velikost souboru je %1 kbs - nahrávejte, prosím, menší soubory", "cant-vote-self-post": "Nemůžete hlasovat pro svůj vlastní příspěvek", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "Nemůžete zakazovat ostatní administrátory!", - "invalid-image-type": "Neplatný typ obrázku", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Název skupiny je příliš krátký", "group-already-exists": "Skupina už exstuje", "group-name-change-not-allowed": "Změna názvu skupiny není povolena", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "Tento příspěvek byl již vymazán", "post-already-restored": "Tento příspěvek byl již obnoven", "topic-already-deleted": "Toto téma bylo již vymazáno", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Topic thumbnails are disabled.", "invalid-file": "Neplatný soubor", "uploads-are-disabled": "Nahrávání je zakázáno", - "upload-error": "Chyba při nahrávání : %1", "signature-too-long": "Pardon, ale váš podpis nemůže být delší, než-li %1 znaků.", "cant-chat-with-yourself": "Nemůžete chatovat sami se sebou!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Systém reputací je zakázán.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Chyba při registraci" + "registration-error": "Chyba při registraci", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/cs/global.json b/public/language/cs/global.json index 026a981f2d..8fa5d860bb 100644 --- a/public/language/cs/global.json +++ b/public/language/cs/global.json @@ -3,9 +3,10 @@ "search": "Hledat", "buttons.close": "Zavřít", "403.title": "Přístup odepřen", - "403.message": "K této stránce nemáte přístup. Zkuste se přihlásit?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Stránka nenalezena", - "404.message": "Tato stránka bohužel neexistuje. Vraťte se na domovskou stránku.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Neznámá chyba", "500.message": "Jejda, vypadá to, že se něco pokazilo.", "register": "Registrovat", @@ -26,6 +27,7 @@ "header.tags": "Tagy", "header.popular": "Populární", "header.users": "Uživatelé", + "header.groups": "Groups", "header.chats": "Chats", "header.notifications": "Oznámení", "header.search": "Hledat", @@ -73,5 +75,7 @@ "updated.title": "Fórum zaktualizováno", "updated.message": "Toto fórum bylo právě aktualizováno na poslední verzi. Klikněte zde a obnovte tuto stránku.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Vymazat vše" } \ No newline at end of file diff --git a/public/language/cs/groups.json b/public/language/cs/groups.json index b777659938..06b86790ae 100644 --- a/public/language/cs/groups.json +++ b/public/language/cs/groups.json @@ -1,8 +1,34 @@ { "groups": "Skupiny", "view_group": "Prohlédnout skupinu", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "podrobnosti skupiny", "details.members": "Seznam členů", + "details.pending": "Pending Members", "details.has_no_posts": "Členové této skupiny dosud neodeslali ani jeden příspěvek.", - "details.latest_posts": "Nejnovější příspěvky" + "details.latest_posts": "Nejnovější příspěvky", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/cs/login.json b/public/language/cs/login.json index a2bb040e89..3308fbdde6 100644 --- a/public/language/cs/login.json +++ b/public/language/cs/login.json @@ -1,5 +1,7 @@ { - "username": "Uživatelské jméno / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "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/notifications.json b/public/language/cs/notifications.json index de2aad9422..791c3dc948 100644 --- a/public/language/cs/notifications.json +++ b/public/language/cs/notifications.json @@ -2,6 +2,7 @@ "title": "Upozornění", "no_notifs": "You have no new notifications", "see_all": "See all Notifications", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "Odkaz mimo fórum", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Email Confirmed", "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", "email-confirm-sent": "Confirmation email sent." } \ No newline at end of file diff --git a/public/language/cs/pages.json b/public/language/cs/pages.json index b77b6411ba..15386435af 100644 --- a/public/language/cs/pages.json +++ b/public/language/cs/pages.json @@ -11,6 +11,7 @@ "user.followers": "People who Follow %1", "user.posts": "Posts made by %1", "user.topics": "Topics created by %1", + "user.groups": "%1's Groups", "user.favourites": "%1's Favourite Posts", "user.settings": "User Settings", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/cs/recent.json b/public/language/cs/recent.json index d769997c6f..13e8b2284e 100644 --- a/public/language/cs/recent.json +++ b/public/language/cs/recent.json @@ -5,5 +5,15 @@ "month": "Měsíc", "year": "Year", "alltime": "All Time", - "no_recent_topics": "There are no recent topics." + "no_recent_topics": "There are no recent topics.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/cs/reset_password.json b/public/language/cs/reset_password.json index 41dce1549f..ba87244661 100644 --- a/public/language/cs/reset_password.json +++ b/public/language/cs/reset_password.json @@ -10,5 +10,7 @@ "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", "password_reset_sent": "Obnova hesla odeslána", - "invalid_email": "Špatný email / Email neexistuje!" + "invalid_email": "Špatný email / Email neexistuje!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/cs/search.json b/public/language/cs/search.json index e9eef4632a..9dad8b6eab 100644 --- a/public/language/cs/search.json +++ b/public/language/cs/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/cs/tags.json b/public/language/cs/tags.json index 55bce276dc..f2003f978a 100644 --- a/public/language/cs/tags.json +++ b/public/language/cs/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Není zde žádné téma s tímto tagem.", "tags": "Tagy", - "enter_tags_here": "Zde vložte tagy. Po každém vložení tagu zmáčkněte enter.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Vložte tagy ...", "no_tags": "Zatím tu není žádný tag." } \ No newline at end of file diff --git a/public/language/cs/topic.json b/public/language/cs/topic.json index 89b3bea7bb..4f20b6e6db 100644 --- a/public/language/cs/topic.json +++ b/public/language/cs/topic.json @@ -12,6 +12,7 @@ "notify_me": "Sledovat toto téma", "quote": "Citovat", "reply": "Odpovědět", + "guest-login-reply": "Log in to reply", "edit": "Upravit", "delete": "Smazat", "purge": "Purge", @@ -74,6 +75,7 @@ "fork_no_pids": "Žádné příspěvky nebyly vybrány!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Enter your topic title here...", + "composer.handle_placeholder": "Name", "composer.discard": "Discard", "composer.submit": "Submit", "composer.replying_to": "Replying to %1", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/cs/user.json b/public/language/cs/user.json index 63cea57e2b..55c22b5b0b 100644 --- a/public/language/cs/user.json +++ b/public/language/cs/user.json @@ -2,6 +2,8 @@ "banned": "Banned", "offline": "Offline", "username": "Uživatelské jméno", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Email", "confirm_email": "Potvrdit email", "delete_account": "Vymazat účet", @@ -16,6 +18,7 @@ "profile_views": "Zobrazení profilu", "reputation": "Reputace", "favourites": "Oblíbené", + "watched": "Watched", "followers": "Sledují ho", "following": "Sleduje", "signature": "Podpis", @@ -56,10 +59,12 @@ "digest_weekly": "Weekly", "digest_monthly": "Monthly", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Tohoto uživatele nikdo nesleduje :(", "follows_no_one": "Tento uživatel nikoho nesleduje :(", "has_no_posts": "This user didn't post anything yet.", "has_no_topics": "This user didn't post any topics yet.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Skrytý email", "hidden": "skrytý", "paginate_description": "Paginate topics and posts instead of using infinite scroll.", diff --git a/public/language/cs/users.json b/public/language/cs/users.json index b3bc661463..22b698a8c0 100644 --- a/public/language/cs/users.json +++ b/public/language/cs/users.json @@ -5,5 +5,8 @@ "search": "Vyhledávat", "enter_username": "Zadej uživatelské jméno k hledání", "load_more": "Načíst další", - "users-found-search-took": "Nazelezeno: %1 uživetel(ů)! Vyhledání trvalo %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/de/category.json b/public/language/de/category.json index f455b1604b..f6a13932c2 100644 --- a/public/language/de/category.json +++ b/public/language/de/category.json @@ -1,6 +1,7 @@ { "new_topic_button": "Neues Thema", - "no_topics": "Es gibt noch keine Themen in dieser Kategorie.
Warum beginnst du nicht das erste?", + "guest-login-post": "Anmelden um einen Beitrag zu erstellen", + "no_topics": "Es gibt noch keine Themen in dieser Kategorie.
Warum beginnst du nicht eins?", "browsing": "Aktiv", "no_replies": "Niemand hat geantwortet", "share_this_category": "Teile diese Kategorie", diff --git a/public/language/de/email.json b/public/language/de/email.json index 1b874b2276..b60e620dd8 100644 --- a/public/language/de/email.json +++ b/public/language/de/email.json @@ -9,6 +9,9 @@ "reset.text1": "Wir haben eine Anfrage auf Zurücksetzung deines Passworts erhalten, wahrscheinlich, weil du es vergessen hast. Falls dies nicht der Fall ist, ignoriere bitte diese E-Mail.", "reset.text2": "Klicke bitte auf den folgenden Link, um mit der Zurücksetzung deines Passworts fortzufahren:", "reset.cta": "Klicke hier, um dein Passwort zurückzusetzen", + "reset.notify.subject": "Passwort erfolgreich geändert", + "reset.notify.text1": "Wir benachrichtigen dich das am %1, dein Passwort erfolgreich geändert wurde.", + "reset.notify.text2": "Wenn du das nicht autorisiert hast, bitte benachrichtige umgehend einen Administrator.", "digest.notifications": "Du hast ungelesene Benachrichtigungen von %1:", "digest.latest_topics": "Aktuellste Themen vom %1", "digest.cta": "Klicke hier, um %1 zu besuchen", @@ -17,6 +20,8 @@ "notif.chat.subject": "Neue Chatnachricht von %1 erhalten", "notif.chat.cta": "Klicke hier, um die Unterhaltung fortzusetzen", "notif.chat.unsub.info": "Diese Chat-Benachrichtigung wurde dir aufgrund deiner Abonnement-Einstellungen gesendet.", + "notif.post.cta": "Hier klicken, um das gesamte Thema zu lesen", + "notif.post.unsub.info": "Diese Mitteilung wurde wegen ihrer Abonnement-Einstellung gesendet.", "test.text1": "Dies ist eine Test-E-Mail, um zu überprüfen, ob der E-Mailer deines NodeBB korrekt eingestellt wurde.", "unsub.cta": "Klicke hier, um diese Einstellungen zu ändern.", "closing": "Danke!" diff --git a/public/language/de/error.json b/public/language/de/error.json index 23026bcba2..f5c852c661 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -2,7 +2,7 @@ "invalid-data": "Daten ungültig", "not-logged-in": "Du bist nicht angemeldet.", "account-locked": "Dein Account wurde vorübergehend gesperrt.", - "search-requires-login": "Die Suche erfordert ein Konto! Bitte log dich ein oder registrieren dich!", + "search-requires-login": "Die Suche erfordert ein Konto! Bitte log dich ein oder registriere dich!", "invalid-cid": "Ungültige Kategorie-ID", "invalid-tid": "Ungültige Themen-ID", "invalid-pid": "Ungültige Beitrags-ID", @@ -18,10 +18,13 @@ "username-taken": "Der Benutzername ist bereits vergeben", "email-taken": "Die E-Mail-Adresse ist bereits vergeben", "email-not-confirmed": "Deine E-Mail wurde noch nicht bestätigt. Bitte klicke hier, um deine E-Mail zu bestätigen.", + "email-not-confirmed-chat": "Der Chat ist deaktiviert bis Du deine E-Mail bestätigt hast", + "no-email-to-confirm": "Dieses Forum setzt E-Mail-Bestätigung voraus, bitte klick hier um eine E-Mail-Adresse einzugeben", + "email-confirm-failed": "Wir konnten deine E-Mail-Adresse nicht bestätigen, bitte versuch es später noch einmal", "username-too-short": "Benutzername ist zu kurz", "username-too-long": "Der Benutzername ist zu lang", "user-banned": "Der Benutzer ist gesperrt", - "user-too-new": "Entschuldigung, du musst %1 Sekunden warten, bevor du deinen ersten Beitrag verfassen kannst!", + "user-too-new": "Tut uns leid, du musst %1 Sekunden warten, bevor du deinen ersten Beitrag verfassen kannst!", "no-category": "Die Kategorie existiert nicht", "no-topic": "Das Thema existiert nicht", "no-post": "Der Beitrag existiert nicht", @@ -32,21 +35,29 @@ "no-emailers-configured": "Es wurde keine E-Mail-Plugins geladen, weshalb eine Test-E-Mail nicht gesendet werden konnte.", "category-disabled": "Kategorie ist deaktiviert", "topic-locked": "Thema ist gesperrt", + "post-edit-duration-expired": "Du darfst Beiträge lediglich innerhalb von %1 Sekunden nach dem erstellen editieren", "still-uploading": "Bitte warte bis der Vorgang abgeschlossen ist.", "content-too-short": "Bitte gib einen längeren Beitrag ein. Beiträge sollten mindestens %1 Zeichen enthalten.", + "content-too-long": "Bitte schreibe einen kürzeren Beitrag. Beiträge können nicht mehr als %1 Zeichen enthalten.", "title-too-short": "Bitte gib einen längeren Titel ein. Titel sollten mindestens %1 Zeichen enthalten.", "title-too-long": "Der Titel darf maximal %1 Zeichen enthalten.", "too-many-posts": "Du kannst maximal alle %1 Sekunden einen Beitrag erstellen - bitte warte, bevor du einen neuen Beitrag erstellst", "too-many-posts-newbie": "Als neuer Benutzer kannst du nur alle %1 Sekunden einen Beitrag verfassen, bis du %2 Reputationspunkte hast - Bitte warte etwas, bevor du erneut einen Beitrag verfasst", - "file-too-big": "Die maximale Dateigröße beträgt %1 kbs - bitte lade eine kleinere Datei hoch", - "cant-vote-self-post": "Du kannst deinen eigenen Beitrag nicht bewerten.", + "tag-too-short": "Bitte gib ein längeres Stichwort an. Stichwörter sollten aus mindestens %1 Zeichen bestehen.", + "tag-too-long": "Bitte gib ein kürzeres Stichwort ein. Stichwörter können nicht länger als %1 Zeichen sein.", + "file-too-big": "Die maximale Dateigröße beträgt %1 kB - bitte lade eine kleinere Datei hoch", + "cant-vote-self-post": "Du kannst deinen eigenen Beitrag nicht bewerten", "already-favourited": "Dieser Beitrag ist bereits in deinen Favoriten enthalten", "already-unfavourited": "Du hast diesen Beitrag bereits aus deinen Favoriten entfernt", "cant-ban-other-admins": "Du kannst andere Administratoren nicht sperren!", - "invalid-image-type": "Ungültiger Bildtyp", + "invalid-image-type": "Falsche Bildart. Erlaubte Arten sind: %1", + "invalid-image-extension": "Ungültige Dateinamenerweiterung", + "invalid-file-type": "Ungültiger Dateityp. Erlaubte Typen sind: %1", "group-name-too-short": "Gruppenname zu kurz", "group-already-exists": "Gruppe existiert bereits", "group-name-change-not-allowed": "Du kannst den Namen der Gruppe nicht ändern", + "group-already-member": "Du bist bereits Teil dieser Gruppe", + "group-needs-owner": "Diese Gruppe muss mindestens einen Besitzer vorweisen", "post-already-deleted": "Dieser Beitrag ist bereits gelöscht worden", "post-already-restored": "Dieser Beitrag ist bereits wiederhergestellt worden", "topic-already-deleted": "Dieses Thema ist bereits gelöscht worden", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Vorschaubilder für Themen sind deaktiviert", "invalid-file": "Datei ungültig", "uploads-are-disabled": "Uploads sind deaktiviert", - "upload-error": "Upload-Fehler: %1", "signature-too-long": "Entschuldigung, deine Signatur darf maximal %1 Zeichen enthalten.", "cant-chat-with-yourself": "Du kannst nicht mit dir selber chatten!", "chat-restricted": "Dieser Benutzer hat seine Chatfunktion eingeschränkt. Du kannst nur mit diesem Benutzer chatten, wenn er dir folgt.", + "too-many-messages": "Du hast zu viele Nachrichten versandt, bitte warte eine Weile.", "reputation-system-disabled": "Das Reputationssystem ist deaktiviert.", "downvoting-disabled": "Downvotes sind deaktiviert.", "not-enough-reputation-to-downvote": "Deine Reputation ist zu niedrig, um diesen Beitrag negativ zu bewerten.", "not-enough-reputation-to-flag": "Deine Reputation ist nicht gut genug, um diesen Beitrag zu melden", "reload-failed": "Es ist ein Problem während des Reloads von NodeBB aufgetreten: \"%1\". NodeBB wird weiterhin clientseitige Assets bereitstellen, allerdings solltest du das, was du vor dem Reload gemacht hast, rückgängig machen.", - "registration-error": "Registrierungsfehler" + "registration-error": "Registrierungsfehler", + "parse-error": "Beim auswerten der Serverantwort ist etwas schiefgegangen", + "wrong-login-type-email": "Bitte nutze deine E-Mail-Adresse zum einloggen", + "wrong-login-type-username": "Bitte nutze deinen Benutzernamen zum einloggen" } \ No newline at end of file diff --git a/public/language/de/global.json b/public/language/de/global.json index 8dfcd1f009..8da4b23a06 100644 --- a/public/language/de/global.json +++ b/public/language/de/global.json @@ -3,9 +3,10 @@ "search": "Suche", "buttons.close": "Schließen", "403.title": "Zugriff verweigert", - "403.message": "Du bist nicht dazu berechtigt, diese Seite aufzurufen. Logge dich ein und versuche es erneut.", + "403.message": "Du hast keine Zugriffsberechtigung für diese Seite.", + "403.login": "Du solltest Dich einloggen.", "404.title": " Nicht Gefunden", - "404.message": "Die angeforderte Seite wurde nicht gefunden. Zurück zur Übersicht.", + "404.message": "Diese Seite existiert nicht. Zur Homepage zurückkehren.", "500.title": "Interner Fehler.", "500.message": "Ups! Scheint als wäre etwas schief gelaufen!", "register": "Registrieren", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "Beliebt", "header.users": "Benutzer", + "header.groups": "Gruppen", "header.chats": "Chats", "header.notifications": "Benachrichtigungen", "header.search": "Suche", @@ -73,5 +75,7 @@ "updated.title": "Forum aktualisiert", "updated.message": "Dieses Forum wurde gerade auf die neueste Version aktualisiert. Klicke hier, um die Seite neuzuladen.", "privacy": "Privatsphäre", + "follow": "Folgen", + "unfollow": "Entfolgen", "delete_all": "Alles löschen" } \ No newline at end of file diff --git a/public/language/de/groups.json b/public/language/de/groups.json index abd292d21c..52fa359f53 100644 --- a/public/language/de/groups.json +++ b/public/language/de/groups.json @@ -1,8 +1,34 @@ { "groups": "Gruppen", "view_group": "Gruppe betrachten", + "owner": "Gruppenbesitzer", + "new_group": "Neue Gruppe erstellen", + "no_groups_found": "Es sind keine Gruppen vorhanden", + "pending.accept": "Annehmen", + "pending.reject": "Abweisen", + "cover-instructions": "Foto auf eine Position bewegen, und Speichern drücken", + "cover-change": "Ändern", + "cover-save": "Speichern", + "cover-saving": "Speicherung läuft", "details.title": "Gruppendetails", "details.members": "Mitgliederliste", + "details.pending": "Mitglieder in Schwebe", "details.has_no_posts": "Die Mitglieder dieser Gruppe haben keine Beiträge verfasst.", - "details.latest_posts": "Aktuelle Beiträge" + "details.latest_posts": "Neueste Beiträge", + "details.private": "Privat", + "details.grant": "Gewähre/widerrufe Besitz", + "details.kick": "Kick", + "details.owner_options": "Gruppenadministration", + "details.group_name": "Gruppenname", + "details.description": "Beschreibung", + "details.badge_preview": "Abzeichenvorschau", + "details.change_icon": "Symbol ändern", + "details.change_colour": "Farbe ändern", + "details.badge_text": "Text für das Abzeichen", + "details.userTitleEnabled": "Abzeichen anzeigen", + "details.private_help": "Wenn aktiviert, setzt ein Gruppenbeitritt die Zustimmung eines Gruppenbesitzers voraus", + "details.hidden": "Versteckt", + "details.hidden_help": "Wenn aktiviert, wird diese Gruppe in der Gruppenliste nicht zu finden sein, und Benutzer werden manuell eingeladen werden müssen.", + "event.updated": "Gruppendetails wurden aktualisiert", + "event.deleted": "Die Gruppe \"%1\" wurde gelöscht." } \ No newline at end of file diff --git a/public/language/de/login.json b/public/language/de/login.json index 099b5a48c4..33d68113ca 100644 --- a/public/language/de/login.json +++ b/public/language/de/login.json @@ -1,8 +1,10 @@ { - "username": "Nutzername / E-Mail Adresse", + "username-email": "Benutzername / E-Mail-Adresse", + "username": "Benutzername", + "email": "E-Mail", "remember_me": "Eingeloggt bleiben?", "forgot_password": "Passwort vergessen?", - "alternative_logins": "Login Alternativen", + "alternative_logins": "Alternative Logins", "failed_login_attempt": " Anmeldeversuch fehlgeschlagen, versuche es erneut.", "login_successful": "Du hast dich erfolgreich eingeloggt!", "dont_have_account": "Sie haben noch kein Konto?" diff --git a/public/language/de/notifications.json b/public/language/de/notifications.json index 5a8981943d..f500eefe5b 100644 --- a/public/language/de/notifications.json +++ b/public/language/de/notifications.json @@ -2,6 +2,7 @@ "title": "Benachrichtigungen", "no_notifs": "Du hast keine neuen Benachrichtigungen", "see_all": "Alle Benachrichtigungen ansehen", + "mark_all_read": "Alle Benachrichtigungen als gelesen markieren", "back_to_home": "Zurück zu %1", "outgoing_link": "Externer Link", "outgoing_link_message": "Du verlässt nun %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 folgt dir jetzt.", "email-confirmed": "E-Mail bestätigt", "email-confirmed-message": "Vielen Dank für Ihre E-Mail-Validierung. Ihr Konto ist nun vollständig aktiviert.", - "email-confirm-error": "Es ist ein Fehler aufgetreten ...", "email-confirm-error-message": "Es gab ein Problem bei der Validierung Ihrer E-Mail-Adresse. Möglicherweise ist der Code ungültig oder abgelaufen.", "email-confirm-sent": "Bestätigungs-E-Mail gesendet." } \ No newline at end of file diff --git a/public/language/de/pages.json b/public/language/de/pages.json index 277678114f..78b7c7469d 100644 --- a/public/language/de/pages.json +++ b/public/language/de/pages.json @@ -11,6 +11,7 @@ "user.followers": "Nutzer, die %1 folgen", "user.posts": "Beiträge von %1", "user.topics": "Themen von %1", + "user.groups": "%1's Gruppen", "user.favourites": "Von %1 favorisierte Beiträge", "user.settings": "Benutzer-Einstellungen", "maintenance.text": "%1 befindet sich derzeit in der Wartung. Bitte komm später wieder.", diff --git a/public/language/de/recent.json b/public/language/de/recent.json index dfed232f64..e64846b674 100644 --- a/public/language/de/recent.json +++ b/public/language/de/recent.json @@ -5,5 +5,15 @@ "month": "Monat", "year": "Jahr", "alltime": "Gesamter Zeitraum", - "no_recent_topics": "Es gibt keine aktuellen Themen." + "no_recent_topics": "Es gibt keine aktuellen Themen.", + "no_popular_topics": "Es gibt keine beliebten Themen.", + "there-is-a-new-topic": "Es gibt ein neues Thema.", + "there-is-a-new-topic-and-a-new-post": "Es gibt ein neues Thema und einen neuen Beitrag.", + "there-is-a-new-topic-and-new-posts": "Es gibt ein neues Thema und %1 neue Beiträge.", + "there-are-new-topics": "Es gibt %1 neue Themen.", + "there-are-new-topics-and-a-new-post": "Es gibt %1 neue Themen und einen neuen Beitrag.", + "there-are-new-topics-and-new-posts": "Es gibt %1 neue Themen und %2 neue Beiträge.", + "there-is-a-new-post": "Es gibt einen neuen Beitrag.", + "there-are-new-posts": "Es gibt %1 neue Beiträge.", + "click-here-to-reload": "Hier klicken um zu aktualisieren." } \ No newline at end of file diff --git a/public/language/de/reset_password.json b/public/language/de/reset_password.json index bbbfae1249..02d9329f7d 100644 --- a/public/language/de/reset_password.json +++ b/public/language/de/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Bitte gib Deine E-Mail Adresse ein und wir senden Dir eine Anleitung, wie Du Dein Passwort zurücksetzen kannst.", "enter_email_address": "E-Mail Adresse eingeben", "password_reset_sent": "Passwortzurücksetzung beantragt.", - "invalid_email": "Ungültige E-Mail / Adresse existiert nicht!" + "invalid_email": "Ungültige E-Mail / Adresse existiert nicht!", + "password_too_short": "Das eingegebene Passwort ist zu kurz, bitte wähle ein anderes Passwort.", + "passwords_do_not_match": "Die eingegebenen Passwörter stimmen nicht überein." } \ No newline at end of file diff --git a/public/language/de/search.json b/public/language/de/search.json index 4141710537..b803315a9d 100644 --- a/public/language/de/search.json +++ b/public/language/de/search.json @@ -1,4 +1,40 @@ { - "results_matching": "%1 Ergebniss(e) stimmen mit \"%2\" überein, (%3 Sekunden)", - "no-matches": "Keine Beiträge gefunden" + "results_matching": "%1 Ergebnis(se) stimmen mit \"%2\" überein, (%3 Sekunden)", + "no-matches": "Keine Ergebnisse gefunden", + "in": "In", + "by": "Bei", + "titles": "Titel", + "titles-posts": "Titel und Beiträge", + "posted-by": "Geschrieben von", + "in-categories": "In Kategorien", + "search-child-categories": "Suche in Unterkategorien", + "reply-count": "Anzahl Antworten", + "at-least": "Mindestens", + "at-most": "Höchstens", + "post-time": "Verfaßt am", + "newer-than": "Neuer als", + "older-than": "Älter als", + "any-date": "Beliebiger Zeitpunkt", + "yesterday": "Gestern", + "one-week": "Eine Woche", + "two-weeks": "Zwei Wochen", + "one-month": "Ein Monat", + "three-months": "Drei Monate", + "six-months": "Sechs Monate", + "one-year": "Ein Jahr", + "sort-by": "Sortieren nach", + "last-reply-time": "Zeitpunkt der letzten Antwort", + "topic-title": "Thementitel", + "number-of-replies": "Anzahl an Antworten", + "number-of-views": "Anzahl der Aufrufe", + "topic-start-date": "Erstelldatum des Themas", + "username": "Benutzername", + "category": "Kategorie", + "descending": "In absteigender Reihenfolge", + "ascending": "In aufsteigender Reihenfolge", + "save-preferences": "Einstellungen speichern", + "clear-preferences": "Einstellungen löschen", + "search-preferences-saved": "Sucheinstellungen gespeichert", + "search-preferences-cleared": "Sucheinstellungen gelöscht", + "show-results-as": "Ergebnisse anzeigen als" } \ No newline at end of file diff --git a/public/language/de/tags.json b/public/language/de/tags.json index 13a2b4b0d0..9c40b9cc9e 100644 --- a/public/language/de/tags.json +++ b/public/language/de/tags.json @@ -1,7 +1,7 @@ { - "no_tag_topics": "Es gibt keine Themen mit diesem Tag.", - "tags": "Tags", - "enter_tags_here": "Gib hier Tags ein und drück die Eingabetaste nach jedem Tag.", - "enter_tags_here_short": "Gib Tags ein...", - "no_tags": "Es gibt bisher keine Tags." + "no_tag_topics": "Es gibt keine Themen mit diesem Stichwort.", + "tags": "Stichwörter", + "enter_tags_here": "Gib hier Stichwörter ein. %1-%2 Zeichen. Drücke Enter nach jedem Stichwort.", + "enter_tags_here_short": "Gib Stichwörter ein...", + "no_tags": "Es gibt bisher keine Stichwörter." } \ No newline at end of file diff --git a/public/language/de/topic.json b/public/language/de/topic.json index d1f1bc7e88..7036cb823a 100644 --- a/public/language/de/topic.json +++ b/public/language/de/topic.json @@ -12,6 +12,7 @@ "notify_me": "Erhalte eine Benachrichtigung bei neuen Antworten zu diesem Thema.", "quote": "zitieren", "reply": "antworten", + "guest-login-reply": "Anmelden zum Antworten", "edit": "bearbeiten", "delete": "löschen", "purge": "bereinigen", @@ -74,6 +75,7 @@ "fork_no_pids": "Keine Beiträge ausgewählt!", "fork_success": "Thema erfolgreich abgespalten! Klicke hier, um zum abgespalteten Thema zu gelangen.", "composer.title_placeholder": "Hier den Titel des Themas eingeben...", + "composer.handle_placeholder": "Name", "composer.discard": "Verwerfen", "composer.submit": "Absenden", "composer.replying_to": "Antworte auf %1", @@ -92,5 +94,6 @@ "sort_by": "Sortieren nach", "oldest_to_newest": "Älteste zuerst", "newest_to_oldest": "Neuster zuerst", - "most_votes": "Die meisten Stimmen" + "most_votes": "Die meisten Stimmen", + "most_posts": "Die meisten Beiträge" } \ No newline at end of file diff --git a/public/language/de/user.json b/public/language/de/user.json index 6e73a8a1e2..dcc5a89332 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -2,6 +2,8 @@ "banned": "Gebannt", "offline": "offline", "username": "Nutzername", + "joindate": "Registriert vor", + "postcount": "Beiträge", "email": "E-Mail", "confirm_email": "E-Mail bestätigen", "delete_account": "Konto löschen", @@ -16,6 +18,7 @@ "profile_views": "Profilaufrufe", "reputation": "Reputation", "favourites": "Favoriten", + "watched": "Beobachtet", "followers": "Folger", "following": "Folgt", "signature": "Signatur", @@ -56,10 +59,12 @@ "digest_weekly": "Wöchentlich", "digest_monthly": "Monatlich", "send_chat_notifications": "Sende eine E-Mail, wenn eine neue Chat-Nachricht eingeht und ich nicht online bin", + "send_post_notifications": "Sende eine E-Mail wenn auf Themen die ich abonniert habe geantwortet wird", "has_no_follower": "Dieser User hat noch keine Follower.", "follows_no_one": "Dieser User folgt noch niemandem :(", "has_no_posts": "Dieser Nutzer hat noch nichts gepostet.", "has_no_topics": "Dieser Nutzer hat noch keine Themen gepostet.", + "has_no_watched_topics": "Diese Person beobachtet keine Themen", "email_hidden": "E-Mail Adresse versteckt", "hidden": "versteckt", "paginate_description": "Themen und Beiträge auf Seiten aufteilen statt unendliches Scrollen verwenden.", @@ -69,7 +74,7 @@ "browsing": "Browser Einstellungen", "open_links_in_new_tab": "Externe Links in neuem Tab öffnen?", "enable_topic_searching": "Suchen innerhalb von Themen aktivieren", - "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.", + "topic_search_help": "Falls aktiviert, wird die Suche im Thema das Standardsuchverhalten des Browsers überschreiben und es Ihnen erlauben, das ganze Thema statt dessen, was sich auf dem Bildschirm befindet, zu durchsuchen.", "follow_topics_you_reply_to": "Folge Themen, auf die du antwortest.", "follow_topics_you_create": "Folge Themen, die du erstellst." } \ No newline at end of file diff --git a/public/language/de/users.json b/public/language/de/users.json index d00001e0f4..99b17f79f6 100644 --- a/public/language/de/users.json +++ b/public/language/de/users.json @@ -5,5 +5,8 @@ "search": "Suchen", "enter_username": "Benutzer durchsuchen", "load_more": "mehr laden", - "users-found-search-took": "%1 Benutzer gefunden! Die Suche dauerte %2 ms." + "users-found-search-took": "%1 Benutzer gefunden! Die Suche dauerte %2 ms.", + "filter-by": "Filtern nach", + "online-only": "Nur Online", + "picture-only": "Nur mit Bildern" } \ No newline at end of file diff --git a/public/language/el/category.json b/public/language/el/category.json index 34cf7d16c3..73f3b51724 100644 --- a/public/language/el/category.json +++ b/public/language/el/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Νέο Θέμα", + "guest-login-post": "Log in to post", "no_topics": "Δεν υπάρχουν θέματα σε αυτή την κατηγορία.
Γιατί δεν δοκιμάζεις να δημοσιεύσεις ένα εσύ;", "browsing": "περιηγούνται", "no_replies": "Κανείς δεν έχει απαντήσει", diff --git a/public/language/el/email.json b/public/language/el/email.json index 7831ba8562..c4a52f1ffa 100644 --- a/public/language/el/email.json +++ b/public/language/el/email.json @@ -9,6 +9,9 @@ "reset.text1": "Λάβαμε ένα αίτημα για επαναφορά του κωδικού σου, πιθανότατα γιατί τον ξέχασες. Αν δεν έκανες εσύ αυτό το αίτημα, αγνόησε αυτό το email.", "reset.text2": "Για να κάνεις την επαναφορά του κωδικού σου, παρακαλώ πάτα στο παρακάτω σύνδεσμο:", "reset.cta": "Κάνε κλικ εδώ για να επαναφέρεις τον κωδικό σου", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Πρόσφατα θέματα στο %1", "digest.cta": "Κάνε κλικ εδώ για να επισκεφτείς το %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "Νέο μήνυμα συνομιλίας από τον/την %1", "notif.chat.cta": "Κάνε κλικ εδώ για να πας στην συνομιλία", "notif.chat.unsub.info": "Αυτή η ειδοποίηση για συνομιλία σου στάλθηκε λόγω των ρυθμίσεών σου. ", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "Αυτό είναι ένα δοκιμαστικό email για να επιβεβαιώσουμε ότι ο emailer έχει στηθεί σωστά για το NodeBB.", "unsub.cta": "Κάνε κλικ εδώ για να αλλάξεις αυτές τις ρυθμίσεις", "closing": "Ευχαριστούμε!" diff --git a/public/language/el/error.json b/public/language/el/error.json index 1af21d0aad..26ca6539ba 100644 --- a/public/language/el/error.json +++ b/public/language/el/error.json @@ -18,6 +18,9 @@ "username-taken": "Το όνομα χρήστη είναι πιασμένο", "email-taken": "Το email είναι πιασμένο", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Το όνομα χρήστη είναι πολύ μικρό", "username-too-long": "Το όνομα χρήστη είναι πολύ μεγάλο", "user-banned": "Ο Χρήστης είναι αποκλεισμένος/η", @@ -32,21 +35,29 @@ "no-emailers-configured": "Δεν έχουν φορτωθεί email plugins, οποτε το δοκιμαστικό email δεν μπορεί να σταλθεί", "category-disabled": "Η κατηγορία έχει απενεργοποιηθεί", "topic-locked": "Το θέμα έχει κλειδωθεί", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Παρακαλώ περίμενε να τελειώσει το ανέβασμα των αρχείων.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Παρακαλώ γράψε έναν μικρότερο τίτλο. Δεν μπορεί να είναι μεγαλύτερος από %1 χαρακτήρες.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "Δεν μπορείς να ψηφίσεις την δημοσίευσή σου", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "Δεν μπορείς να αποκλείσεις άλλους διαχειριστές!", - "invalid-image-type": "Άκυρος τύπος εικόνας", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Το όνομα της ομάδας είναι πολύ μικρό", "group-already-exists": "Το όνομα της ομάδας υπάρχει ήδη", "group-name-change-not-allowed": "Αλλαγή του ονόματος της ομάδας δεν επιτρέπεται", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Οι εικόνες θεμάτων είναι απενεργοποιημένες", "invalid-file": "Άκυρο Αρχείο", "uploads-are-disabled": "Το ανέβασμα αρχείων έχει απενεργοποιηθεί", - "upload-error": "Λάθος ανεβάσματος αρχείου: %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "Δεν μπορείς να συνομιλήσεις με τον εαυτό σου!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Το σύστημα φήμης έχει απενεργοποιηθεί.", "downvoting-disabled": "Η καταψήφιση έχει απενεργοποιηθεί", "not-enough-reputation-to-downvote": "Δεν έχεις αρκετή φήμη για να καταψηφίσεις αυτή την δημοσίευση", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "Το NodeBB συνάντησε ένα πρόβλημα καθώς γινόταν η ανανέωση: \"%1\". Το NodeBB θα συνεχίσει να προσφέρει τα στοιχεία του χρήστη, αν και θα ήταν καλή ιδέα να επαναφέρεις ότι έκανες πριν την ανανέωση.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/el/global.json b/public/language/el/global.json index 9ec5c25a11..e7ce30b6a7 100644 --- a/public/language/el/global.json +++ b/public/language/el/global.json @@ -3,9 +3,10 @@ "search": "Αναζήτηση", "buttons.close": "Κλείσιμο", "403.title": "Δεν επιτρέπεται η πρόσβαση", - "403.message": "Φαίνεται πως βρέθηκες σε κάποια σελίδα στην οποία δεν έχεις πρόσβαση. Ίσως πρέπει να συνδεθείς;", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Δεν βρέθηκε", - "404.message": "Φαίνεται πως βρέθηκες σε κάποια σελίδα στην οποία δεν έχεις πρόσβαση. Επιστροφή στην κεντρική σελίδα.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Εσωτερικό σφάλμα.", "500.message": "Ουπς! Φαίνεται πως κάτι πήγε στραβά!", "register": "Εγγραφή", @@ -26,6 +27,7 @@ "header.tags": "Ετικέτες", "header.popular": "Δημοφιλή", "header.users": "Χρήστες", + "header.groups": "Groups", "header.chats": "Συνομιλίες", "header.notifications": "Ειδοποιήσεις", "header.search": "Αναζήτηση", @@ -73,5 +75,7 @@ "updated.title": "Το φόρουμ αναβαθμίστηκε", "updated.message": "Το φόρουμ μόλις αναβαθμίστηκε στην πιο πρόσφατη έκδοση. Κάνε κλικ εδώ για να ανανεώσεις την σελίδα.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/el/groups.json b/public/language/el/groups.json index b531e8ebe0..305920e189 100644 --- a/public/language/el/groups.json +++ b/public/language/el/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "Προβολή Ομάδας", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Λεπτομέρειες Ομάδας", "details.members": "Λίστα Μελών", + "details.pending": "Pending Members", "details.has_no_posts": "Τα μέλη αυτής της ομάδας δεν έχουν δημοσιεύσει τίποτα.", - "details.latest_posts": "Τελευταίες δημοσιεύσεις." + "details.latest_posts": "Τελευταίες δημοσιεύσεις.", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/el/login.json b/public/language/el/login.json index e8ba8157d5..6c10fb3de8 100644 --- a/public/language/el/login.json +++ b/public/language/el/login.json @@ -1,5 +1,7 @@ { - "username": "Όνομα χρήστη / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Απομνημόνευση;", "forgot_password": "Ξέχασες τον κωδικό σου;", "alternative_logins": "Εναλλακτικά Login", diff --git a/public/language/el/notifications.json b/public/language/el/notifications.json index d59bf490c6..68fe73ee7f 100644 --- a/public/language/el/notifications.json +++ b/public/language/el/notifications.json @@ -2,6 +2,7 @@ "title": "Ειδοποιήσεις", "no_notifs": "Δεν έχεις νέες ειδοποιήσεις;", "see_all": "Προβολή όλων των ειδοποιήσεων", + "mark_all_read": "Mark all notifications read", "back_to_home": "Πίσω στο %1", "outgoing_link": "Εξερχόμενος Σύνδεσμος", "outgoing_link_message": "Τώρα φεύγεις από το %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "Ο/Η %1 σε ακολουθεί.", "email-confirmed": "Το Εmail Επιβεβαιώθηκε", "email-confirmed-message": "Ευχαριστούμε που επιβεβαίωσες το email σου. Ο λογαριασμός σου είναι πλέον πλήρως ενεργοποιημένος.", - "email-confirm-error": "Συνέβη κάποιο σφάλμα...", "email-confirm-error-message": "Υπήρξε κάποιο πρόβλημα με την επιβεβαίωση της διεύθυνσής email σου. Ίσως ο κώδικας να είναι άκυρος ή να έχει λήξει.", "email-confirm-sent": "Στάλθηκε email επιβεβαίωσης." } \ No newline at end of file diff --git a/public/language/el/pages.json b/public/language/el/pages.json index 04301ee967..0b9a89746e 100644 --- a/public/language/el/pages.json +++ b/public/language/el/pages.json @@ -11,6 +11,7 @@ "user.followers": "Άτομα που ακολουθούν τον/την %1", "user.posts": "Δημοσιεύσεις από τον/την %1", "user.topics": "Θέματα από τον/την %1", + "user.groups": "%1's Groups", "user.favourites": "Οι αγαπημένες δημοσιεύσεις του/της %1", "user.settings": "Επιλογές Χρήστη", "maintenance.text": "Το %1 αυτή την στιγμή συντηρείται. Παρακαλώ έλα αργότερα.", diff --git a/public/language/el/recent.json b/public/language/el/recent.json index 6ec70d2c53..8424eb4616 100644 --- a/public/language/el/recent.json +++ b/public/language/el/recent.json @@ -5,5 +5,15 @@ "month": "Μήνας", "year": "Έτος", "alltime": "Όλο το Ιστορικό", - "no_recent_topics": "Δεν υπάρχουν πρόσφατα θέματα." + "no_recent_topics": "Δεν υπάρχουν πρόσφατα θέματα.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/el/reset_password.json b/public/language/el/reset_password.json index e088a5bd9f..1ceecfd014 100644 --- a/public/language/el/reset_password.json +++ b/public/language/el/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Παρακαλώ γράψε την διεύθυνση email σου και θα σου στείλουμε ένα email με οδηγίες για το πως να επαναφέρεις τον λογαριασμό σου.", "enter_email_address": "Εισαγωγή Διεύθυνσης Email", "password_reset_sent": "Η Επαναφορά Κωδικού Εστάλη", - "invalid_email": "Άκυρο Email / Το email δεν υπάρχει!" + "invalid_email": "Άκυρο Email / Το email δεν υπάρχει!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/el/search.json b/public/language/el/search.json index 38171d7953..11b0b90621 100644 --- a/public/language/el/search.json +++ b/public/language/el/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 αποτελεσμα(τα) για \"%2\", (%3 δευτερόλεπτα)", - "no-matches": "Δεν βρέθηκαν δημοσιεύσεις" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/el/tags.json b/public/language/el/tags.json index 0447ae05b3..4264ed78aa 100644 --- a/public/language/el/tags.json +++ b/public/language/el/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Δεν υπάρχουν θέματα με αυτή την ετικέτα.", "tags": "Ετικέτες", - "enter_tags_here": "Εισαγωγή ετικετών εδώ. Πάτα enter μετά από κάθε ετικέτα.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Εισαγωγή ετικετών...", "no_tags": "Δεν υπάρχουν ακόμα ετικέτες." } \ No newline at end of file diff --git a/public/language/el/topic.json b/public/language/el/topic.json index 063f4ac2a0..5e93f49db9 100644 --- a/public/language/el/topic.json +++ b/public/language/el/topic.json @@ -12,6 +12,7 @@ "notify_me": "Να ειδοποιούμαι για νέες απαντήσεις σε αυτό το θέμα", "quote": "Παράθεση", "reply": "Απάντηση", + "guest-login-reply": "Log in to reply", "edit": "Επεξεργασία", "delete": "Διαγραφή", "purge": "Εκκαθάριση", @@ -74,6 +75,7 @@ "fork_no_pids": "Δεν έχουν επιλεχθεί δημοσιεύσεις!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Εισαγωγή του τίτλου του θέματος εδώ...", + "composer.handle_placeholder": "Name", "composer.discard": "Πέταγμα", "composer.submit": "Υποβολή", "composer.replying_to": "Απάντηση στο %1", @@ -92,5 +94,6 @@ "sort_by": "Ταξινόμηση κατά", "oldest_to_newest": "Παλαιότερο προς Νεότερο", "newest_to_oldest": "Νεότερο προς Παλαιότερο", - "most_votes": "Περισσότερες ψήφοι" + "most_votes": "Περισσότερες ψήφοι", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/el/user.json b/public/language/el/user.json index 17206384d9..306604b44d 100644 --- a/public/language/el/user.json +++ b/public/language/el/user.json @@ -2,6 +2,8 @@ "banned": "Αποκλεισμένος/η", "offline": "Εκτός Σύνδεσης", "username": "Όνομα Χρήστη", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Emai", "confirm_email": "Επιβεβαίωση Email", "delete_account": "Διαγραφή Λογαριασμού", @@ -16,6 +18,7 @@ "profile_views": "Views του προφίλ", "reputation": "Φήμη", "favourites": "Αγαπημένα", + "watched": "Watched", "followers": "Ακόλουθοι", "following": "Ακολουθά", "signature": "Υπογραφή", @@ -56,10 +59,12 @@ "digest_weekly": "Εβδομαδιαίως", "digest_monthly": "Μηνιαία", "send_chat_notifications": "Αποστολή email αν μου έρθει μήνυμα συνομιλίας και δεν είμαι συνδεδεμένος", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Αυτός ο χρήστης δεν έχει κανέναν ακόλουθο :(", "follows_no_one": "Αυτός ο χρήστης δεν ακολουθεί κανέναν :(", "has_no_posts": "Αυτός ο χρήστης δεν έχει δημοσιεύσει τίποτα ακόμη.", "has_no_topics": "Αυτός ο χρήστης δεν έχει δημοσιεύσει κανένα θέμα ακόμη.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Κρυμμένο Emai", "hidden": "κρυμμένο", "paginate_description": "Σελιδοποίηση των θεμάτων και των δημοσιεύσεων αντί για χρήση άπειρου scroll.", diff --git a/public/language/el/users.json b/public/language/el/users.json index aa0c1479dd..aae33e825c 100644 --- a/public/language/el/users.json +++ b/public/language/el/users.json @@ -5,5 +5,8 @@ "search": "Αναζήτηση", "enter_username": "Γράψε ένα όνομα χρήστη προς αναζήτηση", "load_more": "Φόρτωση περισσότερων", - "users-found-search-took": "%1 χρήστης(ες) βρέθηκαν! Η αναζήτηση πήρε %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/en@pirate/category.json b/public/language/en@pirate/category.json index 74b946d216..c2c0b64832 100644 --- a/public/language/en@pirate/category.json +++ b/public/language/en@pirate/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "New Topic", + "guest-login-post": "Log in to post", "no_topics": "Thar be no topics in 'tis category.
Why don't ye give a go' postin' one?", "browsing": "browsin'", "no_replies": "No one has replied to ye message", diff --git a/public/language/en@pirate/email.json b/public/language/en@pirate/email.json index fdbfb006c6..f290435e75 100644 --- a/public/language/en@pirate/email.json +++ b/public/language/en@pirate/email.json @@ -9,6 +9,9 @@ "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", "reset.cta": "Click here to reset your password", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", "digest.cta": "Click here to visit %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "New chat message received from %1", "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", "unsub.cta": "Click here to alter those settings", "closing": "Thanks!" diff --git a/public/language/en@pirate/error.json b/public/language/en@pirate/error.json index 27de09631f..e0700f76c4 100644 --- a/public/language/en@pirate/error.json +++ b/public/language/en@pirate/error.json @@ -18,6 +18,9 @@ "username-taken": "Username taken", "email-taken": "Email taken", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", "username-too-long": "Username too long", "user-banned": "User banned", @@ -32,21 +35,29 @@ "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "Category disabled", "topic-locked": "Topic Locked", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Please wait for uploads to complete.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 characters.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "You cannot vote for your own post", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "You can't ban other admins!", - "invalid-image-type": "Invalid image type", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Group name too short", "group-already-exists": "Group already exists", "group-name-change-not-allowed": "Group name change not allowed", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Topic thumbnails are disabled.", "invalid-file": "Invalid File", "uploads-are-disabled": "Uploads are disabled", - "upload-error": "Upload Error : %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "You can't chat with yourself!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/en@pirate/global.json b/public/language/en@pirate/global.json index 98626005f5..f331b79472 100644 --- a/public/language/en@pirate/global.json +++ b/public/language/en@pirate/global.json @@ -3,9 +3,10 @@ "search": "Finderer", "buttons.close": "Shoot down", "403.title": "Not Enough Booty Power", - "403.message": "Ye seem to have stumbled upon a page that ye do not have access to. Perhaps ye give a go' loggin' in?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "T'ere be nut'in 'ere", - "404.message": "Ye seem to have stumbled upon a page that does not exist. Return to th' home page", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Broken beam.", "500.message": "Looks like we've got somethin' in th' sails.", "register": "Register", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "Famous", "header.users": "Mates", + "header.groups": "Groups", "header.chats": "Yik-Yaks", "header.notifications": "Parrot Calls", "header.search": "Finderer", @@ -73,5 +75,7 @@ "updated.title": "Forum Updated", "updated.message": "This forum has just been updated to the latest version. Click here to refresh the page.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/en@pirate/groups.json b/public/language/en@pirate/groups.json index bf69c732b0..d2314fdc29 100644 --- a/public/language/en@pirate/groups.json +++ b/public/language/en@pirate/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "View Group", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Group Details", "details.members": "Member List", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Latest Posts", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/en@pirate/login.json b/public/language/en@pirate/login.json index 70876d7617..6e7b7a36c0 100644 --- a/public/language/en@pirate/login.json +++ b/public/language/en@pirate/login.json @@ -1,5 +1,7 @@ { - "username": "Yer handle or email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Remember Me?", "forgot_password": "My mind be a scatt'rbrain, help a matey out!", "alternative_logins": "Oth'r gangplanks", diff --git a/public/language/en@pirate/notifications.json b/public/language/en@pirate/notifications.json index 67e29239a7..3eb4fba74d 100644 --- a/public/language/en@pirate/notifications.json +++ b/public/language/en@pirate/notifications.json @@ -2,6 +2,7 @@ "title": "Notifications", "no_notifs": "You have no new notifications", "see_all": "Spy wit' ye eye all ye notifications", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "Go offshore", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Email Confirmed", "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", "email-confirm-sent": "Confirmation email sent." } \ No newline at end of file diff --git a/public/language/en@pirate/pages.json b/public/language/en@pirate/pages.json index b77b6411ba..15386435af 100644 --- a/public/language/en@pirate/pages.json +++ b/public/language/en@pirate/pages.json @@ -11,6 +11,7 @@ "user.followers": "People who Follow %1", "user.posts": "Posts made by %1", "user.topics": "Topics created by %1", + "user.groups": "%1's Groups", "user.favourites": "%1's Favourite Posts", "user.settings": "User Settings", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/en@pirate/recent.json b/public/language/en@pirate/recent.json index bb4318cb39..791760308e 100644 --- a/public/language/en@pirate/recent.json +++ b/public/language/en@pirate/recent.json @@ -5,5 +5,15 @@ "month": "Month", "year": "Year", "alltime": "All Time", - "no_recent_topics": "There be no recent topics." + "no_recent_topics": "There be no recent topics.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/en@pirate/reset_password.json b/public/language/en@pirate/reset_password.json index dcdf4e76b6..ba9f012ea6 100644 --- a/public/language/en@pirate/reset_password.json +++ b/public/language/en@pirate/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Please enter your email address and we will send you an email with instructions on how to reset your account.", "enter_email_address": "Enter Email Address", "password_reset_sent": "Password Reset Sent", - "invalid_email": "Invalid Email / Email does not exist!" + "invalid_email": "Invalid Email / Email does not exist!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/en@pirate/search.json b/public/language/en@pirate/search.json index e9eef4632a..9dad8b6eab 100644 --- a/public/language/en@pirate/search.json +++ b/public/language/en@pirate/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/en@pirate/tags.json b/public/language/en@pirate/tags.json index d2e9a213ac..aa9f14c70c 100644 --- a/public/language/en@pirate/tags.json +++ b/public/language/en@pirate/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. Press enter after each tag.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/en@pirate/topic.json b/public/language/en@pirate/topic.json index 058ba68d99..88cd2e2328 100644 --- a/public/language/en@pirate/topic.json +++ b/public/language/en@pirate/topic.json @@ -12,6 +12,7 @@ "notify_me": "Be notified of new replies in this topic", "quote": "Quote", "reply": "Reply", + "guest-login-reply": "Log in to reply", "edit": "Edit", "delete": "Delete", "purge": "Purge", @@ -74,6 +75,7 @@ "fork_no_pids": "No posts selected!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Enter your topic title here...", + "composer.handle_placeholder": "Name", "composer.discard": "Discard", "composer.submit": "Submit", "composer.replying_to": "Replying to %1", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/en@pirate/user.json b/public/language/en@pirate/user.json index 9d17d3fdc6..5fb6a30da2 100644 --- a/public/language/en@pirate/user.json +++ b/public/language/en@pirate/user.json @@ -2,6 +2,8 @@ "banned": "Blackmarked", "offline": "Asleep at the wheel", "username": "User Name", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Email", "confirm_email": "Confirm Email", "delete_account": "Delete Account", @@ -16,6 +18,7 @@ "profile_views": "Profile views", "reputation": "Reputation", "favourites": "Favourites", + "watched": "Watched", "followers": "Followers", "following": "Following", "signature": "Signature", @@ -56,10 +59,12 @@ "digest_weekly": "Weekly", "digest_monthly": "Monthly", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "This user doesn't have any followers :(", "follows_no_one": "This user isn't following anyone :(", "has_no_posts": "This user didn't post anything yet.", "has_no_topics": "This user didn't post any topics yet.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Email Hidden", "hidden": "hidden", "paginate_description": "Paginate topics and posts instead of using infinite scroll.", diff --git a/public/language/en@pirate/users.json b/public/language/en@pirate/users.json index 58caf6e9cf..daabbb899c 100644 --- a/public/language/en@pirate/users.json +++ b/public/language/en@pirate/users.json @@ -5,5 +5,8 @@ "search": "Search", "enter_username": "Gimme y'er handle", "load_more": "Load More", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/en_GB/category.json b/public/language/en_GB/category.json index 22d72c3064..3e131894bd 100644 --- a/public/language/en_GB/category.json +++ b/public/language/en_GB/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "New Topic", + "guest-login-post": "Log in to post", "no_topics": "There are no topics in this category.
Why don't you try posting one?", "browsing": "browsing", diff --git a/public/language/en_GB/email.json b/public/language/en_GB/email.json index 75813bcb58..33fd28377b 100644 --- a/public/language/en_GB/email.json +++ b/public/language/en_GB/email.json @@ -13,6 +13,10 @@ "reset.text2": "To continue with the password reset, please click on the following link:", "reset.cta": "Click here to reset your password", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", "digest.cta": "Click here to visit %1", @@ -23,6 +27,9 @@ "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", + "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", "unsub.cta": "Click here to alter those settings", diff --git a/public/language/en_GB/error.json b/public/language/en_GB/error.json index 4efb4cd52f..a8d4c042b5 100644 --- a/public/language/en_GB/error.json +++ b/public/language/en_GB/error.json @@ -23,7 +23,9 @@ "username-taken": "Username taken", "email-taken": "Email taken", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", "username-too-long": "Username too long", @@ -43,14 +45,18 @@ "category-disabled": "Category disabled", "topic-locked": "Topic Locked", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Please wait for uploads to complete.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 characters.", "invalid-title": "Invalid title!", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "You cannot vote for your own post", @@ -59,11 +65,15 @@ "cant-ban-other-admins": "You can't ban other admins!", - "invalid-image-type": "Invalid image type", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Group name too short", "group-already-exists": "Group already exists", "group-name-change-not-allowed": "Group name change not allowed", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", @@ -74,12 +84,12 @@ "topic-thumbnails-are-disabled": "Topic thumbnails are disabled.", "invalid-file": "Invalid File", "uploads-are-disabled": "Uploads are disabled", - "upload-error": "Upload Error : %1", "signature-too-long" : "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "You can't chat with yourself!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", @@ -88,5 +98,8 @@ "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/en_GB/global.json b/public/language/en_GB/global.json index a373c7a4d3..92ef56998f 100644 --- a/public/language/en_GB/global.json +++ b/public/language/en_GB/global.json @@ -33,6 +33,7 @@ "header.tags": "Tags", "header.popular": "Popular", "header.users": "Users", + "header.groups": "Groups", "header.chats": "Chats", "header.notifications": "Notifications", "header.search": "Search", @@ -98,6 +99,7 @@ "updated.message": "This forum has just been updated to the latest version. Click here to refresh the page.", "privacy": "Privacy", - + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } diff --git a/public/language/en_GB/groups.json b/public/language/en_GB/groups.json index cc4aeb8997..09b1509171 100644 --- a/public/language/en_GB/groups.json +++ b/public/language/en_GB/groups.json @@ -1,9 +1,39 @@ { "groups": "Groups", "view_group": "View Group", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + + "pending.accept": "Accept", + "pending.reject": "Reject", + + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Group Details", "details.members": "Member List", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Latest Posts", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/en_GB/login.json b/public/language/en_GB/login.json index fe23e7d441..02abac6371 100644 --- a/public/language/en_GB/login.json +++ b/public/language/en_GB/login.json @@ -1,5 +1,7 @@ { - "username": "Username / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Remember Me?", "forgot_password": "Forgot Password?", "alternative_logins": "Alternative Logins", diff --git a/public/language/en_GB/modules.json b/public/language/en_GB/modules.json index 00a2ba412d..12eeb0f660 100644 --- a/public/language/en_GB/modules.json +++ b/public/language/en_GB/modules.json @@ -18,5 +18,6 @@ "composer.user_said_in": "%1 said in %2:", "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.discard": "Are you sure you wish to discard this post?", + "composer.submit_and_lock": "Submit and Lock" } \ No newline at end of file diff --git a/public/language/en_GB/notifications.json b/public/language/en_GB/notifications.json index 54c926a597..19de8e2c28 100644 --- a/public/language/en_GB/notifications.json +++ b/public/language/en_GB/notifications.json @@ -2,6 +2,7 @@ "title": "Notifications", "no_notifs": "You have no new notifications", "see_all": "See all Notifications", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "Outgoing Link", @@ -24,7 +25,6 @@ "email-confirmed": "Email Confirmed", "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", "email-confirm-sent": "Confirmation email sent." } diff --git a/public/language/en_GB/pages.json b/public/language/en_GB/pages.json index 8b231f8a94..74e24a2e79 100644 --- a/public/language/en_GB/pages.json +++ b/public/language/en_GB/pages.json @@ -11,8 +11,10 @@ "user.followers": "People who Follow %1", "user.posts": "Posts made by %1", "user.topics": "Topics created by %1", + "user.groups": "%1's Groups", "user.favourites": "%1's Favourite Posts", "user.settings": "User Settings", + "user.watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" diff --git a/public/language/en_GB/recent.json b/public/language/en_GB/recent.json index ff6400f27a..835dfce296 100644 --- a/public/language/en_GB/recent.json +++ b/public/language/en_GB/recent.json @@ -5,5 +5,20 @@ "month": "Month", "year": "Year", "alltime": "All Time", - "no_recent_topics": "There are no recent topics." + "no_recent_topics": "There are no recent topics.", + "no_popular_topics": "There are no popular topics.", + + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + + "click-here-to-reload": "Click here to reload." + } \ No newline at end of file diff --git a/public/language/en_GB/reset_password.json b/public/language/en_GB/reset_password.json index 27537ffdf2..96ba318a8a 100644 --- a/public/language/en_GB/reset_password.json +++ b/public/language/en_GB/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Please enter your email address and we will send you an email with instructions on how to reset your account.", "enter_email_address": "Enter Email Address", "password_reset_sent": "Password Reset Sent", - "invalid_email": "Invalid Email / Email does not exist!" + "invalid_email": "Invalid Email / Email does not exist!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } diff --git a/public/language/en_GB/search.json b/public/language/en_GB/search.json index 81c404a591..8c73511bda 100644 --- a/public/language/en_GB/search.json +++ b/public/language/en_GB/search.json @@ -1,4 +1,41 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" -} \ No newline at end of file + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "post-time": "Post time", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" +} diff --git a/public/language/en_GB/tags.json b/public/language/en_GB/tags.json index f67b2ca7b5..c74b9759cf 100644 --- a/public/language/en_GB/tags.json +++ b/public/language/en_GB/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. Press enter after each tag.", + "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/en_GB/topic.json b/public/language/en_GB/topic.json index 1320e21923..1bfdbb25ea 100644 --- a/public/language/en_GB/topic.json +++ b/public/language/en_GB/topic.json @@ -15,6 +15,7 @@ "notify_me": "Be notified of new replies in this topic", "quote": "Quote", "reply": "Reply", + "guest-login-reply": "Log in to reply", "edit": "Edit", "delete": "Delete", "purge": "Purge", @@ -112,5 +113,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } diff --git a/public/language/en_GB/uploads.json b/public/language/en_GB/uploads.json new file mode 100644 index 0000000000..5dc53ede1f --- /dev/null +++ b/public/language/en_GB/uploads.json @@ -0,0 +1,5 @@ +{ + "uploading-file" : "Uploading the file...", + "select-file-to-upload": "Select a file to upload!", + "upload-success": "File uploaded successfully!" +} \ No newline at end of file diff --git a/public/language/en_GB/user.json b/public/language/en_GB/user.json index eaf15bff36..f7460a8821 100644 --- a/public/language/en_GB/user.json +++ b/public/language/en_GB/user.json @@ -2,6 +2,8 @@ "banned": "Banned", "offline": "Offline", "username": "User Name", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Email", "confirm_email": "Confirm Email", @@ -18,6 +20,7 @@ "profile_views": "Profile views", "reputation": "Reputation", "favourites":"Favourites", + "watched": "Watched", "followers": "Followers", "following": "Following", "signature": "Signature", @@ -61,11 +64,14 @@ "digest_weekly": "Weekly", "digest_monthly": "Monthly", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "This user doesn't have any followers :(", "follows_no_one": "This user isn't following anyone :(", "has_no_posts": "This user didn't post anything yet.", "has_no_topics": "This user didn't post any topics yet.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Email Hidden", "hidden": "hidden", @@ -83,5 +89,7 @@ "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_create": "Follow topics you create.", + + "grouptitle": "Select the group title you would like to display" } diff --git a/public/language/en_GB/users.json b/public/language/en_GB/users.json index fa46c52cdd..0f3687c9ed 100644 --- a/public/language/en_GB/users.json +++ b/public/language/en_GB/users.json @@ -5,5 +5,8 @@ "search": "Search", "enter_username": "Enter a username to search", "load_more": "Load More", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/en_US/category.json b/public/language/en_US/category.json index 93272e1a06..8245a2c365 100644 --- a/public/language/en_US/category.json +++ b/public/language/en_US/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "New Topic", + "guest-login-post": "Log in to post", "no_topics": "There are no topics in this category.
Why don't you try posting one?", "browsing": "browsing", "no_replies": "No one has replied", diff --git a/public/language/en_US/email.json b/public/language/en_US/email.json index fdbfb006c6..f290435e75 100644 --- a/public/language/en_US/email.json +++ b/public/language/en_US/email.json @@ -9,6 +9,9 @@ "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", "reset.cta": "Click here to reset your password", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", "digest.cta": "Click here to visit %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "New chat message received from %1", "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", "unsub.cta": "Click here to alter those settings", "closing": "Thanks!" diff --git a/public/language/en_US/error.json b/public/language/en_US/error.json index 27de09631f..e0700f76c4 100644 --- a/public/language/en_US/error.json +++ b/public/language/en_US/error.json @@ -18,6 +18,9 @@ "username-taken": "Username taken", "email-taken": "Email taken", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", "username-too-long": "Username too long", "user-banned": "User banned", @@ -32,21 +35,29 @@ "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "Category disabled", "topic-locked": "Topic Locked", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Please wait for uploads to complete.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 characters.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "You cannot vote for your own post", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "You can't ban other admins!", - "invalid-image-type": "Invalid image type", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Group name too short", "group-already-exists": "Group already exists", "group-name-change-not-allowed": "Group name change not allowed", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Topic thumbnails are disabled.", "invalid-file": "Invalid File", "uploads-are-disabled": "Uploads are disabled", - "upload-error": "Upload Error : %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "You can't chat with yourself!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/en_US/global.json b/public/language/en_US/global.json index 6e533e73be..6de9e8b364 100644 --- a/public/language/en_US/global.json +++ b/public/language/en_US/global.json @@ -3,9 +3,10 @@ "search": "Search", "buttons.close": "Close", "403.title": "Access Denied", - "403.message": "You seem to have stumbled upon a page that you do not have access to. Perhaps you should try logging in?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Not Found", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Internal error.", "500.message": "Oops! Looks like something went wrong!", "register": "Register", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "Popular", "header.users": "Users", + "header.groups": "Groups", "header.chats": "Chats", "header.notifications": "Notifications", "header.search": "Search", @@ -73,5 +75,7 @@ "updated.title": "Forum Updated", "updated.message": "This forum has just been updated to the latest version. Click here to refresh the page.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/en_US/groups.json b/public/language/en_US/groups.json index bf69c732b0..d2314fdc29 100644 --- a/public/language/en_US/groups.json +++ b/public/language/en_US/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "View Group", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Group Details", "details.members": "Member List", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Latest Posts", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/en_US/login.json b/public/language/en_US/login.json index 5ec7affa9a..70b7b98dd5 100644 --- a/public/language/en_US/login.json +++ b/public/language/en_US/login.json @@ -1,5 +1,7 @@ { - "username": "Username / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Remember Me?", "forgot_password": "Forgot Password?", "alternative_logins": "Alternative Logins", diff --git a/public/language/en_US/notifications.json b/public/language/en_US/notifications.json index 1cf64627a4..32ddb12eb7 100644 --- a/public/language/en_US/notifications.json +++ b/public/language/en_US/notifications.json @@ -2,6 +2,7 @@ "title": "Notifications", "no_notifs": "You have no new notifications", "see_all": "See all Notifications", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "Outgoing Link", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Email Confirmed", "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", "email-confirm-sent": "Confirmation email sent." } \ No newline at end of file diff --git a/public/language/en_US/pages.json b/public/language/en_US/pages.json index d96ee1a8e6..c6d577d2f5 100644 --- a/public/language/en_US/pages.json +++ b/public/language/en_US/pages.json @@ -11,6 +11,7 @@ "user.followers": "People who Follow %1", "user.posts": "Posts made by %1", "user.topics": "Topics created by %1", + "user.groups": "%1's Groups", "user.favourites": "%1's Favorite Posts", "user.settings": "User Settings", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/en_US/recent.json b/public/language/en_US/recent.json index d683cce436..f638d2f8ac 100644 --- a/public/language/en_US/recent.json +++ b/public/language/en_US/recent.json @@ -5,5 +5,15 @@ "month": "Month", "year": "Year", "alltime": "All Time", - "no_recent_topics": "There are no recent topics." + "no_recent_topics": "There are no recent topics.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/en_US/reset_password.json b/public/language/en_US/reset_password.json index dcdf4e76b6..ba9f012ea6 100644 --- a/public/language/en_US/reset_password.json +++ b/public/language/en_US/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Please enter your email address and we will send you an email with instructions on how to reset your account.", "enter_email_address": "Enter Email Address", "password_reset_sent": "Password Reset Sent", - "invalid_email": "Invalid Email / Email does not exist!" + "invalid_email": "Invalid Email / Email does not exist!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/en_US/search.json b/public/language/en_US/search.json index e9eef4632a..9dad8b6eab 100644 --- a/public/language/en_US/search.json +++ b/public/language/en_US/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/en_US/tags.json b/public/language/en_US/tags.json index d2e9a213ac..aa9f14c70c 100644 --- a/public/language/en_US/tags.json +++ b/public/language/en_US/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. Press enter after each tag.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/en_US/topic.json b/public/language/en_US/topic.json index f657ad4ef3..750ce2694a 100644 --- a/public/language/en_US/topic.json +++ b/public/language/en_US/topic.json @@ -12,6 +12,7 @@ "notify_me": "Be notified of new replies in this topic", "quote": "Quote", "reply": "Reply", + "guest-login-reply": "Log in to reply", "edit": "Edit", "delete": "Delete", "purge": "Purge", @@ -74,6 +75,7 @@ "fork_no_pids": "No posts selected!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Enter your topic title here...", + "composer.handle_placeholder": "Name", "composer.discard": "Discard", "composer.submit": "Submit", "composer.replying_to": "Replying to %1", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/en_US/user.json b/public/language/en_US/user.json index 3ebf12c20b..825cc3acae 100644 --- a/public/language/en_US/user.json +++ b/public/language/en_US/user.json @@ -2,6 +2,8 @@ "banned": "Banned", "offline": "Offline", "username": "User Name", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Email", "confirm_email": "Confirm Email", "delete_account": "Delete Account", @@ -16,6 +18,7 @@ "profile_views": "Profile views", "reputation": "Reputation", "favourites": "Favorites", + "watched": "Watched", "followers": "Followers", "following": "Following", "signature": "Signature", @@ -56,10 +59,12 @@ "digest_weekly": "Weekly", "digest_monthly": "Monthly", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "This user doesn't have any followers :(", "follows_no_one": "This user isn't following anyone :(", "has_no_posts": "This user didn't post anything yet.", "has_no_topics": "This user didn't post any topics yet.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Email Hidden", "hidden": "hidden", "paginate_description": "Paginate topics and posts instead of using infinite scroll.", diff --git a/public/language/en_US/users.json b/public/language/en_US/users.json index e12967eeda..0038dcffc4 100644 --- a/public/language/en_US/users.json +++ b/public/language/en_US/users.json @@ -5,5 +5,8 @@ "search": "Search", "enter_username": "Enter a username to search", "load_more": "Load More", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/es/category.json b/public/language/es/category.json index 7146b3eed2..8c6b0fd5ca 100644 --- a/public/language/es/category.json +++ b/public/language/es/category.json @@ -1,5 +1,6 @@ { - "new_topic_button": "Nuevo Tema", + "new_topic_button": "Nuevo tema", + "guest-login-post": "Acceder para poder escribir un mensaje", "no_topics": "No hay temas en esta categoría.
¿Por que no te animas y publicas uno?", "browsing": "viendo ahora", "no_replies": "Nadie ha respondido aún", diff --git a/public/language/es/email.json b/public/language/es/email.json index 120b27a6d0..fd42293e1b 100644 --- a/public/language/es/email.json +++ b/public/language/es/email.json @@ -9,14 +9,19 @@ "reset.text1": "Recibimos una solicitud para reiniciar tu contraseña, posiblemente porque la olvidaste. Si no es así, por favor ignora este email.", "reset.text2": "Para continuar con el reinicio de contraseña, por favor cliquea en el siguiente vínculo:", "reset.cta": "Cliquea aquí para reiniciar tu contraseña", - "digest.notifications": "You have unread notifications from %1:", + "reset.notify.subject": "Se ha modificado correctamente la contraseña.", + "reset.notify.text1": "Te estamos notificando que a a %1, tu contraseña ha sido cambiado correctamente.", + "reset.notify.text2": "Si no has sido tu, por favor notifica al administrador inmediatamente.", + "digest.notifications": "Tiene notificaciones sin leer de %1:", "digest.latest_topics": "Últimos temas de %1", "digest.cta": "Cliquea aquí para visitar %1", "digest.unsub.info": "Este compendio te fue enviado debido a tus ajustes de subscripción.", - "digest.no_topics": "There have been no active topics in the past %1", + "digest.no_topics": "No han habido temas activos en el pasado %1", "notif.chat.subject": "Nuevo mensaje de chat recibido de %1", "notif.chat.cta": "Haz click aquí para continuar la conversación", "notif.chat.unsub.info": "Esta notificación de chat se te envió debido a tus ajustes de suscripción.", + "notif.post.cta": "Cliquea aquí para leer la publicación completa", + "notif.post.unsub.info": "La notificación de este mensaje se te ha enviado debido a tus ajustes de subscripción.", "test.text1": "Este es un email de prueba para verificar que el envío de email está ajustado correctamente para tu NodeBB", "unsub.cta": "Haz click aquí para modificar los ajustes.", "closing": "¡Gracias!" diff --git a/public/language/es/error.json b/public/language/es/error.json index 6c68f9b72c..8be673f77d 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -9,59 +9,73 @@ "invalid-uid": "Identificador de usuario no válido", "invalid-username": "Nombre de usuario no válido", "invalid-email": "Correo electrónico no válido", - "invalid-title": "Título no válido!", - "invalid-user-data": "Datos de Usuario no válidos", + "invalid-title": "¡Título no válido!", + "invalid-user-data": "Datos de usuario no válidos", "invalid-password": "Contraseña no válida", "invalid-username-or-password": "Por favor especifica tanto un usuario como contraseña", - "invalid-search-term": "Invalid search term", + "invalid-search-term": "Término de búsqueda inválido", "invalid-pagination-value": "Valor de paginación no válido.", - "username-taken": "Nombre de usuario ya escogido", - "email-taken": "El correo electrónico ya está escogido.", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", - "username-too-short": "El nombre de usuario es demasiado corto", + "username-taken": "Nombre de usuario ocupado", + "email-taken": "Correo electrónico ocupado", + "email-not-confirmed": "Su cuenta de correo electrónico no ha sido confirmada aún, por favor haga click aquí para confirmarla.", + "email-not-confirmed-chat": "No puedes hacer uso del chat hasta que confirmes tu email", + "no-email-to-confirm": "Este foro requiere confirmación de su email, por favor pulse aquí para introducir un email", + "email-confirm-failed": "No se ha podido confirmar su email, por favor inténtelo de nuevo más tarde.", + "username-too-short": "Nombre de usuario es demasiado corto", "username-too-long": "Nombre de usuario demasiado largo", - "user-banned": "Usuario expulsado", - "user-too-new": "Sorry, you are required to wait %1 seconds before making your first post", - "no-category": "Category does not exist", - "no-topic": "Topic does not exist", - "no-post": "Post does not exist", - "no-group": "Group does not exist", - "no-user": "User does not exist", - "no-teaser": "Teaser does not exist", - "no-privileges": "You do not have enough privileges for this action.", - "no-emailers-configured": "Ningún plugin para email fue cargado, así que no se pudo enviar email de prueba.", - "category-disabled": "Categoría deshabilitada.", - "topic-locked": "Tema bloqueado.", + "user-banned": "Usuario baneado", + "user-too-new": "Lo sentimos, es necesario que esperes %1 segudos antes poder hacer tu primera publicación", + "no-category": "La categoría no existe", + "no-topic": "El tema no existe", + "no-post": "La publicación no existe", + "no-group": "El grupo no existe", + "no-user": "El usuario no existe", + "no-teaser": "El resumen no existe", + "no-privileges": "No tienes suficientes privilegios para realizar esta acción.", + "no-emailers-configured": "No se ha cargado ningún plugin de email, así que no se pudo enviar el email de prueba.", + "category-disabled": "Categoría deshabilitada", + "topic-locked": "Tema bloqueado", + "post-edit-duration-expired": "Sólo puedes editar mensajes durante %1 segundos después de haberlo escrito", "still-uploading": "Por favor, espera a que terminen las subidas.", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", + "content-too-short": "Por favor introduzca una publicación más larga. Las publicaciones deben contener al menos %1 caracteres.", + "content-too-long": "Por favor introduzca un mensaje más corto. Los mensajes no pueden exceder los %1 caracteres.", + "title-too-short": "Por favor introduzca un título más largo. Los títulos deben contener al menos %1 caracteres.", "title-too-long": "Por favor, introduce un título más corto, que no sobrepase los %1 caracteres.", - "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", - "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", + "too-many-posts": "Solo puedes publicar una vez cada %1 segundos - por favor espere antes de volver a publicar", + "too-many-posts-newbie": "Como nuevo usuario, solo puedes publicar una vez cada %1 segundos hasta hayas ganado una reputación de %2 - por favor espere antes de volver a publicar", + "tag-too-short": "Por favor introduce una etiqueta más larga. Las etiquetas deben contener por lo menos %1 caracteres", + "tag-too-long": "Por favor introduce una etiqueta más pequeña. Las etiquetas no pueden exceder los %1 caracteres", + "file-too-big": "El tamaño de fichero máximo es de %1 kbs - por favor, suba un fichero más pequeño", "cant-vote-self-post": "No puedes votar tus propios posts", - "already-favourited": "You have already favourited this post", - "already-unfavourited": "You have already unfavourited this post", - "cant-ban-other-admins": "No puedes expulsar a otros administradores!", - "invalid-image-type": "Tipo de imagen no válido.", + "already-favourited": "Ya ha marcado esta publicación como favorita", + "already-unfavourited": "Ya ha desmarcado esta publicación como favorita", + "cant-ban-other-admins": "¡No puedes expulsar a otros administradores!", + "invalid-image-type": "Tipo de imagen inválido. Los tipos permitidos son: %1", + "invalid-image-extension": "Extensión de imagen inválida", + "invalid-file-type": "Tipo de fichero inválido. Los tipos permitidos son: %1", "group-name-too-short": "Nombre del grupo es demasiado corto.", "group-already-exists": "El grupo ya existe.", "group-name-change-not-allowed": "El nombre del grupo deseado no está permitido.", - "post-already-deleted": "This post has already been deleted", - "post-already-restored": "This post has already been restored", - "topic-already-deleted": "This topic has already been deleted", - "topic-already-restored": "This topic has already been restored", + "group-already-member": "Ya formas parte de este grupo", + "group-needs-owner": "Este grupo requiere al menos un propietario", + "post-already-deleted": "Este publicación ya ha sido borrada", + "post-already-restored": "Esta publicación ya ha sido restaurada", + "topic-already-deleted": "Este tema ya ha sido borrado", + "topic-already-restored": "Este tema ya ha sido restaurado", "topic-thumbnails-are-disabled": "Las miniaturas de los temas están deshabilitadas.", - "invalid-file": "Archivo no válido.", + "invalid-file": "Archivo no válido", "uploads-are-disabled": "Las subidas están deshabilitadas.", - "upload-error": "Error de subida: %1", - "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", - "cant-chat-with-yourself": "No puedes conversar contigo mismo!", - "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "signature-too-long": "Lo sentimos, pero tu firma no puede ser más larga de %1 caracteres.", + "cant-chat-with-yourself": "¡No puedes conversar contigo mismo!", + "chat-restricted": "Este usuario tiene restringidos los mensajes de chat. Los usuarios deben seguirte antes de que pueda charlar con ellos", + "too-many-messages": "Has enviado demasiados mensajes, por favor espera un poco.", "reputation-system-disabled": "El sistema de reputación está deshabilitado.", "downvoting-disabled": "La votación negativa está deshabilitada.", "not-enough-reputation-to-downvote": "No tienes suficiente reputación para votar negativo este post", - "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", - "reload-failed": "NodeBB encontró un problema mientras refrescar: \"%1\". NodeBB intentará cargar el resto de contenido, aunque deberías deshacer lo que hiciste antes de refrescar.", - "registration-error": "Registration Error" + "not-enough-reputation-to-flag": "No tiene suficiente reputación para poner reportar esta publicación", + "reload-failed": "NodeBB encontró un problema al refrescar: \"%1\". NodeBB intentará cargar el resto de contenido, aunque deberías deshacer lo que hiciste justo antes.", + "registration-error": "Error de registro", + "parse-error": "Algo ha ido mal mientras se parseaba la respuesta del servidor", + "wrong-login-type-email": "Por favor emplea tu email para acceder", + "wrong-login-type-username": "Por favor introduce tu nombre de usuario para acceder" } \ No newline at end of file diff --git a/public/language/es/global.json b/public/language/es/global.json index 1b2e760b55..4e2b07be05 100644 --- a/public/language/es/global.json +++ b/public/language/es/global.json @@ -3,44 +3,46 @@ "search": "Buscar", "buttons.close": "Cerrar", "403.title": "Acceso denegado", - "403.message": "Al parecer no tienes premisos necesarios para estar en este lugar. ¿Tal vez quieras intentar conectarte?", + "403.message": "Al parecer has llegado a una página a la cual no tienes permisos para acceder.", + "403.login": "¿Quizás deberías intentar acceder?", "404.title": "No encontrado", - "404.message": "Al parecer lo que estas buscando no existe. Volver a la página principal.", + "404.message": "Al parecer has llegado a una página a la cual no tienes permisos para acceder. Volver a la página de inicio .", "500.title": "Error Interno.", "500.message": "¡Ooops! ¡Parece que algo salió mal! No te preocupes, ¡nuestros simios hiperinteligentes lo solucionarán!", "register": "Registrarse", "login": "Conectarse", - "please_log_in": "Por favor conectate.", + "please_log_in": "Por favor, identifíquese.", "logout": "Salir", - "posting_restriction_info": "Para publicar debes ser miembro, registrate o conectate.", - "welcome_back": "Bienvenido de nuevo!", - "you_have_successfully_logged_in": "Te has conectado!", - "save_changes": "Guardar Cambios", + "posting_restriction_info": "Publicar requiere ser usuario registrado, conéctate o regístrate.", + "welcome_back": "¡Bienvenido de nuevo!", + "you_have_successfully_logged_in": "Identificado satisfactoriamente", + "save_changes": "Guardar cambios", "close": "Cerrar", "pagination": "Paginación", "pagination.out_of": "%1 de %2", - "pagination.enter_index": "Ingrese índice", + "pagination.enter_index": "Introduzca el número", "header.admin": "Administración", "header.recent": "Recientes", "header.unread": "No leídos", "header.tags": "Etiquetas", "header.popular": "Popular", - "header.users": "Miembros", + "header.users": "Usuarios", + "header.groups": "Grupos", "header.chats": "Chats", "header.notifications": "Notificaciones", "header.search": "Buscar", "header.profile": "Perfil", - "notifications.loading": "Cargando Notificaciones", - "chats.loading": "Cargando Chats", + "notifications.loading": "Cargando notificaciones", + "chats.loading": "Cargando chats", "motd.welcome": "Bienvenido a NodeBB, la plataforma de debate del el futuro.", - "previouspage": "Página Anterior", - "nextpage": "Siguente Página", - "alert.success": "Éxito!", + "previouspage": "Página anterior", + "nextpage": "Página siguiente", + "alert.success": "¡Éxito!", "alert.error": "Error", "alert.banned": "Baneado", - "alert.banned.message": "Acabas de ser expulsado, a continuación tu sesión se desconectará.", + "alert.banned.message": "Has sido expulsado y se procederá a tu desconexión.", "alert.unfollow": "Ya no estás siguiendo a %1!", - "alert.follow": "Estás siguiendo a %1!", + "alert.follow": "Ahora sigues a %1!", "online": "Conectado", "users": "Usuarios", "topics": "Temas", @@ -49,29 +51,31 @@ "reputation": "Reputación", "read_more": "leer más", "posted_ago_by_guest": "publicado %1 por Invitado", - "posted_ago_by": "publicado hace %1 por %2", - "posted_ago": "publicado hace %1", + "posted_ago_by": "publicado %1 por %2", + "posted_ago": "publicado %1", "posted_in_ago_by_guest": "publicado en %1 %2 por", - "posted_in_ago_by": "publicado en %1 hace %2 por %3", - "posted_in_ago": "publicado en %1 hace %2", - "replied_ago": "contestado hace %1", + "posted_in_ago_by": "publicado en %1 %2 por %3", + "posted_in_ago": "publicado en %1 %2", + "replied_ago": "contestado %1", "user_posted_ago": "%1 publicó %2", "guest_posted_ago": "Invitado publicó %1", - "last_edited_by_ago": "última edición por %1 el %2", + "last_edited_by_ago": "última edición por %1 %2", "norecentposts": "No hay publicaciones recientes", "norecenttopics": "No hay temas recientes", - "recentposts": "Publicaciones Recientes", - "recentips": "Conexions recientes de estas IP's", - "away": "No disponible", + "recentposts": "Publicaciones recientes", + "recentips": "IP's conectadas recientemente", + "away": "Ausente", "dnd": "No molestar", "invisible": "Invisible", "offline": "Desconectado", "email": "Email", - "language": "Lenguaje", + "language": "Idioma", "guest": "Invitado", "guests": "Invitados", "updated.title": "Foro actualizado", "updated.message": "El foro acaba de ser actualizado a la última versión. Haz click aquí para refrescar la página.", - "privacy": "Privacy", - "delete_all": "Delete All" + "privacy": "Privacidad", + "follow": "Seguir", + "unfollow": "Dejar de Seguir", + "delete_all": "Eliminar todo" } \ No newline at end of file diff --git a/public/language/es/groups.json b/public/language/es/groups.json index 1c4d93463f..22a80ba19a 100644 --- a/public/language/es/groups.json +++ b/public/language/es/groups.json @@ -1,8 +1,34 @@ { - "groups": "Groups", + "groups": "Grupos", "view_group": "Ver Grupo", + "owner": "Propietario del Grupo", + "new_group": "Crear Nuevo Grupo", + "no_groups_found": "No hay grupos que ver", + "pending.accept": "Aceptar", + "pending.reject": "Rechazar", + "cover-instructions": "Arrastra y suelta una foto, arrastra a la posición, y pulsa Guardar ", + "cover-change": "Cambiar", + "cover-save": "Guardar", + "cover-saving": "Guardando", "details.title": "Detalles de Grupo", "details.members": "Lista de Miembros", + "details.pending": "Miembros Pendientes", "details.has_no_posts": "Los miembros de este grupo no han hecho ninguna publicación.", - "details.latest_posts": "Últimas Publicaciones" + "details.latest_posts": "Últimas Publicaciones", + "details.private": "Privado", + "details.grant": "Conceder/Rescindir Propiedad", + "details.kick": "Expulsar", + "details.owner_options": "Administración De Grupo", + "details.group_name": "Nombre de Grupo", + "details.description": "Descripción", + "details.badge_preview": "Previsualización de Insignia", + "details.change_icon": "Cambiar Icono", + "details.change_colour": "Cambiar Color", + "details.badge_text": "Texto de Insignia", + "details.userTitleEnabled": "Mostrar Insignia", + "details.private_help": "Si está habilitado, entrar en los grupos requiere aprobación de sus propietarios", + "details.hidden": "Oculto", + "details.hidden_help": "Si está habilitado, este grupo no aparecerá en los listados de grupos, y los usuarios tendrán que ser invitados manualmente", + "event.updated": "Los detalles del grupo han sido actualizados", + "event.deleted": "El grupo \"%1\" ha sido eliminado" } \ No newline at end of file diff --git a/public/language/es/login.json b/public/language/es/login.json index 7eb903ac87..448ce31f43 100644 --- a/public/language/es/login.json +++ b/public/language/es/login.json @@ -1,9 +1,11 @@ { - "username": "Usuario / Email", + "username-email": "Usuario / Email", + "username": "Usuario", + "email": "Correo Electrónico", "remember_me": "¿Recordarme?", "forgot_password": "¿Olvidaste tu contraseña?", - "alternative_logins": "Conexiones Alternativas", - "failed_login_attempt": "Error al iniciar sesión, intentalo otra vez.", - "login_successful": "¡Te has conectado con éxito!", - "dont_have_account": "No tienes una cuenta creada?" + "alternative_logins": "Métodos alternativos", + "failed_login_attempt": "Error al iniciar sesión, inténtalo otra vez.", + "login_successful": "¡Identificado satisfactoriamente!", + "dont_have_account": "¿Aún no tienes cuenta?" } \ No newline at end of file diff --git a/public/language/es/modules.json b/public/language/es/modules.json index ade76dc88a..6c7642869b 100644 --- a/public/language/es/modules.json +++ b/public/language/es/modules.json @@ -3,19 +3,19 @@ "chat.placeholder": "Introduce tu mensaje aquí, pulsa intro para enviar", "chat.send": "Enviar", "chat.no_active": "No tiene conversaciones activas.", - "chat.user_typing": "%1 está escribiendo ...", + "chat.user_typing": "%1 está escribiendo...", "chat.user_has_messaged_you": "%1 te ha enviado un mensaje.", "chat.see_all": "Ver todas las conversaciones", - "chat.no-messages": "Por favor selecciona un contacto para ver el historial de mensajes", + "chat.no-messages": "Por favor, selecciona un contacto para ver el historial de mensajes", "chat.recent-chats": "Chats recientes", "chat.contacts": "Contactos", "chat.message-history": "Historial de mensajes", "chat.pop-out": "Mostrar en ventana independiente", "chat.maximize": "Maximizar", - "chat.seven_days": "7 Días", - "chat.thirty_days": "30 Días", - "chat.three_months": "3 Meses", + "chat.seven_days": "7 días", + "chat.thirty_days": "30 días", + "chat.three_months": "3 meses", "composer.user_said_in": "%1 dijo en %2:", "composer.user_said": "%1 dijo:", - "composer.discard": "¿Estás seguro de que deseas descargar este post?" + "composer.discard": "¿Estás seguro de que deseas descartar este mensaje?" } \ No newline at end of file diff --git a/public/language/es/notifications.json b/public/language/es/notifications.json index 5239167a45..3a9e36bccb 100644 --- a/public/language/es/notifications.json +++ b/public/language/es/notifications.json @@ -2,26 +2,26 @@ "title": "Notificaciones", "no_notifs": "No tiene nuevas notificaciones", "see_all": "Ver todas las notificaciones", + "mark_all_read": "Marcar todas las notificaciones cómo leídas", "back_to_home": "Volver a %1", - "outgoing_link": "Enlace Externo", - "outgoing_link_message": "Ahora estás saliendo %1.", + "outgoing_link": "Enlace externo", + "outgoing_link_message": "Ahora estás saliendo de %1.", "continue_to": "Continuar a %1", "return_to": "Regresar a %1", - "new_notification": "Nueva Notificación", + "new_notification": "Nueva notificación", "you_have_unread_notifications": "Tienes notificaciones sin leer.", "new_message_from": "Nuevo mensaje de %1", - "upvoted_your_post_in": "%1 ha votado como relevante tu respuesta en %2.", - "moved_your_post": "%1 has moved your post.", - "moved_your_topic": "%1 has moved your topic.", + "upvoted_your_post_in": "%1 ha votado positivamente tu respuesta en %2.", + "moved_your_post": "%1 ha movido su mensaje.", + "moved_your_topic": "%1 ha movido su tema.", "favourited_your_post_in": "%1 ha marcado como favorito su publicación en %2.", - "user_flagged_post_in": "%1 ha marcado como indebida una respuesta en %2", - "user_posted_to": "%1 ha publicado una respuesta a: %2", - "user_posted_topic": "%1 has posted a new topic: %2", + "user_flagged_post_in": "%1 ha reportado una respuesta en %2", + "user_posted_to": "%1 ha respondido a: %2", + "user_posted_topic": "%1 ha publicado un nuevo tema: %2", "user_mentioned_you_in": "%1 te mencionó en %2", "user_started_following_you": "%1 comenzó a seguirte.", "email-confirmed": "Correo electrónico confirmado", "email-confirmed-message": "Gracias por validar tu correo electrónico. Tu cuenta ya está completamente activa.", - "email-confirm-error": "Un error ocurrió...", - "email-confirm-error-message": "Hubo un problema al validar tu cuenta de correo electrónico. Quizá el código era erróneo o expiró.", + "email-confirm-error-message": "Hubo un problema al validar tu cuenta de correo electrónico. Quizá el código era erróneo o expiró...", "email-confirm-sent": "Correo de confirmación enviado." } \ No newline at end of file diff --git a/public/language/es/pages.json b/public/language/es/pages.json index 5264c78215..4cd102fdf0 100644 --- a/public/language/es/pages.json +++ b/public/language/es/pages.json @@ -1,18 +1,19 @@ { "home": "Inicio", - "unread": "Temas No Leídos", - "popular": "Temas Populares", - "recent": "Temas Recientes", - "users": "Usuarios Registrado", + "unread": "Temas no leídos", + "popular": "Temas populares", + "recent": "Temas recientes", + "users": "Usuarios registrados", "notifications": "Notificaciones", "tags": "Temas etiquetados bajo \"%1\"", "user.edit": "Editando \"%1\"", "user.following": "Gente que sigue %1 ", "user.followers": "Seguidores de %1", - "user.posts": "Posteos de %1", + "user.posts": "Mensajes de %1", "user.topics": "Temas creados por %1", + "user.groups": "%1's Grupos", "user.favourites": "Publicaciones favoritas de %1 ", - "user.settings": "Preferencias del Usuario", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", - "maintenance.messageIntro": "Additionally, the administrator has left this message:" + "user.settings": "Preferencias de usuario", + "maintenance.text": "%1 está en mantenimiento actualmente. Por favor vuelva en otro momento.", + "maintenance.messageIntro": "Adicionalmente, la administración ha dejado este mensaje:" } \ No newline at end of file diff --git a/public/language/es/recent.json b/public/language/es/recent.json index 7a86201674..fbfb6238c0 100644 --- a/public/language/es/recent.json +++ b/public/language/es/recent.json @@ -5,5 +5,15 @@ "month": "Mes", "year": "Año", "alltime": "Siempre", - "no_recent_topics": "No hay publicaciones recientes" + "no_recent_topics": "No hay publicaciones recientes.", + "no_popular_topics": "No hay tópicos populares", + "there-is-a-new-topic": "Hay una nueva publicación.", + "there-is-a-new-topic-and-a-new-post": "hay una nueva publicación y un nuevo mensaje.", + "there-is-a-new-topic-and-new-posts": "Hay una nueva publicación y %1 nuevos mensajes.", + "there-are-new-topics": "Hay %1 nuevos mensajes.", + "there-are-new-topics-and-a-new-post": "Hay %1 nuevas publicaciones y un nuevo mensaje.", + "there-are-new-topics-and-new-posts": "Hay %1 nuevas publicaciones y %2 nuevos mensajes.", + "there-is-a-new-post": "Hay un nuevo mensaje.", + "there-are-new-posts": "Hay %1 nuevos mensajes.", + "click-here-to-reload": "Cliquea aquí para recargar." } \ No newline at end of file diff --git a/public/language/es/register.json b/public/language/es/register.json index ddc0aeffd7..4ffa4d8bdd 100644 --- a/public/language/es/register.json +++ b/public/language/es/register.json @@ -5,12 +5,12 @@ "help.minimum_password_length": "Tu contraseña debe tener al menos %1 carácteres.", "email_address": "Correo electrónico", "email_address_placeholder": "Escribe tu correo electrónico", - "username": "Usuario", - "username_placeholder": "Escribe tu usuario", + "username": "Nombre de usuario", + "username_placeholder": "Introduce tu nombre de usuario", "password": "Contraseña", - "password_placeholder": "Escribe tu Contraseña", - "confirm_password": "Confirmar Contraseña", - "confirm_password_placeholder": "Confirmar Contraseña", + "password_placeholder": "Introduce tu contraseña", + "confirm_password": "Confirmar contraseña", + "confirm_password_placeholder": "Confirmar contraseña", "register_now_button": "Registrarme ahora", "alternative_registration": "Métodos de registro alternativos", "terms_of_use": "Términos y Condiciones de uso", diff --git a/public/language/es/reset_password.json b/public/language/es/reset_password.json index a9f2114972..da269f5448 100644 --- a/public/language/es/reset_password.json +++ b/public/language/es/reset_password.json @@ -1,14 +1,16 @@ { - "reset_password": "Reiniciar Contraseña", + "reset_password": "Restablecer contraseña", "update_password": "Actualizar contraseña", - "password_changed.title": "Contraseña editada", + "password_changed.title": "Contraseña cambiada", "password_changed.message": "

La contraseña fue modificada con éxito, por favor inicia sesión de nuevo.", - "wrong_reset_code.title": "Código de reinicio incorrecto", - "wrong_reset_code.message": "El código de reinicio ingresado no es correcto. Por favor inténtalo de nuevo o pide un nuevo código.", - "new_password": "Nueva Contraseña", - "repeat_password": "Confirmar Contraseña", - "enter_email": "Por favor ingresa tu correo electrónico y te enviaremos un correo con indicaciones para inicializar tu cuenta.", + "wrong_reset_code.title": "Código de restablecimiento incorrecto", + "wrong_reset_code.message": "El código de restablecimiento ingresado no es correcto. Por favor inténtalo de nuevo o solicita un nuevo código.", + "new_password": "Nueva contraseña", + "repeat_password": "Confirmar contraseña", + "enter_email": "Por favor ingresa tu correo electrónico y te enviaremos un mensaje con indicaciones para restablecer tu cuenta.", "enter_email_address": "Introduce tu correo electrónico", - "password_reset_sent": "Reinicio de contraseña enviado", - "invalid_email": "Correo Electrónico no válido o inexistente!" + "password_reset_sent": "Restablecimiento de contraseña enviado", + "invalid_email": "¡Correo electrónico no válido o inexistente!", + "password_too_short": "La contraseña introducida es demasiado corta, por favor introduzca una contraseña diferente.", + "passwords_do_not_match": "Las dos contraseñas introducidas no concuerdan." } \ No newline at end of file diff --git a/public/language/es/search.json b/public/language/es/search.json index 5cd357b2e9..135144c2b3 100644 --- a/public/language/es/search.json +++ b/public/language/es/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 resuldado(s) coinciden con \"%2\". (%3 segundos)", - "no-matches": "No se encontraron publicaciones" + "no-matches": "No se encontraron coincidencias", + "in": "En", + "by": "Por", + "titles": "Títulos", + "titles-posts": "Títulos y publicaciones", + "posted-by": "Publicado por", + "in-categories": "En categorías", + "search-child-categories": "Buscar categorías hijas", + "reply-count": "Número de Respuestas", + "at-least": "De mínimo", + "at-most": "De máximo", + "post-time": "Fecha de publicación", + "newer-than": "Más reciente que", + "older-than": "Más antiguo que", + "any-date": "Cualquier fecha", + "yesterday": "Ayer", + "one-week": "Una semana", + "two-weeks": "Dos semanas", + "one-month": "Un mes", + "three-months": "Tres meses", + "six-months": "Seis meses", + "one-year": "Un año", + "sort-by": "Ordenar por", + "last-reply-time": "Fecha de última respuesta", + "topic-title": "Título de tema", + "number-of-replies": "Número de respuestas", + "number-of-views": "Número de visualizaciones", + "topic-start-date": "Fecha de inicio del tema", + "username": "Usuario", + "category": "Categoría", + "descending": "En orden descendente", + "ascending": "En orden ascendente", + "save-preferences": "Guardar preferencias", + "clear-preferences": "Descartar preferencias", + "search-preferences-saved": "Preferencias de búsqueda guardadas", + "search-preferences-cleared": "Preferencias de búsqueda descartadas", + "show-results-as": "Mostrar resultados como" } \ No newline at end of file diff --git a/public/language/es/success.json b/public/language/es/success.json index ed5f88db31..ad5ed36c1d 100644 --- a/public/language/es/success.json +++ b/public/language/es/success.json @@ -1,6 +1,6 @@ { - "success": "Exito!", - "topic-post": "Has publicado correctamente.", - "authentication-successful": "El inicio de sesión ha sido correcto!", - "settings-saved": "Su configuración ha sido guardada correctamente." + "success": "¡Éxito!", + "topic-post": "Mensaje publicado satisfactoriamente.", + "authentication-successful": "Identificado satisfactoriamente", + "settings-saved": "¡Ajustes guardados satisfactoriamente!" } \ No newline at end of file diff --git a/public/language/es/tags.json b/public/language/es/tags.json index 36dabaf8f1..dc1f26a0ba 100644 --- a/public/language/es/tags.json +++ b/public/language/es/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "No hay temas con esta etiqueta.", "tags": "Etiquetas", - "enter_tags_here": "Introduce las etiquetas aquí. Pulsa intro desde de cada una.", - "enter_tags_here_short": "Enter tags...", + "enter_tags_here": "Introduce las etiquetas aquí. %1-%2 caracteres. Presiona enter después de cada etiqueta.", + "enter_tags_here_short": "Introduzca las etiquetas...", "no_tags": "Aún no hay etiquetas." } \ No newline at end of file diff --git a/public/language/es/topic.json b/public/language/es/topic.json index c71513d4ce..1938b05c7d 100644 --- a/public/language/es/topic.json +++ b/public/language/es/topic.json @@ -2,7 +2,7 @@ "topic": "Tema", "topic_id": "ID de Tema", "topic_id_placeholder": "Introducir ID del tema", - "no_topics_found": "No se encontraron temas!", + "no_topics_found": "¡No se encontraron temas!", "no_posts_found": "¡No se encontraron publicaciones!", "post_is_deleted": "¡Esta publicación está eliminada!", "profile": "Perfil", @@ -12,77 +12,79 @@ "notify_me": "Serás notificado cuando haya nuevas respuestas en este tema", "quote": "Citar", "reply": "Responder", + "guest-login-reply": "Accede para responder", "edit": "Editar", "delete": "Borrar", "purge": "Purgar", "restore": "Restaurar", "move": "Mover", - "fork": "Bifurcar", + "fork": "Dividir", "link": "Link", "share": "Compartir", "tools": "Herramientas", "flag": "Reportar", "locked": "Cerrado", "bookmark_instructions": "Haz click aquí para volver al último post que viste o ciérralo para ocultarlo.", - "flag_title": "Reportar esta publicación a los moderadores", - "flag_confirm": "¿Estás seguro de que quieres marcar como indebido este mensaje?", - "flag_success": "Este mensaje ha sido marcado para la moderación.", - "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", + "flag_title": "Reportar este mensaje", + "flag_confirm": "¿Estás seguro de que quieres reportar este mensaje?", + "flag_success": "Este mensaje ha sido reportado para moderación.", + "deleted_message": "Este tema ha sido borrado. Solo los usuarios que tengan privilegios de administración de temas pueden verlo.", "following_topic.message": "Ahora recibiras notificaciones cuando alguien publique en este tema.", "not_following_topic.message": "No recibiras notificaciones de este tema.", - "login_to_subscribe": "Por favor, conectate para subscribirte a este tema.", + "login_to_subscribe": "Por favor, conéctate para subscribirte a este tema.", "markAsUnreadForAll.success": "Publicación marcada como no leída para todos.", "watch": "Seguir", - "unwatch": "Unwatch", + "unwatch": "Dejar de seguir", "watch.title": "Serás notificado cuando haya nuevas respuestas en este tema", - "unwatch.title": "Stop watching this topic", + "unwatch.title": "Dejar de seguir este tema", "share_this_post": "Compartir este post", - "thread_tools.title": "Topic Tools", + "thread_tools.title": "Herramientas del tema", "thread_tools.markAsUnreadForAll": "Marcar como no leído", - "thread_tools.pin": "Tema Importante", - "thread_tools.unpin": "Quitar Importante", - "thread_tools.lock": "Cerrar Tema", - "thread_tools.unlock": "Abrir Tema", - "thread_tools.move": "Mover Tema", + "thread_tools.pin": "Adherir tema", + "thread_tools.unpin": "Despegar tema", + "thread_tools.lock": "Cerrar tema", + "thread_tools.unlock": "Reabrir tema", + "thread_tools.move": "Mover tema", "thread_tools.move_all": "Mover todo", - "thread_tools.fork": "Bifurcar Tema", - "thread_tools.delete": "Borrar Tema", - "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", - "thread_tools.restore": "Restaurar Tema", - "thread_tools.restore_confirm": "Are you sure you want to restore this topic?", - "thread_tools.purge": "Purgar publicación", - "thread_tools.purge_confirm": "Are you sure you want to purge this topic?", + "thread_tools.fork": "Dividir tema", + "thread_tools.delete": "Borrar tema", + "thread_tools.delete_confirm": "¿Estás seguro que deseas eliminar este tema?", + "thread_tools.restore": "Restaurar tema", + "thread_tools.restore_confirm": "¿Estás seguro que deseas restaurar este tema?", + "thread_tools.purge": "Purgar tema", + "thread_tools.purge_confirm": "¿Está seguro que desea eliminar definitivamente (purgar) este tema?", "topic_move_success": "El tema ha sido movido correctamente a %1", "post_delete_confirm": "¿Estás seguro de que quieres eliminar esta respuesta?", "post_restore_confirm": "¿Estás seguro de que quieres restaurar esta respuesta?", - "post_purge_confirm": "Estás seguro de que quieres limpiar esta publicación?", - "load_categories": "Cargando Categorías", - "disabled_categories_note": "Las categorías deshabilitadas estan en gris", + "post_purge_confirm": "¡Estás seguro de que quieres purgar esta publicación?", + "load_categories": "Cargando categorías", + "disabled_categories_note": "Las categorías deshabilitadas están en gris", "confirm_move": "Mover", - "confirm_fork": "Bifurcar", + "confirm_fork": "Dividir", "favourite": "Favorito", "favourites": "Favoritos", - "favourites.has_no_favourites": "No tienes favoritos, puedes agregar alguno y volver a verlos aquí!", + "favourites.has_no_favourites": "No tienes favoritos, ¡puedes agregar alguno y volver a verlos aquí!", "loading_more_posts": "Cargando más publicaciones", - "move_topic": "Mover Tema", - "move_topics": "Mover Temas", - "move_post": "Mover Publicación", + "move_topic": "Mover tema", + "move_topics": "Mover temas", + "move_post": "Mover publicación", "post_moved": "¡Publicación movida correctamente!", - "fork_topic": "Bifurcar Tema", + "fork_topic": "Dividir tema", "topic_will_be_moved_to": "Este tema será movido a la categoría", - "fork_topic_instruction": "Click en las publicaciones que quieres bifurcar", - "fork_no_pids": "¡No seleccionaste publicaciones!", - "fork_success": "Successfully forked topic! Click here to go to the forked topic.", - "composer.title_placeholder": "Ingresa el titulo de tu tema", + "fork_topic_instruction": "Pulsa en los mensajes que quieres dividir", + "fork_no_pids": "¡No has seleccionado ningún mensaje!", + "fork_success": "¡Se ha creado un nuevo tema a partir del original! Haz click aquí para ir al nuevo tema.", + "composer.title_placeholder": "Ingresa el título de tu tema...", + "composer.handle_placeholder": "Nombre", "composer.discard": "Descartar", "composer.submit": "Enviar", "composer.replying_to": "En respuesta a %1", - "composer.new_topic": "Nuevo Tema", + "composer.new_topic": "Nuevo tema", "composer.uploading": "subiendo...", - "composer.thumb_url_label": "Agregar imagen destacada a este tema", + "composer.thumb_url_label": "Agrega una URL de miniatura para el hilo", "composer.thumb_title": "Agregar miniatura a este tema", - "composer.thumb_url_placeholder": "http://ejemplo.com/mini.png", - "composer.thumb_file_label": "Subir un fichero", + "composer.thumb_url_placeholder": "http://example.com/thumb.png", + "composer.thumb_file_label": "O subir un fichero", "composer.thumb_remove": "Limpiar campos", "composer.drag_and_drop_images": "Arrastra las imagenes aqui", "more_users_and_guests": "%1 usuario(s) y %2 invitado(s) más", @@ -92,5 +94,6 @@ "sort_by": "Ordenar por", "oldest_to_newest": "Más antiguo a más nuevo", "newest_to_oldest": "Más nuevo a más antiguo", - "most_votes": "Mayor número de votos" + "most_votes": "Mayor número de votos", + "most_posts": "Mayor número de mensajes" } \ No newline at end of file diff --git a/public/language/es/unread.json b/public/language/es/unread.json index fa029aafcc..95bd38fd77 100644 --- a/public/language/es/unread.json +++ b/public/language/es/unread.json @@ -2,8 +2,8 @@ "title": "No leído", "no_unread_topics": "No hay temas nuevos para leer.", "load_more": "Cargar más", - "mark_as_read": "Marcar como leído.", - "selected": "Seleccionado", - "all": "Todo", - "topics_marked_as_read.success": "Temas marcados como leídos correctamente!" + "mark_as_read": "Marcar como leído", + "selected": "Seleccionados", + "all": "Todos", + "topics_marked_as_read.success": "¡Temas marcados como leídos!" } \ No newline at end of file diff --git a/public/language/es/user.json b/public/language/es/user.json index fab1662a7e..add6981c5f 100644 --- a/public/language/es/user.json +++ b/public/language/es/user.json @@ -2,12 +2,14 @@ "banned": "Baneado", "offline": "Desconectado", "username": "Nombre de usuario", - "email": "Correo Electrónico", - "confirm_email": "Repetir correo electrónico", + "joindate": "Fecha de Registro", + "postcount": "Número De Publicaciones", + "email": "Correo electrónico", + "confirm_email": "Confirmar correo electrónico", "delete_account": "Eliminar cuenta", - "delete_account_confirm": "Estás seguro de que quieres eliminar tu cuenta?
Esta acción es irreversible y no podrás recuperar tus datos

Introduce tu nombre de usuario para confirmar la eliminación de la cuenta.", + "delete_account_confirm": "¿Estás seguro de que quieres eliminar tu cuenta?
Esta acción es irreversible y no podrás recuperar ninguno de tus datos.

Introduce tu nombre de usuario para confirmar la eliminación de la cuenta.", "fullname": "Nombre completo", - "website": "Sitio Web", + "website": "Sitio web", "location": "Ubicación", "age": "Edad", "joined": "Registrado", @@ -16,60 +18,63 @@ "profile_views": "Visitas", "reputation": "Reputación", "favourites": "Favoritos", + "watched": "Visto", "followers": "Seguidores", - "following": "Sigue", + "following": "Siguiendo", "signature": "Firma", "gravatar": "Gravatar", "birthday": "Cumpleaños", - "chat": "Chat!", + "chat": "Chat", "follow": "Seguir", - "unfollow": "Dejar de Seguir", - "profile_update_success": "El perfil ha sido actualizado correctamente!", - "change_picture": "Cambiar Foto", + "unfollow": "Dejar de seguir", + "profile_update_success": "¡El perfil ha sido actualizado correctamente!", + "change_picture": "Cambiar imágen", "edit": "Editar", - "uploaded_picture": "Fotos subidas", - "upload_new_picture": "Subir Nueva Foto", - "upload_new_picture_from_url": "Upload New Picture From URL", + "uploaded_picture": "Imágen subida", + "upload_new_picture": "Subir nueva imágen", + "upload_new_picture_from_url": "Cargar imágen desde una URL", "current_password": "Contraseña actual", - "change_password": "Cambiar Contraseña", - "change_password_error": "Contraseña no válida!", - "change_password_error_wrong_current": "Su contraseña actual no es correcta!", - "change_password_error_length": "La contraseña es demasiado corta!", - "change_password_error_match": "Las contraseñas deben coincidir!", + "change_password": "Cambiar contraseña", + "change_password_error": "¡Contraseña no válida!", + "change_password_error_wrong_current": "¡Su contraseña actual no es correcta!", + "change_password_error_length": "¡La contraseña es demasiado corta!", + "change_password_error_match": "¡Las contraseñas deben coincidir!", "change_password_error_privileges": "No tienes los permisos suficientes para cambiar esta contraseña.", - "change_password_success": "La contraseña ha sido actualizada correctamente!", - "confirm_password": "Confirmar Contraseña", + "change_password_success": "¡Tu contraseña ha sido actualizada!", + "confirm_password": "Confirmar contraseña", "password": "Contraseña", - "username_taken_workaround": "El nombre de usuario que has solicitada ya está escogido, por tanto lo hemos alterado ligeramente. Ahora eres conocido como %1", + "username_taken_workaround": "El nombre de usuario que has solicitada ya está siendo usado, por tanto lo hemos alterado ligeramente. Ahora eres conocido como %1.", "upload_picture": "Subir foto", "upload_a_picture": "Subir una foto", "image_spec": "Sólo puedes subir imágenes en formato PNG, JPG o GIF.", "max": "máx.", "settings": "Opciones", - "show_email": "Mostrar mi Correo electrónico", - "show_fullname": "Show My Full Name", - "restrict_chats": "Only allow chat messages from users I follow", - "digest_label": "Suscribirse a Resumen", + "show_email": "Mostrar mi correo electrónico", + "show_fullname": "Mostrar mi nombre completo", + "restrict_chats": "Solo permitir mensajes de chat de usuarios a los que sigo", + "digest_label": "Suscribirse al resumen", "digest_description": "Suscribirse a actualizaciones por correo electrónico a este foro (nuevas notificaciones y temas) de acuerdo a una recurrencia definida", "digest_off": "Apagado", "digest_daily": "Diariamente", "digest_weekly": "Semanalmente", "digest_monthly": "Mensualmente", - "send_chat_notifications": "Envía un correo electrónico si recibes un mensaje de chat cuando no estás en línea.", - "has_no_follower": "Este miembro no tiene seguidores. :(", - "follows_no_one": "Este miembro no sigue a nadie. :(", + "send_chat_notifications": "Enviar un email si recibo un mensaje de chat cuando no esté en línea.", + "send_post_notifications": "Enviarme un email cuando se realicen contestaciones en los temas en los que estoy subscrito", + "has_no_follower": "Este usuario no tiene seguidores :(", + "follows_no_one": "Este miembro no sigue a nadie :(", "has_no_posts": "Este usuario aún no ha publicado nada.", "has_no_topics": "Este usuario aún no ha publicado nada.", + "has_no_watched_topics": "Este usuario todavía no ha visto ninguna publicación.", "email_hidden": "Correo electrónico oculto", "hidden": "oculto", - "paginate_description": "La paginación de los temas no es por página, ya que tiene scroll infinito.", + "paginate_description": "Paginar hilos y mensajes en lugar de usar desplazamiento infinito.", "topics_per_page": "Temas por página", "posts_per_page": "Post por página", - "notification_sounds": "Reproducir un sonido al recibir una notificación", + "notification_sounds": "Reproducir un sonido al recibir una notificación.", "browsing": "Preferencias de navegación.", - "open_links_in_new_tab": "Abrir los enlaces externos en una nueva pestaña?", - "enable_topic_searching": "Enable In-Topic Searching", - "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", - "follow_topics_you_reply_to": "Seguir publicaciones en las que respondes.", + "open_links_in_new_tab": "¿Abrir los enlaces externos en una nueva pestaña?", + "enable_topic_searching": "Activar la búsqueda \"in-topic\"", + "topic_search_help": "Si está activada, la búsqueda 'in-topic' invalidará el comportamiento por defecto del navegador de buscar sólo en la página mostrada y le permitirá entonces buscar en el tema al completo, en vez de hacer una búsqueda únicamente sobre el contenido de la pantalla.", + "follow_topics_you_reply_to": "Seguir los temas en las que respondes.", "follow_topics_you_create": "Seguir publicaciones que creas." } \ No newline at end of file diff --git a/public/language/es/users.json b/public/language/es/users.json index 1ebdfd7147..81668516cf 100644 --- a/public/language/es/users.json +++ b/public/language/es/users.json @@ -1,9 +1,12 @@ { - "latest_users": "Últimos Miembros", - "top_posters": "Top Publicadores", - "most_reputation": "Mayor Reputación", + "latest_users": "Últimos usuarios", + "top_posters": "Top por mensajes", + "most_reputation": "Más reputados", "search": "Buscar", "enter_username": "Ingresa el nombre de usuario que quieres buscar", "load_more": "Cargar más", - "users-found-search-took": "¡%1 usuario(s) encontrados! La búsqueda tardó %2 ms." + "users-found-search-took": "¡%1 usuario(s) encontrado! La búsqueda ha llevado %2 segundos.", + "filter-by": "Filtrar Por", + "online-only": "Sólo en línea", + "picture-only": "Sólo imagen" } \ No newline at end of file diff --git a/public/language/et/category.json b/public/language/et/category.json index 1c825ed2fe..d3c0f6e6bd 100644 --- a/public/language/et/category.json +++ b/public/language/et/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Uus teema", + "guest-login-post": "Log in to post", "no_topics": "Kahjuks ei leidu siin kategoorias ühtegi teemat.
Soovid postitada?", "browsing": "vaatab", "no_replies": "Keegi pole vastanud", diff --git a/public/language/et/email.json b/public/language/et/email.json index fdbfb006c6..f290435e75 100644 --- a/public/language/et/email.json +++ b/public/language/et/email.json @@ -9,6 +9,9 @@ "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", "reset.cta": "Click here to reset your password", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", "digest.cta": "Click here to visit %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "New chat message received from %1", "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", "unsub.cta": "Click here to alter those settings", "closing": "Thanks!" diff --git a/public/language/et/error.json b/public/language/et/error.json index 8a3b6f0c56..303197735f 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -18,6 +18,9 @@ "username-taken": "Kasutajanimi on juba võetud", "email-taken": "Email on võetud", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Kasutajanimi on liiga lühike", "username-too-long": "Username too long", "user-banned": "Kasutaja bannitud", @@ -32,21 +35,29 @@ "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "Kategooria keelatud", "topic-locked": "Teema lukustatud", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Palun oota, kuni üleslaadimised on laetud.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Palun sisesta lühem pealkiri. Pealkirjad ei saa olla pikemad kui %1 tähemärki.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "Sa ei saa hääletada enda postituse poolt", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "Sa ei saa bannida teisi administraatoreid!", - "invalid-image-type": "Vigane pildi formaat", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Grupi nimi liiga lühike", "group-already-exists": "Grupp juba eksisteerib", "group-name-change-not-allowed": "Grupi nimevahetus ei ole lubatud", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Teema thumbnailid on keelatud.", "invalid-file": "Vigane fail", "uploads-are-disabled": "Üleslaadimised on keelatud", - "upload-error": "Üleslaadimise viga: %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "Sa ei saa endaga vestelda!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "Sul ei ole piisavalt reputatsiooni, et anda negatiivset hinnangut sellele postitusele.", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/et/global.json b/public/language/et/global.json index 80f06373ad..5e14fb2623 100644 --- a/public/language/et/global.json +++ b/public/language/et/global.json @@ -3,9 +3,10 @@ "search": "Otsi", "buttons.close": "Sulge", "403.title": "Ligipääs puudub", - "403.message": "Tundub, et sul pole piisvalt õigusi selle lehe vaatamiseks. Äkki peaksid sisse logima?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Ei leitud", - "404.message": "Tundub, et lehte mida otsid, ei eksisteeri. Mine tagasi avalehele.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Süsteemi viga", "500.message": "Oih! Midagi läks valesti!", "register": "Registreeri", @@ -26,6 +27,7 @@ "header.tags": "Märksõnad", "header.popular": "Populaarne", "header.users": "Kasutajad", + "header.groups": "Groups", "header.chats": "Vestlused", "header.notifications": "Teated", "header.search": "Otsi", @@ -73,5 +75,7 @@ "updated.title": "Foorum on uuendatud", "updated.message": "See foorum uuendati just kõige uuemale versioonile. Vajuta siia et värskendada veebilehte.", "privacy": "Privaatsus", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Kustuta kõik" } \ No newline at end of file diff --git a/public/language/et/groups.json b/public/language/et/groups.json index bf69c732b0..d2314fdc29 100644 --- a/public/language/et/groups.json +++ b/public/language/et/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "View Group", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Group Details", "details.members": "Member List", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Latest Posts", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/et/login.json b/public/language/et/login.json index 0981b34e8c..20bd7e3f0d 100644 --- a/public/language/et/login.json +++ b/public/language/et/login.json @@ -1,5 +1,7 @@ { - "username": "Kasutajanimi / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Mäleta mind?", "forgot_password": "Unustasid parooli?", "alternative_logins": "Alternatiivsed sisse logimise võimalused", diff --git a/public/language/et/notifications.json b/public/language/et/notifications.json index fad40fc5d7..46718ce1d4 100644 --- a/public/language/et/notifications.json +++ b/public/language/et/notifications.json @@ -2,6 +2,7 @@ "title": "Teated", "no_notifs": "Sul pole uusi teateid", "see_all": "Vaata kõiki teateid", + "mark_all_read": "Mark all notifications read", "back_to_home": "Tagasi %1", "outgoing_link": "Väljaminev link", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Emaili aadress kinnitatud", "email-confirmed-message": "Täname, et kinnitasite oma emaili aadressi. Teie kasutaja omn nüüd täielikult aktiveeritud.", - "email-confirm-error": "Süsteemis tekkis viga...", "email-confirm-error-message": "Emaili aadressi kinnitamisel tekkis viga. Võibolla kinnituskood oli vale või aegunud.", "email-confirm-sent": "Kinnituskiri on saadetud." } \ No newline at end of file diff --git a/public/language/et/pages.json b/public/language/et/pages.json index be7537527b..4a8ef6408f 100644 --- a/public/language/et/pages.json +++ b/public/language/et/pages.json @@ -11,6 +11,7 @@ "user.followers": "Kasutajad, kes jälgivad %1", "user.posts": "Postitused, mis on tehtud kasutaja %1 poolt", "user.topics": "Teemad on kirjutanud %1", + "user.groups": "%1's Groups", "user.favourites": "%1's lemmikud postitused", "user.settings": "Kasutaja sätted", "maintenance.text": "%1 foorumil on käimas hooldustööd. Palun külastage meid mõne aja pärast uuesti.", diff --git a/public/language/et/recent.json b/public/language/et/recent.json index 4de6812ea2..272a2b9131 100644 --- a/public/language/et/recent.json +++ b/public/language/et/recent.json @@ -5,5 +5,15 @@ "month": "Kuu", "year": "Aasta", "alltime": "Kogu aja vältel", - "no_recent_topics": "Hetkel ei ole hiljutisi teemasid." + "no_recent_topics": "Hetkel ei ole hiljutisi teemasid.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/et/reset_password.json b/public/language/et/reset_password.json index c504ed9296..98e4fe4fae 100644 --- a/public/language/et/reset_password.json +++ b/public/language/et/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Palun sisesta oma emaili aadress ja me saadame sulle emaili koos õpetusega, kuidas oma parooli vahetada.", "enter_email_address": "Sisesta emaili aadress", "password_reset_sent": "Saadetud", - "invalid_email": "Vigane emaili aadress / emaili aadressi ei ekisteeri!" + "invalid_email": "Vigane emaili aadress / emaili aadressi ei ekisteeri!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/et/search.json b/public/language/et/search.json index adc6fdbaf6..661cebbacd 100644 --- a/public/language/et/search.json +++ b/public/language/et/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 tulemus(t) mis vastavad otsingule \"%2\", (%3 sekundit)", - "no-matches": "Postitusi ei leitud" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/et/tags.json b/public/language/et/tags.json index 4464ed5090..5f63e2b3e7 100644 --- a/public/language/et/tags.json +++ b/public/language/et/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Teemasid, mis sisaldaksid seda märksõna, ei eksisteeri.", "tags": "Märksõnad", - "enter_tags_here": "Sisesta märksõnad siia. Iga märksõna tagant sisesta enterit.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Sisesta märksõnu...", "no_tags": "Siin ei ole veel ühtegi märksõna." } \ No newline at end of file diff --git a/public/language/et/topic.json b/public/language/et/topic.json index 629ea945a2..8992993fb9 100644 --- a/public/language/et/topic.json +++ b/public/language/et/topic.json @@ -12,6 +12,7 @@ "notify_me": "Saa teateid uutest postitustest selles teemas", "quote": "Tsiteeri", "reply": "Vasta", + "guest-login-reply": "Log in to reply", "edit": "Muuda", "delete": "Kustuta", "purge": "Kustuta", @@ -74,6 +75,7 @@ "fork_no_pids": "Sa ei ole postitusi valinud!", "fork_success": "Edukalt ''forkisid'' teema! Vajuta siia, et vaadata loodud teemat.", "composer.title_placeholder": "Sisesta teema pealkiri siia...", + "composer.handle_placeholder": "Name", "composer.discard": "Katkesta", "composer.submit": "Postita", "composer.replying_to": "Vastad %1'le", @@ -92,5 +94,6 @@ "sort_by": "Sorteeri", "oldest_to_newest": "Vanematest uuemateni", "newest_to_oldest": "Uuematest vanemateni", - "most_votes": "Kõige rohkem hääli" + "most_votes": "Kõige rohkem hääli", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/et/user.json b/public/language/et/user.json index 0e171d62ff..ebf69619dc 100644 --- a/public/language/et/user.json +++ b/public/language/et/user.json @@ -2,6 +2,8 @@ "banned": "Banned", "offline": "Väljas", "username": "Kasutajanimi", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Email", "confirm_email": "Kinnita email", "delete_account": "Kustuta kasutaja", @@ -16,6 +18,7 @@ "profile_views": "Vaatamisi", "reputation": "Reputatsioon", "favourites": "Lemmikud", + "watched": "Watched", "followers": "Jälgijad", "following": "Jälgimised", "signature": "Allkiri", @@ -56,10 +59,12 @@ "digest_weekly": "Iga nädal", "digest_monthly": "Iga kuu", "send_chat_notifications": "Saada mulle email kui mulle saabub uus sõnum ja ma ei ole antud hetkel online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Sellel kasutajal pole ühtegi jälgijat :(", "follows_no_one": "See kasutaja ei jälgi kedagi :(", "has_no_posts": "See kasutaja pole midagi postitanud veel.", "has_no_topics": "See kasutaja pole vele ühtegi teemat postitanud.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Peidetud email", "hidden": "peidetud", "paginate_description": "Nummerda leheküljed ja postitused ning ära kasuta ''lõputut scrolli''.", diff --git a/public/language/et/users.json b/public/language/et/users.json index c56e4f1e63..ac83e6b160 100644 --- a/public/language/et/users.json +++ b/public/language/et/users.json @@ -5,5 +5,8 @@ "search": "Otsi", "enter_username": "Sisesta kasutajanimi, keda soovid otsida", "load_more": "Lae veel", - "users-found-search-took": "%1kasutaja(t) leiti! Otsing kestis %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/fa_IR/category.json b/public/language/fa_IR/category.json index c1c61a1a9f..b5b2749c70 100644 --- a/public/language/fa_IR/category.json +++ b/public/language/fa_IR/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "جستار تازه", + "guest-login-post": "Log in to post", "no_topics": "هیچ جستاری در این دسته نیست.
چرا شما یکی نفرستید؟", "browsing": "بیننده‌ها", "no_replies": "هیچ کسی پاسخ نداده است.", diff --git a/public/language/fa_IR/email.json b/public/language/fa_IR/email.json index fdbfb006c6..206fe1823b 100644 --- a/public/language/fa_IR/email.json +++ b/public/language/fa_IR/email.json @@ -1,23 +1,28 @@ { "password-reset-requested": "Password Reset Requested - %1!", - "welcome-to": "Welcome to %1", - "greeting_no_name": "Hello", - "greeting_with_name": "Hello %1", + "welcome-to": "به 1% خوش آمدید", + "greeting_no_name": "سلام", + "greeting_with_name": "سلام 1%", "welcome.text1": "Thank you for registering with %1!", "welcome.text2": "To fully activate your account, we need to verify that you own the email address you registered with.", - "welcome.cta": "Click here to confirm your email address", + "welcome.cta": "برای تأیید آدرس ایمیل خود اینجا کلیک کنید", "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", - "reset.cta": "Click here to reset your password", + "reset.cta": "برای تنظیم مجدد گذرواژه‌ی خود اینجا کلیک کنید", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", - "digest.cta": "Click here to visit %1", + "digest.cta": "برای دیدن 1% اینجا کلیک کنید", "digest.unsub.info": "This digest was sent to you due to your subscription settings.", "digest.no_topics": "There have been no active topics in the past %1", "notif.chat.subject": "New chat message received from %1", - "notif.chat.cta": "Click here to continue the conversation", + "notif.chat.cta": "برای ادامه‌ی گفتگو اینجا کلیک کنید", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", - "unsub.cta": "Click here to alter those settings", - "closing": "Thanks!" + "unsub.cta": "برای ویرایش آن تنظیمات اینجا کلیک کنید", + "closing": "سپاس!" } \ No newline at end of file diff --git a/public/language/fa_IR/error.json b/public/language/fa_IR/error.json index 3de8ab77e1..40ce45c9e0 100644 --- a/public/language/fa_IR/error.json +++ b/public/language/fa_IR/error.json @@ -18,6 +18,9 @@ "username-taken": "این نام کاربری گرفته شده است.", "email-taken": "این رایانامه گرفته شده است.", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "نام کاربری خیلی کوتاه است.", "username-too-long": "Username too long", "user-banned": "کاربر محروم شد.", @@ -32,21 +35,29 @@ "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "دسته غیر‌فعال شد.", "topic-locked": "جستار بسته شد.", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "خواهشمندیم تا پایان بارگذاری‌ها شکیبا باشید.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "خواهشمندیم عنوان کوتاه‌تری بنویسید. عنوان‌ها نمی‌توانند بیش‌تر از %1 نویسه داشته باشند.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "شما نمی‌توانید به دیدگاه خود رای بدهید.", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "شما نمی‌توانید دیگر مدیران را محروم کنید!", - "invalid-image-type": "نوع تصویر نامعتبر است.", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "نام گروه خیلی کوتاه است.", "group-already-exists": "این گروه از پیش وجود دارد.", "group-name-change-not-allowed": "تغیر نام گروه نیاز به دسترسی دارد.", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "چهرک‌های جستار غیرفعال شده است.", "invalid-file": "فایل نامعتبر است.", "uploads-are-disabled": "امکان بارگذاری غیرفعال شده است.", - "upload-error": "خطای بارگذاری: %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "شما نمی‌توانید با خودتان گفتگو کنید!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "شما اعتبار کافی برای دادن رای منفی به این دیدگاه را ندارید.", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/fa_IR/global.json b/public/language/fa_IR/global.json index fe840a8495..6ef5ffe217 100644 --- a/public/language/fa_IR/global.json +++ b/public/language/fa_IR/global.json @@ -3,9 +3,10 @@ "search": "جستجو", "buttons.close": "بستن", "403.title": "دسترسی ندارید", - "403.message": "شما برگه‌ای را فراخوانده‌اید که دسترسی به آن ندارید. شاید باید به درون بیایید؟", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "یافت نشد", - "404.message": "شما برگه‌ای را فراخوانده‌اید که وجود ندارد. به برگهٔ خانه برگردید.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "خطای درونی.", "500.message": "اوه! گویا اشتباهی رخ داده!", "register": "نام‌نویسی", @@ -26,6 +27,7 @@ "header.tags": "برچسب‌ها", "header.popular": "دوست‌داشتنی‌ها", "header.users": "کاربران", + "header.groups": "Groups", "header.chats": "گفتگوها", "header.notifications": "آگاه‌سازی‌ها", "header.search": "جستجو", @@ -73,5 +75,7 @@ "updated.title": "انجمن بروزرسانی شد", "updated.message": "این انجمن به آخرین نسخه بروزرسانی شد. برای بارگزاری مجدد صفحه اینجا کلیک کنید.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/fa_IR/groups.json b/public/language/fa_IR/groups.json index bf69c732b0..d2314fdc29 100644 --- a/public/language/fa_IR/groups.json +++ b/public/language/fa_IR/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "View Group", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Group Details", "details.members": "Member List", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Latest Posts", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/fa_IR/login.json b/public/language/fa_IR/login.json index 87936c3112..07012aad28 100644 --- a/public/language/fa_IR/login.json +++ b/public/language/fa_IR/login.json @@ -1,5 +1,7 @@ { - "username": "نام کاربری / رایانامه", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "مرا به یاد بسپار؟", "forgot_password": "گذرواژه را فراموش کرده‌اید؟", "alternative_logins": "روش‌های درون آمدن جایگزین", diff --git a/public/language/fa_IR/notifications.json b/public/language/fa_IR/notifications.json index fe0a2aa45d..e56553bba6 100644 --- a/public/language/fa_IR/notifications.json +++ b/public/language/fa_IR/notifications.json @@ -2,6 +2,7 @@ "title": "آگاه‌سازی‌ها", "no_notifs": "هیچ آگاه‌سازی تازه‌ای ندارید", "see_all": "دیدن همهٔ آگاه‌سازی‌ها", + "mark_all_read": "Mark all notifications read", "back_to_home": "بازگشت به %1", "outgoing_link": "پیوند برون‌رو", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "رایانامه تایید شد", "email-confirmed-message": "بابت تایید ایمیلتان سپاس‌گزاریم. حساب کاربری شما اکنون به صورت کامل فعال شده است.", - "email-confirm-error": "خطایی پیش آمده است...", "email-confirm-error-message": "خطایی در تایید آدرس ایمیل شما پیش آمده است. ممکن است کد نا‌معتبر و یا منقضی شده باشد.", "email-confirm-sent": "ایمیل تایید ارسال شد." } \ No newline at end of file diff --git a/public/language/fa_IR/pages.json b/public/language/fa_IR/pages.json index ec3b4e6800..42dacfa193 100644 --- a/public/language/fa_IR/pages.json +++ b/public/language/fa_IR/pages.json @@ -11,6 +11,7 @@ "user.followers": "کاربرانی که %1 را دنبال می‌کنند", "user.posts": "دیدگاه‌های %1", "user.topics": "%1 این جستار را ساخت.", + "user.groups": "%1's Groups", "user.favourites": "دیدگاه‌های پسندیدهٔ %1", "user.settings": "تنظیمات کاربر", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/fa_IR/recent.json b/public/language/fa_IR/recent.json index 5a07722464..2a9060fad9 100644 --- a/public/language/fa_IR/recent.json +++ b/public/language/fa_IR/recent.json @@ -5,5 +5,15 @@ "month": "ماه", "year": "سال", "alltime": "All Time", - "no_recent_topics": "There are no recent topics." + "no_recent_topics": "There are no recent topics.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/fa_IR/reset_password.json b/public/language/fa_IR/reset_password.json index a0171f831c..5e6ea61461 100644 --- a/public/language/fa_IR/reset_password.json +++ b/public/language/fa_IR/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "لطفا نشانی رایانامهٔ خود را بنویسید و ما دستورکار بازیابی شناسه‌تان را به این رایانامه می‌فرستیم.", "enter_email_address": "نوشتن نشانی رایانامه", "password_reset_sent": "رایانامهٔ بازیابی گذرواژه فرستاده شد", - "invalid_email": "رایانامهٔ نامعتبر / رایانامه وجود ندارد!" + "invalid_email": "رایانامهٔ نامعتبر / رایانامه وجود ندارد!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/fa_IR/search.json b/public/language/fa_IR/search.json index e9eef4632a..9dad8b6eab 100644 --- a/public/language/fa_IR/search.json +++ b/public/language/fa_IR/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/fa_IR/tags.json b/public/language/fa_IR/tags.json index 78c658e958..82e477f4cc 100644 --- a/public/language/fa_IR/tags.json +++ b/public/language/fa_IR/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "جُستاری با این برچسب وجود ندارد.", "tags": "برچسب‌ها", - "enter_tags_here": "برچسب‌ها را اینجا وارد کنید. بعد از هر برچسب، اینتر بزنید.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Enter tags...", "no_tags": "هنوز برچسبی وجود ندارد." } \ No newline at end of file diff --git a/public/language/fa_IR/topic.json b/public/language/fa_IR/topic.json index 8026773ca1..f523bee5b6 100644 --- a/public/language/fa_IR/topic.json +++ b/public/language/fa_IR/topic.json @@ -12,6 +12,7 @@ "notify_me": "از پاسخ‌های تازه در جستار آگاه شوید", "quote": "نقل قول", "reply": "پاسخ", + "guest-login-reply": "Log in to reply", "edit": "ویرایش", "delete": "Delete", "purge": "پاک کردن", @@ -74,6 +75,7 @@ "fork_no_pids": "هیچ دیدگاهی انتخاب نشده!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "سرنویس جستارتان را اینجا بنویسید...", + "composer.handle_placeholder": "Name", "composer.discard": "دور بیانداز", "composer.submit": "بفرست", "composer.replying_to": "پاسخ به %1", @@ -92,5 +94,6 @@ "sort_by": "مرتب‌سازی بر اساس", "oldest_to_newest": "قدیمی‌ترین به جدید‌ترین", "newest_to_oldest": "جدید‌ترین به قدیمی‌ترین", - "most_votes": "بیشترین رای‌ها" + "most_votes": "بیشترین رای‌ها", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/fa_IR/user.json b/public/language/fa_IR/user.json index 799f5a71ae..0b2a48667f 100644 --- a/public/language/fa_IR/user.json +++ b/public/language/fa_IR/user.json @@ -2,6 +2,8 @@ "banned": "مسدود", "offline": "آفلاین", "username": "نام کاربری", + "joindate": "Join Date", + "postcount": "Post Count", "email": "رایانامه", "confirm_email": "تأیید رایانامه", "delete_account": "Delete Account", @@ -16,6 +18,7 @@ "profile_views": "بازدیدهای نمایه", "reputation": "اعتبار", "favourites": "پسندها", + "watched": "Watched", "followers": "دنبال‌کننده‌ها", "following": "دنبال‌شونده‌ها", "signature": "امضا", @@ -56,10 +59,12 @@ "digest_weekly": "هفتگی", "digest_monthly": "ماهانه", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "این کاربر هیچ دنبال‌کننده‌ای ندارد :(", "follows_no_one": "این کاربر هیچ کسی را دنبال نمی‌کند :(", "has_no_posts": "این کاربر هنوز هیچ دیدگاهی نگذاشته است.", "has_no_topics": "این کاربر هنوز هیچ جستاری نفرستاده است.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "رایانامه پنهان شده", "hidden": "پنهان", "paginate_description": "محدود کردن شمار جستارها و دیدگاه‌ها در هر برگه به جای مرور بی‌پایان برگه‌ها", diff --git a/public/language/fa_IR/users.json b/public/language/fa_IR/users.json index 5b1ea539af..b164bd0839 100644 --- a/public/language/fa_IR/users.json +++ b/public/language/fa_IR/users.json @@ -5,5 +5,8 @@ "search": "جستجو", "enter_username": "یک نام کاربری برای جستجو وارد کنید", "load_more": "بارگذاری بیش‌تر", - "users-found-search-took": "%1 کاربر() در مدت زمان %2 میلی ثانیه یافت شد!" + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/fi/category.json b/public/language/fi/category.json index f3ae42f69f..6e36ca410c 100644 --- a/public/language/fi/category.json +++ b/public/language/fi/category.json @@ -1,8 +1,9 @@ { "new_topic_button": "Uusi aihe", - "no_topics": "Tällä aihealueella ei ole yhtään aihetta.
Miksi et aloittaisi uutta?", + "guest-login-post": "Kirjaudu sisään voidaksesi kirjoittaa viesti", + "no_topics": "Tässä kategoriassa ei ole yhtään aihetta.
Miksi et aloittaisi uutta?", "browsing": "selaamassa", "no_replies": "Kukaan ei ole vastannut", "share_this_category": "Jaa tämä kategoria", - "ignore": "Ignore" + "ignore": "Sivuuta" } \ No newline at end of file diff --git a/public/language/fi/email.json b/public/language/fi/email.json index fdbfb006c6..50237b0d03 100644 --- a/public/language/fi/email.json +++ b/public/language/fi/email.json @@ -1,14 +1,17 @@ { - "password-reset-requested": "Password Reset Requested - %1!", - "welcome-to": "Welcome to %1", - "greeting_no_name": "Hello", - "greeting_with_name": "Hello %1", - "welcome.text1": "Thank you for registering with %1!", - "welcome.text2": "To fully activate your account, we need to verify that you own the email address you registered with.", - "welcome.cta": "Click here to confirm your email address", + "password-reset-requested": "Pyydetty salasanan palautuskoodia - %1!", + "welcome-to": "%1 - Tervetuloa", + "greeting_no_name": "Hei", + "greeting_with_name": "Hei %1", + "welcome.text1": "Kiitos rekisteröitymisestäsi sivustolle %1!", + "welcome.text2": "Meidän täytyy varmistaa, että omistat sen sähköpostiosoitteen, jolla rekisteröidyit, ennen kuin tilisi voidaan aktivoida kokonaan.", + "welcome.cta": "Napsauta tästä vahvistaaksesi sähköpostiosoitteesi", "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", "reset.cta": "Click here to reset your password", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", "digest.cta": "Click here to visit %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "New chat message received from %1", "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", "unsub.cta": "Click here to alter those settings", "closing": "Thanks!" diff --git a/public/language/fi/error.json b/public/language/fi/error.json index 0328632c95..9ca0ec4973 100644 --- a/public/language/fi/error.json +++ b/public/language/fi/error.json @@ -12,41 +12,52 @@ "invalid-title": "Virheellinen otsikko!", "invalid-user-data": "Virheellinen käyttäjätieto", "invalid-password": "Virheellinen salasana", - "invalid-username-or-password": "Please specify both a username and password", - "invalid-search-term": "Invalid search term", + "invalid-username-or-password": "Ole hyvä ja anna sekä käyttäjänimi että salasana", + "invalid-search-term": "Virheellinen hakutermi", "invalid-pagination-value": "Virheellinen taittoarvo", "username-taken": "Käyttäjänimi varattu", "email-taken": "Sähköpostiosoite varattu", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed": "Sähköpostiasi ei ole vielä vahvistettu, ole hyvä ja napsauta tätä vahvistaaksesi sen.", + "email-not-confirmed-chat": "Et voi käyttää chattia ennen kuin sähköpostisi on vahvistettu", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Käyttäjänimi on liian lyhyt", - "username-too-long": "Username too long", + "username-too-long": "Käyttäjänimi on liian pitkä", "user-banned": "Käyttäjä on estetty", - "user-too-new": "Sorry, you are required to wait %1 seconds before making your first post", - "no-category": "Category does not exist", - "no-topic": "Topic does not exist", - "no-post": "Post does not exist", - "no-group": "Group does not exist", - "no-user": "User does not exist", + "user-too-new": "Pahottelut, joudut odottamaan %1 sekuntia ennen ensimmäisen viestin kirjoittamista", + "no-category": "Kategoriaa ei ole olemassa", + "no-topic": "Aihetta ei ole olemassa", + "no-post": "Viestiä ei ole olemassa", + "no-group": "Ryhmää ei ole olemassa", + "no-user": "Käyttäjää ei ole olemassa", "no-teaser": "Teaser does not exist", - "no-privileges": "You do not have enough privileges for this action.", + "no-privileges": "Oikeutesi eivät riitä toiminnon suorittamiseen.", "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "Kategoria ei ole käytössä", "topic-locked": "Aihe lukittu", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Ole hyvä ja odota tiedostojen lähettämisen valmistumista.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Otsikkosi on liian pitkä. Otsikoiden pituuden tulee olla enintään %1 merkkiä.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", - "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", + "file-too-big": "Suurin sallittu tiedostokoko on %1 kbs - ole hyvä ja lataa pienempi tiedosto", "cant-vote-self-post": "Et voi antaa ääntä omalle viestillesi", - "already-favourited": "You have already favourited this post", - "already-unfavourited": "You have already unfavourited this post", + "already-favourited": "Tämä viesti on jo suosikeissasi", + "already-unfavourited": "Olet jo poistanut tämän viestin suosikeistasi", "cant-ban-other-admins": "Et voi estää muita ylläpitäjiä!", - "invalid-image-type": "Virheellinen kuvatiedosto", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Ryhmän nimi on liian lyhyt", "group-already-exists": "Ryhmä on jo olemassa", "group-name-change-not-allowed": "Et voi vaihtaa ryhmän nimeä", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Aiheiden kuvakkeet eivät ole käytössä", "invalid-file": "Virheellinen tiedosto", "uploads-are-disabled": "Et voi lähettää tiedostoa", - "upload-error": "Lähetysvirhe: %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "Et voi keskustella itsesi kanssa!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/fi/global.json b/public/language/fi/global.json index 58ba3a2945..b5823b4f45 100644 --- a/public/language/fi/global.json +++ b/public/language/fi/global.json @@ -3,9 +3,10 @@ "search": "Hae", "buttons.close": "Sulje", "403.title": "Pääsy kielletty", - "403.message": "Olet päätynyt sivulle, johon sinulla ei ole tarvittavia oikeuksia. Sinun pitäisi kai kirjautua sisään.", + "403.message": "Olet päätynyt sivulle, johon sinulla ei ole tarvittavia oikeuksia.", + "403.login": "Sinun pitäisi kai kirjautua sisään?", "404.title": "Ei löydy", - "404.message": "Olet päätynyt sivulle, jota ei ole olemassa. Palaa etusivulle.", + "404.message": "Olet päätynyt sivulle, jota ei ole olemassa. Palaa etusivulle.", "500.title": "Sisäinen virhe.", "500.message": "Oho! Jotain meni pieleen!", "register": "Rekisteröidy", @@ -13,19 +14,20 @@ "please_log_in": "Kirjaudu, ole hyvä", "logout": "Kirjaudu ulos", "posting_restriction_info": "Kirjoittaminen on tällä hetkellä rajattu vain rekisteröityneille käyttäjille. Napsauta tätä kirjautuaksesi.", - "welcome_back": "Welcome Back", + "welcome_back": "Tervetuloa takaisin", "you_have_successfully_logged_in": "Olet onnistuneesti kirjautunut sisään", "save_changes": "Tallenna muutokset", "close": "Sulje", "pagination": "Sivutus", "pagination.out_of": "%1/%2", - "pagination.enter_index": "Enter index", + "pagination.enter_index": "Syötä indeksi", "header.admin": "Ylläpitäjä", "header.recent": "Viimeisimmät", "header.unread": "Lukemattomat", - "header.tags": "Tags", + "header.tags": "Tagit", "header.popular": "Suositut", "header.users": "Käyttäjät", + "header.groups": "Ryhmät", "header.chats": "Keskustelut", "header.notifications": "Ilmoitukset", "header.search": "Hae", @@ -38,7 +40,7 @@ "alert.success": "Onnistui", "alert.error": "Virhe", "alert.banned": "Estetty", - "alert.banned.message": "You have just been banned, you will now be logged out.", + "alert.banned.message": "Sinut estettiin juuri ja kirjaudut nyt ulos.", "alert.unfollow": "Et seuraa enää %1!", "alert.follow": "Seuraat nyt %1!", "online": "Online", @@ -72,6 +74,8 @@ "guests": "Vieraat", "updated.title": "Foorumi päivitetty", "updated.message": "Tämä foorumi on juuri päivitetty uusimpaan versioon. Paina tästä päivittääksesi sivun.", - "privacy": "Privacy", - "delete_all": "Delete All" + "privacy": "Yksityisyys", + "follow": "Seuraa", + "unfollow": "Älä seuraa", + "delete_all": "Poista kaikki" } \ No newline at end of file diff --git a/public/language/fi/groups.json b/public/language/fi/groups.json index bf69c732b0..c8538e2c28 100644 --- a/public/language/fi/groups.json +++ b/public/language/fi/groups.json @@ -1,8 +1,34 @@ { - "groups": "Groups", + "groups": "Ryhmät", "view_group": "View Group", - "details.title": "Group Details", - "details.members": "Member List", + "owner": "Ryhmän omistaja", + "new_group": "Luo uusi ryhmä", + "no_groups_found": "Ei ryhmiä", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Vedä ja pudota kuva, raahaa oikeaan kohtaan ja paina Tallenna", + "cover-change": "Change", + "cover-save": "Tallenna", + "cover-saving": "Tallennetaan", + "details.title": "Ryhmän tiedot", + "details.members": "Jäsenluettelo", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Uusimmat viestit", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Potkaise", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/fi/login.json b/public/language/fi/login.json index 6f6285b001..3dc14792ee 100644 --- a/public/language/fi/login.json +++ b/public/language/fi/login.json @@ -1,5 +1,7 @@ { - "username": "Käyttäjätunnus tai sähköpostiosoite", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Muista minut?", "forgot_password": "Unohditko salasanasi?", "alternative_logins": "Vaihtoehtoiset kirjautumistavat", diff --git a/public/language/fi/modules.json b/public/language/fi/modules.json index 1edf78c52d..cce7d25fbe 100644 --- a/public/language/fi/modules.json +++ b/public/language/fi/modules.json @@ -1,21 +1,21 @@ { "chat.chatting_with": "Keskustele käyttäjän kanssa", - "chat.placeholder": "Type chat message here, press enter to send", + "chat.placeholder": "Kirjoita viestisi tähän ja paina enter lähettääksesi", "chat.send": "Lähetä", "chat.no_active": "Sinulla ei ole aktiivisia keskusteluita.", "chat.user_typing": "%1 kirjoittaa ...", "chat.user_has_messaged_you": "%1 lähetti sinulle viestin.", "chat.see_all": "Näytä kaikki keskustelut", - "chat.no-messages": "Please select a recipient to view chat message history", - "chat.recent-chats": "Recent Chats", + "chat.no-messages": "Valitse vastaanottaja katsellaksesi keskusteluhistoriaa", + "chat.recent-chats": "Viimeisimmät keskustelut", "chat.contacts": "Contacts", - "chat.message-history": "Message History", + "chat.message-history": "Viestihistoria", "chat.pop-out": "Pop out chat", - "chat.maximize": "Maximize", - "chat.seven_days": "7 Days", - "chat.thirty_days": "30 Days", - "chat.three_months": "3 Months", + "chat.maximize": "Suurenna", + "chat.seven_days": "7 päivää", + "chat.thirty_days": "30 päivää", + "chat.three_months": "3 kuukautta", "composer.user_said_in": "%1 said in %2:", - "composer.user_said": "%1 said:", - "composer.discard": "Are you sure you wish to discard this post?" + "composer.user_said": "%1 sanoi:", + "composer.discard": "Oletko varma, että haluat hylätä viestin?" } \ No newline at end of file diff --git a/public/language/fi/notifications.json b/public/language/fi/notifications.json index 3a0a4ff25c..2b45a426b6 100644 --- a/public/language/fi/notifications.json +++ b/public/language/fi/notifications.json @@ -2,6 +2,7 @@ "title": "Ilmoitukset", "no_notifs": "Sinulla ei ole uusia ilmoituksia", "see_all": "Katso kaikki ilmoitukset", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "Ulkopuolinen linkki", "outgoing_link_message": "You are now leaving %1.", @@ -11,17 +12,16 @@ "you_have_unread_notifications": "Sinulla on lukemattomia ilmoituksia.", "new_message_from": "Uusi viesti käyttäjältä %1", "upvoted_your_post_in": "%1 has upvoted your post in %2.", - "moved_your_post": "%1 has moved your post.", - "moved_your_topic": "%1 has moved your topic.", + "moved_your_post": "%1 on siirtänyt viestisi.", + "moved_your_topic": "%1 on siirtänyt aiheesi.", "favourited_your_post_in": "%1 has favourited your post in %2.", "user_flagged_post_in": "%1 flagged a post in %2", - "user_posted_to": "%1 has posted a reply to: %2", - "user_posted_topic": "%1 has posted a new topic: %2", - "user_mentioned_you_in": "%1 mentioned you in %2", - "user_started_following_you": "%1 started following you.", + "user_posted_to": "%1 on vastannut viestiin: %2", + "user_posted_topic": "%1 on kirjoittanut uuden aiheen: %2", + "user_mentioned_you_in": "%1 mainitsi sinut viestissä %2", + "user_started_following_you": "%1 alkoi seurata sinua.", "email-confirmed": "Sähköpostiosoite vahvistettu", "email-confirmed-message": "Kiitos sähköpostiosoitteesi vahvistamisesta. Käyttäjätilisi on nyt täysin aktivoitu.", - "email-confirm-error": "Tapahtui virhe...", "email-confirm-error-message": "Ongelma sähköpostiosoitteen vahvistamisessa. Ehkäpä koodi oli virheellinen tai vanhentunut.", "email-confirm-sent": "Vahvistussähköposti lähetetty." } \ No newline at end of file diff --git a/public/language/fi/pages.json b/public/language/fi/pages.json index 22b1b20306..07d941a4dc 100644 --- a/public/language/fi/pages.json +++ b/public/language/fi/pages.json @@ -11,6 +11,7 @@ "user.followers": "Käyttäjät, jotka seuraavat käyttäjää %1", "user.posts": "Käyttäjän %1 kirjoittamat viestit", "user.topics": "Käyttäjän %1 aloittamat aiheet", + "user.groups": "%1's Groups", "user.favourites": "Käyttäjän %1 suosikkiviestit", "user.settings": "Käyttäjän asetukset", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/fi/recent.json b/public/language/fi/recent.json index b2bff39da7..aed5a7a0fd 100644 --- a/public/language/fi/recent.json +++ b/public/language/fi/recent.json @@ -3,7 +3,17 @@ "day": "Päivä", "week": "Viikko", "month": "Kuukausi", - "year": "Year", - "alltime": "All Time", - "no_recent_topics": "Ei viimeisimpiä aiheita." + "year": "Vuosi", + "alltime": "Alusta lähtien", + "no_recent_topics": "Ei viimeisimpiä aiheita.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "Uusi aihe.", + "there-is-a-new-topic-and-a-new-post": "Uusi aihe ja uusi viesti.", + "there-is-a-new-topic-and-new-posts": "Uusi aihe ja %1 uutta viestiä.", + "there-are-new-topics": "%1 uutta aihetta.", + "there-are-new-topics-and-a-new-post": "%1 uutta aihetta ja uusi viesti.", + "there-are-new-topics-and-new-posts": "%1 uutta aihetta ja %2 uutta viestiä.", + "there-is-a-new-post": "Uusi viesti.", + "there-are-new-posts": "%1 uutta viestiä.", + "click-here-to-reload": "Päivitä napsauttamalla tätä." } \ No newline at end of file diff --git a/public/language/fi/reset_password.json b/public/language/fi/reset_password.json index 071287708d..9b523e7e2b 100644 --- a/public/language/fi/reset_password.json +++ b/public/language/fi/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Syötä sähköpostiosoitteesi, niin me lähetämme sinulle sähköpostilla ohjeet käyttäjätilisi palauttamiseksi.", "enter_email_address": "Syötä sähköpostiosoite", "password_reset_sent": "Salasanan palautuskoodi lähetetty", - "invalid_email": "Virheellinen sähköpostiosoite / Sähköpostiosoitetta ei ole olemassa!" + "invalid_email": "Virheellinen sähköpostiosoite / Sähköpostiosoitetta ei ole olemassa!", + "password_too_short": "Salasana on liian lyhyt, käytä pidempää salasanaa.", + "passwords_do_not_match": "Salasana ja sen vahvistus eivät täsmää." } \ No newline at end of file diff --git a/public/language/fi/search.json b/public/language/fi/search.json index e9eef4632a..df7f7a2352 100644 --- a/public/language/fi/search.json +++ b/public/language/fi/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Otsikot", + "titles-posts": "Otsikot ja Viestit", + "posted-by": "Kirjoittanut", + "in-categories": "In Categories", + "search-child-categories": "Hae alikategorioista", + "reply-count": "Vastausten määrä", + "at-least": "Vähintään", + "at-most": "Enintään", + "post-time": "Julkaisuaika", + "newer-than": "Uudemmat kuin", + "older-than": "Vanhemmat kuin", + "any-date": "Mikä tahansa päivä", + "yesterday": "Eilen", + "one-week": "Yksi viikko", + "two-weeks": "Kaksi viikkoa", + "one-month": "Yksi kuukausi", + "three-months": "Kolme kuukautta", + "six-months": "Kuusi kuukautta", + "one-year": "Yksi vuosi", + "sort-by": "Lajitteluperuste", + "last-reply-time": "Vastattu viimeksi", + "topic-title": "Aiheen otsikko", + "number-of-replies": "Vastausten määrä", + "number-of-views": "Katselukertojen määrä", + "topic-start-date": "Aiheen aloituspäivä", + "username": "Käyttäjänimi", + "category": "Kategoria", + "descending": "Laskevassa järjestyksessä", + "ascending": "Nousevassa järjestyksessä", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/fi/tags.json b/public/language/fi/tags.json index d2e9a213ac..3d1cf1271b 100644 --- a/public/language/fi/tags.json +++ b/public/language/fi/tags.json @@ -1,7 +1,7 @@ { - "no_tag_topics": "There are no topics with this tag.", - "tags": "Tags", - "enter_tags_here": "Enter tags here. Press enter after each tag.", - "enter_tags_here_short": "Enter tags...", - "no_tags": "There are no tags yet." + "no_tag_topics": "Ei viimeisimpiä aiheita tällä tagilla.", + "tags": "Tagit", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here_short": "Syötä tagit...", + "no_tags": "Ei vielä yhtään tagia." } \ No newline at end of file diff --git a/public/language/fi/topic.json b/public/language/fi/topic.json index 4417ef2613..d6812a7fa4 100644 --- a/public/language/fi/topic.json +++ b/public/language/fi/topic.json @@ -1,60 +1,61 @@ { "topic": "Aihe", - "topic_id": "Topic ID", - "topic_id_placeholder": "Enter topic ID", + "topic_id": "Aiheen ID", + "topic_id_placeholder": "Syötä aiheen ID", "no_topics_found": "Aiheita ei löytynyt!", "no_posts_found": "Viestejä ei löytynyt!", - "post_is_deleted": "This post is deleted!", + "post_is_deleted": "Tämä viesti poistettiin!", "profile": "Profiili", - "posted_by": "Posted by %1", - "posted_by_guest": "Posted by Guest", + "posted_by": "%1 kirjoitti", + "posted_by_guest": "Vieras kirjoitti", "chat": "Keskustele", "notify_me": "Ilmoita, kun tähän keskusteluun tulee uusia viestejä", "quote": "Lainaa", "reply": "Vastaa", + "guest-login-reply": "Kirjaudu sisään voidaksesi vastata", "edit": "Muokkaa", "delete": "Poista", "purge": "Purge", - "restore": "Restore", + "restore": "Palauta", "move": "Siirrä", "fork": "Haaroita", "link": "Linkitä", "share": "Jaa", "tools": "Työkalut", "flag": "Ilmianna", - "locked": "Locked", + "locked": "Lukittu", "bookmark_instructions": "Click here to return to your last position or close to discard.", "flag_title": "Ilmianna tämä viesti moderaattoreille", - "flag_confirm": "Are you sure you want to flag this post?", - "flag_success": "This post has been flagged for moderation.", - "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", + "flag_confirm": "Oletko varma, että haluat ilmiantaa tämän viestin?", + "flag_success": "Tämä viesti ilmiannettiin moderaattoreille.", + "deleted_message": "Tämä aihe on poistettu. Vain käyttäjät, joilla on aiheen hallintaoikeudet, voivat nähdä sen.", "following_topic.message": "Saat nyt ilmoituksen, kun joku kirjoittaa tähän aiheeseen.", "not_following_topic.message": "Et saa enää ilmoituksia tästä aiheesta.", - "login_to_subscribe": "Please register or log in in order to subscribe to this topic.", - "markAsUnreadForAll.success": "Topic marked as unread for all.", + "login_to_subscribe": "Ole hyvä ja rekisteröidy tai kirjaudu sisään tilataksesi tämän aiheen.", + "markAsUnreadForAll.success": "Aihe merkitty lukemattomaksi kaikille.", "watch": "Tarkkaile", - "unwatch": "Unwatch", - "watch.title": "Be notified of new replies in this topic", - "unwatch.title": "Stop watching this topic", + "unwatch": "Älä seuraa", + "watch.title": "Ilmoita, kun tähän keskusteluun tulee uusia viestejä", + "unwatch.title": "Lopeta tämän aiheen seuraaminen", "share_this_post": "Jaa tämä viesti", - "thread_tools.title": "Topic Tools", + "thread_tools.title": "Aiheen työkalut", "thread_tools.markAsUnreadForAll": "Merkitse lukemattomaksi", "thread_tools.pin": "Kiinnitä aihe", "thread_tools.unpin": "Poista aiheen kiinnitys", "thread_tools.lock": "Lukitse aihe", "thread_tools.unlock": "Poista aiheen lukitus", "thread_tools.move": "Siirrä aihe", - "thread_tools.move_all": "Move All", + "thread_tools.move_all": "Siirrä kaikki", "thread_tools.fork": "Haaroita aihe", "thread_tools.delete": "Poista aihe", - "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", + "thread_tools.delete_confirm": "Haluatko varmasti poistaa tämän aiheen?", "thread_tools.restore": "Palauta aihe", - "thread_tools.restore_confirm": "Are you sure you want to restore this topic?", + "thread_tools.restore_confirm": "Haluatko varmasti palauttaa tämän aiheen?", "thread_tools.purge": "Purge Topic", "thread_tools.purge_confirm": "Are you sure you want to purge this topic?", "topic_move_success": "This topic has been successfully moved to %1", - "post_delete_confirm": "Are you sure you want to delete this post?", - "post_restore_confirm": "Are you sure you want to restore this post?", + "post_delete_confirm": "Haluatko varmasti poistaa tämän viestin?", + "post_restore_confirm": "Haluatko varmasti palauttaa tämän viestin?", "post_purge_confirm": "Are you sure you want to purge this post?", "load_categories": "Ladataan aihealueita", "disabled_categories_note": "Käytöstä poistetut aihealueet ovat harmaina", @@ -74,6 +75,7 @@ "fork_no_pids": "Ei valittuja viestejä!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Syötä aiheesi otsikko tähän...", + "composer.handle_placeholder": "Name", "composer.discard": "Hylkää", "composer.submit": "Lähetä", "composer.replying_to": "Replying to %1", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/fi/user.json b/public/language/fi/user.json index 75ccdad3e3..3f0768bf00 100644 --- a/public/language/fi/user.json +++ b/public/language/fi/user.json @@ -2,10 +2,12 @@ "banned": "Bannattu", "offline": "Offline", "username": "Käyttäjän nimi", + "joindate": "Liittymispäivä", + "postcount": "Viestien määrä", "email": "Sähköposti", - "confirm_email": "Confirm Email", - "delete_account": "Delete Account", - "delete_account_confirm": "Are you sure you want to delete your account?
This action is irreversible and you will not be able to recover any of your data

Enter your username to confirm that you wish to destroy this account.", + "confirm_email": "Vahvista sähköpostiosoite", + "delete_account": "Poista käyttäjätili", + "delete_account_confirm": "Oletko täysin varma, että haluat poistaa käyttäjätilisi?
Tätä toimintoa ei voi kumonta eikä poistettua dataa voida palauttaa

Syötä käyttäjänimesi vahvistaaksesi, että haluat poistaa tilisi.", "fullname": "Koko nimi", "website": "Kotisivu", "location": "Sijainti", @@ -16,6 +18,7 @@ "profile_views": "Profiilia katsottu", "reputation": "Maine", "favourites": "Suosikit", + "watched": "Seurattu", "followers": "Seuraajat", "following": "Seuratut", "signature": "Allekirjoitus", @@ -29,47 +32,49 @@ "edit": "Muokkaa", "uploaded_picture": "Ladattu kuva", "upload_new_picture": "Lataa uusi kuva", - "upload_new_picture_from_url": "Upload New Picture From URL", + "upload_new_picture_from_url": "Lataa uusi kuva URL-osoitteesta", "current_password": "Nykyinen salasana", "change_password": "Vaihda salasana", "change_password_error": "Virheellinen salasana", "change_password_error_wrong_current": "Nykyinen salasanasi ei ole oikein!", "change_password_error_length": "Salasana on liian lyhyt!", "change_password_error_match": "Salasanojen täytyy olla samat!", - "change_password_error_privileges": "You do not have the rights to change this password.", + "change_password_error_privileges": "Sinulla ei ole oikeuksia vaihtaa tätä salasanaa.", "change_password_success": "Salasanasi on päivitetty!", "confirm_password": "Vahvista salasana", "password": "Salasana", - "username_taken_workaround": "The username you requested was already taken, so we have altered it slightly. You are now known as %1", + "username_taken_workaround": "Pyytämäsi käyttäjänimi oli jo varattu, joten muutimme sitä hieman. Käyttäjänimesi on siis nyt %1", "upload_picture": "Lataa kuva", "upload_a_picture": "Lataa kuva", "image_spec": "Voit ladata vain PNG-, JPG- tai GIF-tiedostoja", "max": "max.", "settings": "Asetukset", "show_email": "Näytä sähköpostiosoitteeni", - "show_fullname": "Show My Full Name", - "restrict_chats": "Only allow chat messages from users I follow", + "show_fullname": "Näytä koko nimeni", + "restrict_chats": "Salli pikaviestit vain seuraamiltani käyttäjiltä", "digest_label": "Subscribe to Digest", - "digest_description": "Subscribe to email updates for this forum (new notifications and topics) according to a set schedule", - "digest_off": "Off", - "digest_daily": "Daily", - "digest_weekly": "Weekly", - "digest_monthly": "Monthly", - "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "digest_description": "Tilaa päivitykset sähköpostilla tästä foorumista (uudet ilmoitukset ja aiheet) asetetun ajastuksen mukaan", + "digest_off": "Pois päältä", + "digest_daily": "Päivittäin", + "digest_weekly": "Viikottain", + "digest_monthly": "Kuukausittain", + "send_chat_notifications": "Lähetä minulle sähköposti, jos uusi pikaviesti saapuu, kun en ole paikalla", + "send_post_notifications": "Lähetä minulle sähköposti, kun tilaamiini aiheisiin tulee vastauksia", "has_no_follower": "Kukaan ei seuraa tätä käyttäjää :(", "follows_no_one": "Tämä käyttäjä ei seuraa ketään :(", "has_no_posts": "Tämä käyttäjä ei ole kirjoittanut vielä mitään.", "has_no_topics": "Tämä käyttäjä ei ole kirjoittanut vielä yhtään aihetta.", + "has_no_watched_topics": "Tämä käyttäjä ei seuraa vielä yhtään aihetta.", "email_hidden": "Sähköposti piilotettu", "hidden": "piilotettu", "paginate_description": "Sivuta aiheet ja viestit loputtoman vierittämisen sijaan.", "topics_per_page": "Aihetta per sivu", "posts_per_page": "Viestiä per sivu", "notification_sounds": "Soita merkkiääni ilmoituksen saapuessa.", - "browsing": "Browsing Settings", - "open_links_in_new_tab": "Open outgoing links in new tab?", - "enable_topic_searching": "Enable In-Topic Searching", + "browsing": "Selataan asetuksia", + "open_links_in_new_tab": "Avaa muualle vievät linkit uudessa välilehdessä?", + "enable_topic_searching": "Salli aiheen sisäiset haut", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", - "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_reply_to": "Seuraa aiheita, joihin olen vastannut.", + "follow_topics_you_create": "Seuraa aloittamiani aiheita." } \ No newline at end of file diff --git a/public/language/fi/users.json b/public/language/fi/users.json index 2451c1a4dd..fe90faeaeb 100644 --- a/public/language/fi/users.json +++ b/public/language/fi/users.json @@ -5,5 +5,8 @@ "search": "Hae", "enter_username": "Syötä käyttäjätunnus hakeaksesi", "load_more": "Lataa lisää", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 käyttäjä(ä) löytyi! Haku kesti %2 sekuntia.", + "filter-by": "Suodata", + "online-only": "Vain verkossa olevat", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/fr/category.json b/public/language/fr/category.json index 63450150f5..98a8ae2b90 100644 --- a/public/language/fr/category.json +++ b/public/language/fr/category.json @@ -1,5 +1,6 @@ { - "new_topic_button": "Nouveau Sujet", + "new_topic_button": "Nouveau sujet", + "guest-login-post": "Se connecter pour poster", "no_topics": "Il n'y a aucun sujet dans cette catégorie.
Pourquoi ne pas en créer un ?", "browsing": "parcouru par", "no_replies": "Personne n'a répondu", diff --git a/public/language/fr/email.json b/public/language/fr/email.json index 03d1face80..a3b80ecd21 100644 --- a/public/language/fr/email.json +++ b/public/language/fr/email.json @@ -9,6 +9,9 @@ "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.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 :", "digest.latest_topics": "Derniers sujets de %1 :", "digest.cta": "Cliquez ici pour aller sur %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "Nouveau message de chat reçu de %1", "notif.chat.cta": "Cliquez ici pour continuer la conversation", "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.", "unsub.cta": "Cliquez ici pour modifier ces paramètres", "closing": "Merci !" diff --git a/public/language/fr/error.json b/public/language/fr/error.json index ed18ca989b..51f03aa33f 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -17,7 +17,10 @@ "invalid-pagination-value": "Valeur de pagination invalide", "username-taken": "Nom d’utilisateur déjà utilisé", "email-taken": "Email déjà utilisé", - "email-not-confirmed": "Votre adresse email n'est pas confirmée, cliquer ici pour la valider.", + "email-not-confirmed": "Votre adresse email n'est pas confirmée, cliquez ici pour la valider.", + "email-not-confirmed-chat": "Vous ne pouver discuter tant que votre email n'est pas confirmé", + "no-email-to-confirm": "Ce forum requiert une vérification de votre adresse email. Veuillez cliquer ici pour entrer une adresse.", + "email-confirm-failed": "Votre adresse email n'a pas pu être vérifiée. Veuillez ré-essayer plus tard.", "username-too-short": "Nom d'utilisateur trop court", "username-too-long": "Nom d'utilisateur trop long", "user-banned": "Utilisateur banni", @@ -32,21 +35,29 @@ "no-emailers-configured": "Un email de test n'a pas pu être envoyé car aucun plugin de gestion des emails n'était chargé", "category-disabled": "Catégorie désactivée", "topic-locked": "Sujet verrouillé", + "post-edit-duration-expired": "Vous ne pouvez modifier un post que %1 secondes après l'avoir posté.", "still-uploading": "Veuillez patienter pendant le téléchargement.", "content-too-short": "Veuillez entrer un message plus long. %1 caractères minimum.", + "content-too-long": "Veuillez poster un message plus cours. Les messages ne peuvent être plus long que %1 caractères.", "title-too-short": "Veuillez entrer un titre plus long. %1 caractères minimum.", "title-too-long": "Veuillez entrer un titre plus court. Les titres ne peuvent excéder %1 caractères.", "too-many-posts": "Vous ne pouvez poster que toutes les %1 secondes.", "too-many-posts-newbie": "En tant que nouvel utilisateur, vous ne pouvez poster que toutes les %1 secondes jusqu'à ce que vous obteniez une réputation de %2 - patientez avant de publier de nouveau. ", + "tag-too-short": "Veuillez entrer un mot-clé plus long. Les mots-clés devraient contenir au moins %1 caractères.", + "tag-too-long": "Veuillez entrer un mot-clé plus court. Les mot-clés ne peuvent faire plus de %1 caractères.", "file-too-big": "La taille maximum des fichiers est de %1 kbs.", "cant-vote-self-post": "Vous ne pouvez pas voter pour vos propres messages", "already-favourited": "Vous avez déjà mis ce message en favoris", "already-unfavourited": "Vous avez déjà retiré ce message des favoris", "cant-ban-other-admins": "Vous ne pouvez pas bannir les autres administrateurs !", - "invalid-image-type": "Type d’image invalide", + "invalid-image-type": "Type d'image invalide. Les types autorisés sont: %1", + "invalid-image-extension": "Extension d'image invalide", + "invalid-file-type": "Type de fichier non valide. Les types autorisés sont : %1", "group-name-too-short": "Nom de groupe trop court", "group-already-exists": "Ce groupe existe déjà", "group-name-change-not-allowed": "Modification du nom de groupe non permise", + "group-already-member": "Vous faites déjà parti de ce groupe", + "group-needs-owner": "Ce groupe nécessite au moins un propriétaire", "post-already-deleted": "Message déjà supprimé", "post-already-restored": "Message déjà restauré", "topic-already-deleted": "Sujet déjà supprimé", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Les miniatures de sujet sont désactivés", "invalid-file": "Fichier invalide", "uploads-are-disabled": "Les envois sont désactivés", - "upload-error": "Erreur d'envoi : %1", "signature-too-long": "La signature ne peut dépasser %1 caractères !", "cant-chat-with-yourself": "Vous ne pouvez chatter avec vous même !", "chat-restricted": "Cet utilisateur a restreint les ses messages de chat. Il doit d'abord vous suivre avant de pouvoir discuter avec lui.", + "too-many-messages": "Vous avez envoyé trop de messages, veuillez patienter un instant.", "reputation-system-disabled": "Le système de réputation est désactivé", "downvoting-disabled": "Les votes négatifs ne sont pas autorisés", "not-enough-reputation-to-downvote": "Vous n'avez pas une réputation assez élevée pour noter négativement ce message", "not-enough-reputation-to-flag": "Vous n'avez pas une réputation assez élevée pour signaler ce message", "reload-failed": "NodeBB a rencontré un problème lors du rechargement : \"% 1\" . NodeBB continuera de fonctionner côté client, même si vous devez annuler ce que vous avez fait juste avant de recharger .", - "registration-error": "Erreur d'enregistrement" + "registration-error": "Erreur d'enregistrement", + "parse-error": "Une erreur est survenue en analysant la réponse du serveur", + "wrong-login-type-email": "Veuillez utiliser votre adresse email pour vous connecter", + "wrong-login-type-username": "Veuillez utiliser votre identifiant pour vous connecter" } \ No newline at end of file diff --git a/public/language/fr/global.json b/public/language/fr/global.json index ad4008e6b5..d09ab26cfc 100644 --- a/public/language/fr/global.json +++ b/public/language/fr/global.json @@ -3,9 +3,10 @@ "search": "Recherche", "buttons.close": "Fermer", "403.title": "Accès refusé", - "403.message": "Il semble que vous vous soyez retrouvé sur une page à laquelle vous n'avez pas accès. Vous devriez peut-être essayer de vous connecter ?", + "403.message": "Il semble que vous ayez atteint une page à laquelle vous n'avez pas accès.", + "403.login": "Peut-être deviez vous essayer de vous connecter?", "404.title": "Introuvable", - "404.message": "Il semble que vous vous soyez retrouvés sur une page qui n'existe pas. Retourner à l'accueil.", + "404.message": "Il semble que vous ayez atteint une page qui n'existe pas. Retourner à la page d'accueil.", "500.title": "Erreur interne.", "500.message": "Oops ! Il semblerait que quelque chose se soit mal passé !", "register": "S'inscrire", @@ -13,7 +14,7 @@ "please_log_in": "Veuillez vous connecter", "logout": "Déconnexion", "posting_restriction_info": "L'envoi de messages est réservé aux membres inscrits, cliquez ici pour vous connecter.", - "welcome_back": "Bon retour", + "welcome_back": "Bienvenue", "you_have_successfully_logged_in": "Vous vous êtes bien connecté", "save_changes": "Enregistrer les changements", "close": "Fermer", @@ -23,14 +24,15 @@ "header.admin": "Admin", "header.recent": "Récent", "header.unread": "Non lu", - "header.tags": "Tags", + "header.tags": "Mots-clés", "header.popular": "Populaire", "header.users": "Utilisateurs", + "header.groups": "Groupes", "header.chats": "Chats", "header.notifications": "Notifications", "header.search": "Recherche", "header.profile": "Profil", - "notifications.loading": "Chargement des Notifications", + "notifications.loading": "Chargement des notifications", "chats.loading": "Chargement des chats", "motd.welcome": "Bienvenue sur NodeBB, la plate-forme de discussion du futur.", "previouspage": "Page précédente", @@ -73,5 +75,7 @@ "updated.title": "Forum mis à jour", "updated.message": "Ce forum a été mis à jour à la dernière version. Cliquez ici pour recharger la page.", "privacy": "Vie privée", - "delete_all": "Supprimer Tout" + "follow": "S'abonner", + "unfollow": "Se désabonner", + "delete_all": "Tout supprimer" } \ No newline at end of file diff --git a/public/language/fr/groups.json b/public/language/fr/groups.json index 723db5ebb5..ce980d472e 100644 --- a/public/language/fr/groups.json +++ b/public/language/fr/groups.json @@ -1,8 +1,34 @@ { "groups": "Groupes", "view_group": "Voir le groupe", + "owner": "Propriétaire du groupe", + "new_group": "Créer un nouveau groupe", + "no_groups_found": "Il n'y a aucun groupe", + "pending.accept": "Accepter", + "pending.reject": "Refuser", + "cover-instructions": "Glissez-déposez une image, ajustez la position, et cliquez sur Enregistrer", + "cover-change": "Modifier", + "cover-save": "Enregistrer", + "cover-saving": "Enregistrement", "details.title": "Informations du groupe", "details.members": "Liste des membres", - "details.has_no_posts": "Ce membre du groupe n'a envoyé aucun message.", - "details.latest_posts": "Derniers messages" + "details.pending": "Membres en attente", + "details.has_no_posts": "Les membres de ce groupe n'ont envoyé aucun message.", + "details.latest_posts": "Derniers messages", + "details.private": "Privé", + "details.grant": "Promouvoir/rétrograder comme propriétaire", + "details.kick": "Exclure", + "details.owner_options": "Administration du groupe", + "details.group_name": "Nom du groupe", + "details.description": "Description", + "details.badge_preview": "Aperçu du badge", + "details.change_icon": "Modifier l'icône", + "details.change_colour": "Modifier la couleur", + "details.badge_text": "Texte du badge", + "details.userTitleEnabled": "Afficher le badge", + "details.private_help": "Si cette case est cochée, rejoindre un groupe nécessite l'accord d'un propriétaire du groupe.", + "details.hidden": "Masqué", + "details.hidden_help": "Si cette case est cochée, ce groupe n'est pas affiché dans la liste des groupes, et les utilisateurs devront être invités manuellement.", + "event.updated": "Les détails du groupe ont été mis à jour", + "event.deleted": "Le groupe é%1\" a été supprimé" } \ No newline at end of file diff --git a/public/language/fr/login.json b/public/language/fr/login.json index 39978db58b..6470717691 100644 --- a/public/language/fr/login.json +++ b/public/language/fr/login.json @@ -1,5 +1,7 @@ { - "username": "Nom d'utilisateur / Email", + "username-email": "Identifiant ou email", + "username": "Identifiant", + "email": "Email", "remember_me": "Se souvenir de moi ?", "forgot_password": "Mot de passe oublié ?", "alternative_logins": "Autres méthodes de connexion", diff --git a/public/language/fr/modules.json b/public/language/fr/modules.json index 054c1c70f8..c472c6b402 100644 --- a/public/language/fr/modules.json +++ b/public/language/fr/modules.json @@ -1,11 +1,11 @@ { "chat.chatting_with": "Discuter avec ", - "chat.placeholder": "Taper votre message ici, appuyer sur Entrer pour envoyer", + "chat.placeholder": "Tapez votre message ici, appuyez sur Entrer pour envoyer", "chat.send": "Envoyer", "chat.no_active": "Vous n'avez aucune discussion en cours.", "chat.user_typing": "%1 est en train d'écrire ...", "chat.user_has_messaged_you": "%1 vous a envoyé un message.", - "chat.see_all": "Voir toutes les Discussions", + "chat.see_all": "Voir toutes les discussions", "chat.no-messages": "Veuillez sélectionner un destinataire pour voir l'historique des discussions", "chat.recent-chats": "Discussions récentes", "chat.contacts": "Contacts", diff --git a/public/language/fr/notifications.json b/public/language/fr/notifications.json index 597388efdb..e6c533a20e 100644 --- a/public/language/fr/notifications.json +++ b/public/language/fr/notifications.json @@ -2,6 +2,7 @@ "title": "Notifications", "no_notifs": "Vous n'avez aucune notification", "see_all": "Voir toutes les notifications.", + "mark_all_read": "Marquer toutes les notifications comme lues", "back_to_home": "Revenir à %1", "outgoing_link": "Lien sortant", "outgoing_link_message": "Vous quittez %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 vous suit.", "email-confirmed": "Email vérifié", "email-confirmed-message": "Merci pour la validation de votre adresse email. Votre compte est désormais activé.", - "email-confirm-error": "Un erreur est survenue ...", "email-confirm-error-message": "Il y a un un problème dans la vérification de votre adresse email. Le code est peut être invalide ou a expiré.", "email-confirm-sent": "Email de vérification envoyé." } \ No newline at end of file diff --git a/public/language/fr/pages.json b/public/language/fr/pages.json index 1085bcfc21..7698a55986 100644 --- a/public/language/fr/pages.json +++ b/public/language/fr/pages.json @@ -11,6 +11,7 @@ "user.followers": "Personnes qui suivent %1", "user.posts": "Message écrit par %1", "user.topics": "Sujets créés par %1", + "user.groups": "Les Groupes de %1", "user.favourites": "Messages favoris de %1", "user.settings": "Préférences utilisateur", "maintenance.text": "%1 est en maintenance. Veuillez revenir un peu plus tard.", diff --git a/public/language/fr/recent.json b/public/language/fr/recent.json index defd933cfb..6103856ee0 100644 --- a/public/language/fr/recent.json +++ b/public/language/fr/recent.json @@ -5,5 +5,15 @@ "month": "Mois", "year": "An", "alltime": "Toujours", - "no_recent_topics": "Il n'y a aucun sujet récent." + "no_recent_topics": "Il n'y a aucun sujet récent.", + "no_popular_topics": "Il n'y a pas de sujet populaire.", + "there-is-a-new-topic": "Il y a un nouveau sujet.", + "there-is-a-new-topic-and-a-new-post": "Il y a un nouveau sujet et un nouveau message.", + "there-is-a-new-topic-and-new-posts": "Il y a un nouveau sujet et %1 nouveaux messages.", + "there-are-new-topics": "Il y a %1 nouveaux sujets.", + "there-are-new-topics-and-a-new-post": "Il y a %1 nouveaux sujets et un nouveau message.", + "there-are-new-topics-and-new-posts": "Il y a %1 nouveaux sujets et %2 nouveaux messages.", + "there-is-a-new-post": "Il y a un nouveau message.", + "there-are-new-posts": "Il y a %1 nouveaux messages.", + "click-here-to-reload": "Cliquer ici pour recharger." } \ No newline at end of file diff --git a/public/language/fr/reset_password.json b/public/language/fr/reset_password.json index 00e531a9c4..f21186c870 100644 --- a/public/language/fr/reset_password.json +++ b/public/language/fr/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Veuillez entrer votre adresse email pour recevoir un email contenant les instructions permettant de réinitialiser votre compte.", "enter_email_address": "Entrer votre adresse email", "password_reset_sent": "La demande de réinitialisation du mot de passe a bien été envoyée", - "invalid_email": "Email invalide / L'email n'existe pas !" + "invalid_email": "Email invalide / L'email n'existe pas !", + "password_too_short": "Le mot de passe est trop court, veuillez entre un mot de passe différent.", + "passwords_do_not_match": "Les deux mots de passe saisient ne correspondent pas." } \ No newline at end of file diff --git a/public/language/fr/search.json b/public/language/fr/search.json index 02179757c4..f05eec953d 100644 --- a/public/language/fr/search.json +++ b/public/language/fr/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 résultat(s) correspondant(s) à \"%2\", (%3 secondes)", - "no-matches": "Aucun message trouvé!" + "no-matches": "Aucune réponse trouvée", + "in": "Dans", + "by": "Par", + "titles": "Titres", + "titles-posts": "Titres et Messages", + "posted-by": "Posté par", + "in-categories": "Dans les catégories", + "search-child-categories": "Chercher les sous catégories", + "reply-count": "Nombre de réponses", + "at-least": "Au moins", + "at-most": "Au plus", + "post-time": "Date de message", + "newer-than": "Plus récent que", + "older-than": "Plus vieux que", + "any-date": "Toute date", + "yesterday": "Hier", + "one-week": "Une semaine", + "two-weeks": "Deux semaines", + "one-month": "Un mois", + "three-months": "Trois mois", + "six-months": "Six mois", + "one-year": "Un an", + "sort-by": "Trier par", + "last-reply-time": "Date de dernière réponse", + "topic-title": "Titre de sujet", + "number-of-replies": "Nombre de réponses", + "number-of-views": "Nombre de vues", + "topic-start-date": "Date de création du sujet", + "username": "Nom d'utilisateur", + "category": "Catégorie", + "descending": "Par ordre décroissant", + "ascending": "Par ordre croissant", + "save-preferences": "Enregistrer les préférences", + "clear-preferences": "Réinitialiser les préférences", + "search-preferences-saved": "Préférences de recherche enregistrées", + "search-preferences-cleared": "Préférences de recherche réinitialisées", + "show-results-as": "Affichez les résultats comme" } \ No newline at end of file diff --git a/public/language/fr/tags.json b/public/language/fr/tags.json index 20bd5dccee..ef226f2efe 100644 --- a/public/language/fr/tags.json +++ b/public/language/fr/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Il n'y a aucun sujet ayant ce mot-clé", "tags": "Mots-clés", - "enter_tags_here": "Entrez les mots-clés ici. Appuyez sur entrer après chaque mot-clé.", - "enter_tags_here_short": "Entrez des tags...", + "enter_tags_here": "Entrez les mots-clés ici. %1-%2 caractères. Tapez sur \"Entrée\" après chaque mot-clé.", + "enter_tags_here_short": "Entrez des mots-clés...", "no_tags": "Il n'y a pas encore de mots-clés." } \ No newline at end of file diff --git a/public/language/fr/topic.json b/public/language/fr/topic.json index 1473a37136..8248eb2580 100644 --- a/public/language/fr/topic.json +++ b/public/language/fr/topic.json @@ -12,7 +12,8 @@ "notify_me": "Être notifié des réponses dans ce sujet", "quote": "Citer", "reply": "Répondre", - "edit": "Editer", + "guest-login-reply": "Se connecter pour répondre", + "edit": "Éditer", "delete": "Supprimer", "purge": "Supprimer définitivement", "restore": "Restaurer", @@ -39,7 +40,7 @@ "share_this_post": "Partager ce message", "thread_tools.title": "Outils pour sujets", "thread_tools.markAsUnreadForAll": "Marquer comme non lu", - "thread_tools.pin": "Epingler le sujet", + "thread_tools.pin": "Épingler le sujet", "thread_tools.unpin": "Désépingler le sujet", "thread_tools.lock": "Verrouiller le sujet", "thread_tools.unlock": "Déverouiller le sujet", @@ -60,9 +61,9 @@ "disabled_categories_note": "Les catégories désactivées sont grisées", "confirm_move": "Déplacer", "confirm_fork": "Scinder", - "favourite": "Favoris", + "favourite": "Favori", "favourites": "Favoris", - "favourites.has_no_favourites": "Vous n'avez aucun favoris, mettez des messages en favoris pour les voir ici !", + "favourites.has_no_favourites": "Vous n'avez aucun favori, mettez des messages en favoris pour les voir ici !", "loading_more_posts": "Charger plus de messages", "move_topic": "Déplacer le sujet", "move_topics": "Déplacer des sujets", @@ -72,19 +73,20 @@ "topic_will_be_moved_to": "Ce sujet sera déplacé vers la catégorie", "fork_topic_instruction": "Cliquez sur les postes à scinder", "fork_no_pids": "Aucun post sélectionné !", - "fork_success": "Sujet copié avec succès! Cliquez ici pour aller au sujet copié.", - "composer.title_placeholder": "Entrer le titre du sujet ici ...", + "fork_success": "Sujet copié avec succès ! Cliquez ici pour aller au sujet copié.", + "composer.title_placeholder": "Entrer le titre du sujet ici…", + "composer.handle_placeholder": "Nom", "composer.discard": "Abandonner", "composer.submit": "Envoyer", "composer.replying_to": "Réponse à %1", "composer.new_topic": "Nouveau sujet", - "composer.uploading": "envoi en cours ...", + "composer.uploading": "envoi en cours…", "composer.thumb_url_label": "Coller une URL de vignette du sujet", "composer.thumb_title": "Ajouter une vignette à ce sujet", "composer.thumb_url_placeholder": "http://exemple.com/vignette.png", "composer.thumb_file_label": "Ou envoyer un fichier", "composer.thumb_remove": "Effacer les champs", - "composer.drag_and_drop_images": "Glisser-déposer les images ici", + "composer.drag_and_drop_images": "Glissez-déposez les images ici", "more_users_and_guests": "%1 autre(s) utilisateur(s) et %2 invité(s)", "more_users": "%1 autre(s) utilisateur(s)", "more_guests": "%1 autre(s) invité(s)", @@ -92,5 +94,6 @@ "sort_by": "Trier", "oldest_to_newest": "Du plus ancien au plus récent", "newest_to_oldest": "Du plus récent au plus ancien", - "most_votes": "Les mieux notés" + "most_votes": "Les mieux notés", + "most_posts": "Nombre de messages" } \ No newline at end of file diff --git a/public/language/fr/user.json b/public/language/fr/user.json index 8ac19c92bf..8786929c78 100644 --- a/public/language/fr/user.json +++ b/public/language/fr/user.json @@ -2,6 +2,8 @@ "banned": "Banni", "offline": "Hors-ligne", "username": "Nom d'utilisateur", + "joindate": "Date d'adhésion", + "postcount": "Nombre de messages", "email": "Email", "confirm_email": "Confirmer l'adresse email", "delete_account": "Supprimer le compte", @@ -16,6 +18,7 @@ "profile_views": "Vues", "reputation": "Réputation", "favourites": "Favoris", + "watched": "Suivis", "followers": "Abonnés", "following": "Abonnements", "signature": "Signature", @@ -26,7 +29,7 @@ "unfollow": "Se désabonner", "profile_update_success": "Le profil a bien été mis à jour !", "change_picture": "Changer d'image", - "edit": "Editer", + "edit": "Éditer", "uploaded_picture": "Image envoyée", "upload_new_picture": "Envoyer une nouvelle image", "upload_new_picture_from_url": "Envoyer une nouvelle image depuis un URL", @@ -41,7 +44,7 @@ "confirm_password": "Confirmer le mot de passe", "password": "Mot de passe", "username_taken_workaround": "Le nom d'utilisateur désiré est déjà utilisé, nous l'avons donc légèrement modifié. Vous êtes maintenant connu comme %1", - "upload_picture": "Envoyer une image", + "upload_picture": "Envoyer l'image", "upload_a_picture": "Envoyer une image", "image_spec": "Vous ne pouvez envoyer que des fichiers PNG, JPG ou GIF", "max": "max.", @@ -56,10 +59,12 @@ "digest_weekly": "Hebdomadaire", "digest_monthly": "Mensuel", "send_chat_notifications": "Envoyer un e-mail si un nouveau message de chat arrive lorsque je ne suis pas en ligne", + "send_post_notifications": "Envoyer un email lors de réponses envoyées aux sujets auxquels je suis abonné.", "has_no_follower": "Cet utilisateur n'est suivi par personne :(", "follows_no_one": "Cet utilisateur ne suit personne :(", "has_no_posts": "Ce membre n'a rien posté pour le moment", "has_no_topics": "L’utilisateur n'a pas encore créé de sujet.", + "has_no_watched_topics": "Cet utilisateur ne suis encore aucun sujet.", "email_hidden": "Email masqué", "hidden": "masqué", "paginate_description": "Utiliser la pagination des sujets et des messages au lieu du défilement infini.", diff --git a/public/language/fr/users.json b/public/language/fr/users.json index e6c64004b4..3467b5b864 100644 --- a/public/language/fr/users.json +++ b/public/language/fr/users.json @@ -5,5 +5,8 @@ "search": "Rechercher", "enter_username": "Entrer un nom d'utilisateur pour rechercher", "load_more": "Charger la suite", - "users-found-search-took": "%1 utilisateur(s) trouvé(s) ! Recherche effectuée en %2 ms." + "users-found-search-took": "%1 utilisateur(s) trouvé(s)! La recherche a pris %2 secondes.", + "filter-by": "Filtrer par", + "online-only": "En ligne uniquement", + "picture-only": "Avec image uniquement" } \ No newline at end of file diff --git a/public/language/he/category.json b/public/language/he/category.json index bc5e530729..66e87dd4e3 100644 --- a/public/language/he/category.json +++ b/public/language/he/category.json @@ -1,8 +1,9 @@ { "new_topic_button": "נושא חדש", + "guest-login-post": "Log in to post", "no_topics": "קטגוריה זו ריקה מנושאים.
למה שלא תנסה להוסיף נושא חדש?", "browsing": "צופים בנושא זה כעת", "no_replies": "אין תגובות", "share_this_category": "שתף קטגוריה זו", - "ignore": "Ignore" + "ignore": "התעלם" } \ No newline at end of file diff --git a/public/language/he/email.json b/public/language/he/email.json index fdbfb006c6..8743ba21d8 100644 --- a/public/language/he/email.json +++ b/public/language/he/email.json @@ -1,23 +1,28 @@ { - "password-reset-requested": "Password Reset Requested - %1!", - "welcome-to": "Welcome to %1", - "greeting_no_name": "Hello", - "greeting_with_name": "Hello %1", - "welcome.text1": "Thank you for registering with %1!", - "welcome.text2": "To fully activate your account, we need to verify that you own the email address you registered with.", - "welcome.cta": "Click here to confirm your email address", - "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", - "reset.text2": "To continue with the password reset, please click on the following link:", - "reset.cta": "Click here to reset your password", - "digest.notifications": "You have unread notifications from %1:", - "digest.latest_topics": "Latest topics from %1", - "digest.cta": "Click here to visit %1", - "digest.unsub.info": "This digest was sent to you due to your subscription settings.", - "digest.no_topics": "There have been no active topics in the past %1", - "notif.chat.subject": "New chat message received from %1", - "notif.chat.cta": "Click here to continue the conversation", - "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", - "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", - "unsub.cta": "Click here to alter those settings", - "closing": "Thanks!" + "password-reset-requested": "בקשת איפוס הסיסמה נשלחה - %1!", + "welcome-to": "ברוכים הבאים ל%1", + "greeting_no_name": "שלום", + "greeting_with_name": "שלום %1", + "welcome.text1": "תודה שנרשמת ל%1!", + "welcome.text2": "על מנת להפעיל את החשבון שלך, אנו צריכים לוודא שאתה בעל חשבון המייל שנרשמת איתו.", + "welcome.cta": "לחץ כאן על מנת לאשר את כתובת המייל שלך.", + "reset.text1": "קיבלנו בקשה לאפס את הסיסמה לחשבון שלך, כנראה מפני ששכחת אותה. אם לא ביקשת לאפס את הסיסמה, אנא התעלם ממייל זה.", + "reset.text2": "על מנת להמשיך עם תהליך איפוס הסיסמה, אנא לחץ על הלינק הבא:", + "reset.cta": "לחץ כאן לאפס את הסיסמה שלך.", + "reset.notify.subject": "הסיסמה שונתה בהצלחה.", + "reset.notify.text1": "אנו מודיעים לך שב%1, סיסמתך שונתה בהצלחה.", + "reset.notify.text2": "אם לא אישרת בקשה זו, אנא הודע למנהל מיד.", + "digest.notifications": "יש לך התראה שלא נקראה מ%1:", + "digest.latest_topics": "נושאים אחרונים מ%1", + "digest.cta": "לחץ כאן כדי לבקר ב %1", + "digest.unsub.info": "תקציר זה נשלח אליך על-פי הגדרות החשבון שלך.", + "digest.no_topics": "אין נושאים פעילים ב%1 האחרון/ים", + "notif.chat.subject": "הודעת צ'אט חדשה התקבלה מ%1", + "notif.chat.cta": "לחץ כאן כדי להמשיך את השיחה", + "notif.chat.unsub.info": "התראה הצ'אט הזו נשלחה אליך על-פי הגדרות החשבון שלך.", + "notif.post.cta": "לחץ כאן בשביל לקרוא את כל הנושא", + "notif.post.unsub.info": "התראת הפוסט הזו נשלחה אליך על-פי הגדרות החשבון שלך.", + "test.text1": "זהו אימייל ניסיון על מנת לוודא שהגדרות המייל בוצעו כהלכה בהגדרות NodeBB.", + "unsub.cta": "לחץ כאן לשנות הגדרות אלו", + "closing": "תודה!" } \ No newline at end of file diff --git a/public/language/he/error.json b/public/language/he/error.json index 2a57b2e78d..d6f29ea755 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -12,56 +12,70 @@ "invalid-title": "כותרת שגויה", "invalid-user-data": "מידע משתמש שגוי", "invalid-password": "סיסמא שגויה", - "invalid-username-or-password": "Please specify both a username and password", - "invalid-search-term": "Invalid search term", + "invalid-username-or-password": "אנא הגדר שם משתמש וסיסמה", + "invalid-search-term": "מילת חיפוש לא תקינה", "invalid-pagination-value": "ערך דפדוף שגוי", "username-taken": "שם משתמש תפוס", "email-taken": "כתובת אימייל תפוסה", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed": "כתובת המייל שלך עוד לא אושרה, לחץ כאן על-מנת לאשר את המייל שלך.", + "email-not-confirmed-chat": "לא תוכל לדבר בצ'אט עד שלא תאשר את כתובת המייל שלך", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "שם משתמש קצר מדי", - "username-too-long": "Username too long", + "username-too-long": "שם משתמש ארוך מדי", "user-banned": "המשתמש חסום", - "user-too-new": "Sorry, you are required to wait %1 seconds before making your first post", - "no-category": "Category does not exist", - "no-topic": "Topic does not exist", - "no-post": "Post does not exist", - "no-group": "Group does not exist", - "no-user": "User does not exist", - "no-teaser": "Teaser does not exist", - "no-privileges": "You do not have enough privileges for this action.", - "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", + "user-too-new": "מצטערים, אתה צריך לחכות %1 שניות לפני שתוכל לפרסם את הפוסט הראשון שלך", + "no-category": "קטגוריה אינה קיימת", + "no-topic": "נושא אינו קיים", + "no-post": "פוסט אינו קיים", + "no-group": "קבוצה אינה קיימת", + "no-user": "משתמש אינו קיים", + "no-teaser": "תקציר אינו קיים", + "no-privileges": "ההרשאות שלך אינן מספיקות לביצוע פעולה זו", + "no-emailers-configured": "לא נמצאו פלאגינים למייל, לכן אין אפשרות לשלוח מייל ניסיון.", "category-disabled": "קטגוריה לא פעילה", "topic-locked": "נושא נעול", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "אנא המתן לסיום ההעלאות", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", + "content-too-short": "יש להכניס פוסט ארוך יותר. פוסטים חייבים להכיל לפחות %1 תווים.", + "content-too-long": "יש לקצר את הפוסט. פוסטים אינם יכולים להיות ארוכים מ %1 תווים.", + "title-too-short": "יש להכניס כותרת ארוכה יותר. כותרות חייבות להכיל לפחות %1 תווים.", "title-too-long": "יש לקצר את הכותרת. כותרות אינן יכולות להיות ארוכות מ %1 תווים.", - "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", - "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", + "too-many-posts": "אתה יכול להעלות פוסט כל %1 שניות בלבד - אנא המתן.", + "too-many-posts-newbie": "כמשתמש חדש, אתה יכול להעלות פוסט כל %1 שניות עד שצברת %2 מוניטין - אנא המתן.", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", + "file-too-big": "גודל קובץ מקסימלי הינו %1 קילובייט - אנא העלה קובץ קטן יותר.", "cant-vote-self-post": "לא ניתן להצביע לפוסט שלך", - "already-favourited": "You have already favourited this post", - "already-unfavourited": "You have already unfavourited this post", + "already-favourited": "כבר הוספת פוסט זה למועדפים", + "already-unfavourited": "כבר הסרת פוסט זה מהמועדפים", "cant-ban-other-admins": "אינך יכול לחסום מנהלים אחרים!", - "invalid-image-type": "סוג תמונה לא תקין", + "invalid-image-type": "פורמט תמונה לא תקין. הפורמטים המורשים הם: %1", + "invalid-image-extension": "פורמט תמונה לא תקין", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "שם הקבוצה קצר מדי", "group-already-exists": "הקבוצה כבר קיימת", "group-name-change-not-allowed": "לא ניתן לשנות את שם הקבוצה", - "post-already-deleted": "This post has already been deleted", - "post-already-restored": "This post has already been restored", - "topic-already-deleted": "This topic has already been deleted", - "topic-already-restored": "This topic has already been restored", + "group-already-member": "אתה כבר חבר בקבוצה זו", + "group-needs-owner": "קבוצה זו חייבת לפחות מנהל אחד", + "post-already-deleted": "פוסט זה כבר נמחק", + "post-already-restored": "פוסט זה כבר שוחזר", + "topic-already-deleted": "נושא זה כבר נמחק", + "topic-already-restored": "נושא זה כבר שוחזר", "topic-thumbnails-are-disabled": "תמונות ממוזערות לנושא אינן מאופשרות.", "invalid-file": "קובץ לא תקין", "uploads-are-disabled": "העלאת קבצים אינה מאופשרת", - "upload-error": "שגיאה בהעלאה : %1", - "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", + "signature-too-long": "מצטערים, אורך החתימה המקסימלי הוא %1 תווים.", "cant-chat-with-yourself": "לא ניתן לעשות צ'אט עם עצמך!", - "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", - "reputation-system-disabled": "Reputation system is disabled.", - "downvoting-disabled": "Downvoting is disabled", + "chat-restricted": "משתמש זה חסם את הודעות הצ'אט שלו ממשתמשים זרים. המשתמש חייב לעקוב אחריך לפני שתוכל לשוחח איתו בצ'אט", + "too-many-messages": "שלחת יותר מדי הודעות, אנא המתן לזמן מה.", + "reputation-system-disabled": "מערכת המוניטין לא פעילה.", + "downvoting-disabled": "היכולת להצביע נגד לא פעילה", "not-enough-reputation-to-downvote": "אין לך מספיק מוניטין כדי להוריד את הדירוג של פוסט זה", - "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", - "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "not-enough-reputation-to-flag": "אין לך מוניטין מספק על מנת לסמן את הפוסט הזה", + "reload-failed": "אירעה תקלה ב NodeBB בזמן הטעינה של: \"%1\". המערכת תמשיך להגיש דפים קיימים, אבל כדאי שתשחזר את הפעולות שלך מהפעם האחרונה שהמערכת עבדה כראוי.", + "registration-error": "שגיאה בהרשמה", + "parse-error": "אירעה שגיאה בעת בעת ניתוח תגובת השרת", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/he/global.json b/public/language/he/global.json index d916ce7dca..da7f284644 100644 --- a/public/language/he/global.json +++ b/public/language/he/global.json @@ -3,9 +3,10 @@ "search": "חיפוש", "buttons.close": "סגור", "403.title": "גישה נדחתה", - "403.message": "נראה שהגעת לעמוד שאין לך הרשאה לצפות בו. נסה להתחבר?", + "403.message": "נראה שהגעת לעמוד שאין לך הרשאה לצפות בו", + "403.login": "נסה להתחבר.", "404.title": "לא נמצא", - "404.message": "נראה שהגעת לעמוד שאינו קיים. חזור לדף הבית.", + "404.message": "נראה שהגעת לעמוד שלא קיים. חזור לעמוד הבית", "500.title": "שגיאה פנימית.", "500.message": "אופס! נראה שמשהו השתבש!", "register": "הרשמה", @@ -26,6 +27,7 @@ "header.tags": "תגיות", "header.popular": "פופולרי", "header.users": "משתמשים", + "header.groups": "קבוצות", "header.chats": "צ'אטים", "header.notifications": "התראות", "header.search": "חיפוש", @@ -72,6 +74,8 @@ "guests": "אורחים", "updated.title": "הפורום עודכן", "updated.message": "הפורום עודכן לגרסא האחרונה. נא ללחוץ כאן לעדכון הדף.", - "privacy": "Privacy", - "delete_all": "Delete All" + "privacy": "פרטיות", + "follow": "עקוב", + "unfollow": "הפסק לעקוב", + "delete_all": "מחק הכל" } \ No newline at end of file diff --git a/public/language/he/groups.json b/public/language/he/groups.json index bf69c732b0..a6bcffab82 100644 --- a/public/language/he/groups.json +++ b/public/language/he/groups.json @@ -1,8 +1,34 @@ { - "groups": "Groups", - "view_group": "View Group", - "details.title": "Group Details", - "details.members": "Member List", - "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "groups": "קבוצות", + "view_group": "צפה בקבוצה", + "owner": "מנהל הקבוצה", + "new_group": "צור קבוצה חדשה", + "no_groups_found": "אין קבוצות לצפייה", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "גרור תמונה, הזז למיקום הרצוי ואז לחץ על שמור", + "cover-change": "שנה", + "cover-save": "שמור", + "cover-saving": "שומר", + "details.title": "פרטי הקבוצה", + "details.members": "רשימת חברי הקבוצה", + "details.pending": "חברי קבוצה הממתינים לאישור", + "details.has_no_posts": "חברי הקבוצה הזו לא העלו אף פוסט.", + "details.latest_posts": "פוסטים אחרונים", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "ניהול הקבוצה", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "פרטי הקבוצה עודכנו", + "event.deleted": "קבוצת \"%1\" נמחקה" } \ No newline at end of file diff --git a/public/language/he/login.json b/public/language/he/login.json index 181cd62240..0a21aa92ba 100644 --- a/public/language/he/login.json +++ b/public/language/he/login.json @@ -1,5 +1,7 @@ { - "username": "שם משתמש / אימייל", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "זכור אותי?", "forgot_password": "שכחת סיסמתך?", "alternative_logins": "התחבר באמצעות...", diff --git a/public/language/he/modules.json b/public/language/he/modules.json index 521915ec96..43bf264e7b 100644 --- a/public/language/he/modules.json +++ b/public/language/he/modules.json @@ -1,20 +1,20 @@ { "chat.chatting_with": "שוחח עם ", - "chat.placeholder": "Type chat message here, press enter to send", + "chat.placeholder": "הקלד את הודעת הצ'אט כאן, לחץ אנטר לשליחה", "chat.send": "שלח", "chat.no_active": "אין לך צ'אטים פעילים", "chat.user_typing": "%1 מקליד ...", "chat.user_has_messaged_you": "ל%1 יש הודעה עבורך.", "chat.see_all": "צפה בכל הצ'אטים", - "chat.no-messages": "Please select a recipient to view chat message history", - "chat.recent-chats": "Recent Chats", - "chat.contacts": "Contacts", - "chat.message-history": "Message History", - "chat.pop-out": "Pop out chat", - "chat.maximize": "Maximize", - "chat.seven_days": "7 Days", - "chat.thirty_days": "30 Days", - "chat.three_months": "3 Months", + "chat.no-messages": "אנא בחר נמען על מנת לראות את היסטוריית הצ'אט איתו", + "chat.recent-chats": "צ'אטים אחרונים", + "chat.contacts": "אנשי קשר", + "chat.message-history": "היסטוריית הודעות", + "chat.pop-out": "הוצא את חלון הצ'אט", + "chat.maximize": "הרחב", + "chat.seven_days": "7 ימים", + "chat.thirty_days": "30 ימים", + "chat.three_months": "3 חודשים", "composer.user_said_in": "%1 אמר ב%2:", "composer.user_said": "%1 אמר:", "composer.discard": "האם למחוק פוסט זה?" diff --git a/public/language/he/notifications.json b/public/language/he/notifications.json index 9bc2d9c5d8..215356f8e4 100644 --- a/public/language/he/notifications.json +++ b/public/language/he/notifications.json @@ -2,26 +2,26 @@ "title": "התראות", "no_notifs": "אין התראות", "see_all": "צפה בכל ההתראות", - "back_to_home": "Back to %1", + "mark_all_read": "Mark all notifications read", + "back_to_home": "חזרה ל%1", "outgoing_link": "לינק", - "outgoing_link_message": "You are now leaving %1.", - "continue_to": "Continue to %1", - "return_to": "Return to %1", - "new_notification": "New Notification", - "you_have_unread_notifications": "You have unread notifications.", - "new_message_from": "New message from %1", - "upvoted_your_post_in": "%1 has upvoted your post in %2.", - "moved_your_post": "%1 has moved your post.", - "moved_your_topic": "%1 has moved your topic.", - "favourited_your_post_in": "%1 has favourited your post in %2.", - "user_flagged_post_in": "%1 flagged a post in %2", - "user_posted_to": "%1 has posted a reply to: %2", - "user_posted_topic": "%1 has posted a new topic: %2", - "user_mentioned_you_in": "%1 mentioned you in %2", - "user_started_following_you": "%1 started following you.", - "email-confirmed": "Email Confirmed", - "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", - "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", - "email-confirm-sent": "Confirmation email sent." + "outgoing_link_message": "אתה כעת עוזב את %1.", + "continue_to": "המשך ל %1", + "return_to": "חזור ל %1", + "new_notification": "התראה חדשה", + "you_have_unread_notifications": "יש לך התראות שלא נקראו.", + "new_message_from": "הודעה חדשה מ %1", + "upvoted_your_post_in": "%1 הצביע בעד הפוסט שלך ב %2", + "moved_your_post": "%1 העביר את הפוסט שלך.", + "moved_your_topic": "%1 הזיז את הנושא שלך.", + "favourited_your_post_in": "%1 הוסיף את הפוסט שלך ב %2 למועדפים שלו.", + "user_flagged_post_in": "%1 דיווח על פוסט ב %2", + "user_posted_to": "%1 פרסם תגובה ל: %2", + "user_posted_topic": "%1 העלה נושא חדש: %2", + "user_mentioned_you_in": "%1 הזכיר אותך ב %2", + "user_started_following_you": "%1 התחיל לעקוב אחריך.", + "email-confirmed": "כתובת המייל אושרה", + "email-confirmed-message": "תודה שאישרת את כתובת המייל שלך. החשבון שלך פעיל כעת.", + "email-confirm-error-message": "אירעה שגיאה בעת אישור המייל שלך. ייתכן כי הקוד היה שגוי או פג תוקף.", + "email-confirm-sent": "מייל אישור נשלח." } \ No newline at end of file diff --git a/public/language/he/pages.json b/public/language/he/pages.json index 46544cf924..aaeb1fcac5 100644 --- a/public/language/he/pages.json +++ b/public/language/he/pages.json @@ -5,14 +5,15 @@ "recent": "נושאים אחרונים", "users": "משתמשים רשומים", "notifications": "התראות", - "tags": "Topics tagged under \"%1\"", + "tags": "נושאים שתויגו תחת \"%1\"", "user.edit": "עורך את %1", "user.following": "אנשים ש%1 עוקב אחריהם", "user.followers": "אנשים שעוקבים אחרי %1", "user.posts": "פוסטים שהועלו על ידי %1", "user.topics": "נושאים שנוצרו על ידי %1", + "user.groups": "הקבוצות של %1", "user.favourites": "הפוסטים המועדפים על %1", "user.settings": "הגדרות משתמש", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", - "maintenance.messageIntro": "Additionally, the administrator has left this message:" + "maintenance.text": "%1 כרגע תחת עבודות תחזוקה. אנא חזור בזמן מאוחר יותר.", + "maintenance.messageIntro": "בנוסף, המנהל השאיר את ההודעה הזו:" } \ No newline at end of file diff --git a/public/language/he/recent.json b/public/language/he/recent.json index 0a20c6301a..7d4d3bf1a9 100644 --- a/public/language/he/recent.json +++ b/public/language/he/recent.json @@ -3,7 +3,17 @@ "day": "יום", "week": "שבוע", "month": "חודש", - "year": "Year", - "alltime": "All Time", - "no_recent_topics": "אין נושאים חדשים" + "year": "שנה", + "alltime": "כל הזמן", + "no_recent_topics": "אין נושאים חדשים", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "יש נושא חדש.", + "there-is-a-new-topic-and-a-new-post": "יש נושא ופוסט חדש.", + "there-is-a-new-topic-and-new-posts": "יש נושא ו%1 פוסטים חדשים.", + "there-are-new-topics": "יש %1 נושאים חדשים.", + "there-are-new-topics-and-a-new-post": "יש %1 נושאים ופוסט חדש.", + "there-are-new-topics-and-new-posts": "יש %1 נושאים ו %2 פוסטים חדשים.", + "there-is-a-new-post": "יש פוסט חדש.", + "there-are-new-posts": "יש %1 פוסטים חדשים.", + "click-here-to-reload": "לחץ כאן על מנת לטעון מחדש." } \ No newline at end of file diff --git a/public/language/he/reset_password.json b/public/language/he/reset_password.json index 7aa44652cd..2ed1435b18 100644 --- a/public/language/he/reset_password.json +++ b/public/language/he/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "אנא הקלד את כתובת האימייל שלך ואנו נשלח לך הוראות כיצד לאפס את חשבונך", "enter_email_address": "הכנס כתובת אימייל", "password_reset_sent": "קוד איפוס סיסמה נשלח", - "invalid_email": "מייל שגוי / כתובת מייל לא נמצאה" + "invalid_email": "מייל שגוי / כתובת מייל לא נמצאה", + "password_too_short": "הסיסמה שבחרת קצרה מדי, אנא בחר סיסמה שונה.", + "passwords_do_not_match": "הסיסמאות שהזנת אינן תואמות." } \ No newline at end of file diff --git a/public/language/he/search.json b/public/language/he/search.json index e9eef4632a..b9ca111d91 100644 --- a/public/language/he/search.json +++ b/public/language/he/search.json @@ -1,4 +1,40 @@ { - "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "results_matching": "נמצאו %1 תוצאות עבור החיפוש \"%2\", (%3 שניות)", + "no-matches": "לא נמצאו תוצאות", + "in": "ב", + "by": "על ידי", + "titles": "כותרות", + "titles-posts": "כותרות ופוסטים", + "posted-by": "פורסם על-ידי", + "in-categories": "בקטגוריות", + "search-child-categories": "חפש בתת קטגוריות", + "reply-count": "כמות תגובות", + "at-least": "לפחות", + "at-most": "לכל היותר", + "post-time": "זמן הפוסט", + "newer-than": "חדש מ", + "older-than": "ישן מ", + "any-date": "כל תאריך", + "yesterday": "אתמול", + "one-week": "שבוע אחד", + "two-weeks": "שבועיים", + "one-month": "חודש אחד", + "three-months": "שלושה חודשים", + "six-months": "שישה חודשים", + "one-year": "שנה אחת", + "sort-by": "סדר על-פי", + "last-reply-time": "תאריך תגובה אחרון", + "topic-title": "כותרת הנושא", + "number-of-replies": "מספר התגובות", + "number-of-views": "מספר הצפיות", + "topic-start-date": "זמן תחילת הנושא", + "username": "שם משתמש", + "category": "קטגוריה", + "descending": "בסדר יורד", + "ascending": "בסדר עולה", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/he/tags.json b/public/language/he/tags.json index 94d002603f..54ead310ad 100644 --- a/public/language/he/tags.json +++ b/public/language/he/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "אין פוסטים עם תגית זו.", "tags": "תגיות", - "enter_tags_here": "יש להכניס כאן את התגיות. לחץ אנטר אחרי כל תגית.", - "enter_tags_here_short": "Enter tags...", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here_short": "הכנס תגיות", "no_tags": "אין עדיין תגיות." } \ No newline at end of file diff --git a/public/language/he/topic.json b/public/language/he/topic.json index d69bb6036b..3ff27d0a8a 100644 --- a/public/language/he/topic.json +++ b/public/language/he/topic.json @@ -1,61 +1,62 @@ { "topic": "נושא", - "topic_id": "Topic ID", - "topic_id_placeholder": "Enter topic ID", + "topic_id": "מזהה נושא", + "topic_id_placeholder": "הכנס מזהה נושא", "no_topics_found": "לא נמצאו נושאים!", "no_posts_found": "לא נמצאו פוסטים!", - "post_is_deleted": "This post is deleted!", + "post_is_deleted": "פוסט זה נמחק!", "profile": "פרופיל", "posted_by": "הפוסט הועלה על ידי %1", - "posted_by_guest": "Posted by Guest", + "posted_by_guest": "פורסם על-ידי אורח", "chat": "צ'אט", "notify_me": "קבל התראה כאשר יש תגובות חדשות בנושא זה", "quote": "ציטוט", "reply": "תגובה", + "guest-login-reply": "Log in to reply", "edit": "עריכה", "delete": "מחק", - "purge": "Purge", - "restore": "Restore", + "purge": "מחק הכל", + "restore": "שחזר", "move": "הזז", "fork": "פורק", "link": "לינק", "share": "Share", "tools": "כלים", "flag": "דווח", - "locked": "Locked", - "bookmark_instructions": "Click here to return to your last position or close to discard.", + "locked": "נעול", + "bookmark_instructions": "לחץ כאן על-מנת לחזור למיקום האחרון או סגור למחיקה.", "flag_title": "דווח על פוסט זה למנהל", - "flag_confirm": "Are you sure you want to flag this post?", - "flag_success": "This post has been flagged for moderation.", - "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", + "flag_confirm": "אתה בטוח שאתה רוצה לדווח על הפוסט הזה?", + "flag_success": "התקבל דיווח על פוסט זה.", + "deleted_message": "נושא זה נמחק. רק משתמשים עם ההרשאות המתאימות יכולים לצפות בו.", "following_topic.message": "מעתה, תקבל הודעות כאשר מישהו יעלה פוסט לנושא זה.", "not_following_topic.message": "לא תקבל הודעות נוספות בנושא זה.", - "login_to_subscribe": "Please register or log in in order to subscribe to this topic.", - "markAsUnreadForAll.success": "Topic marked as unread for all.", + "login_to_subscribe": "אנא הרשם או התחבר על-מנת לעקוב אחר נושא זה.", + "markAsUnreadForAll.success": "נושא זה סומן כלא נקרא לכולם.", "watch": "עקוב", - "unwatch": "Unwatch", - "watch.title": "Be notified of new replies in this topic", - "unwatch.title": "Stop watching this topic", + "unwatch": "הפסק לעקוב", + "watch.title": "קבל התראה כאשר יש תגובות חדשות בנושא זה", + "unwatch.title": "הפסק לעקוב אחר נושא זה", "share_this_post": "שתף פוסט זה", - "thread_tools.title": "Topic Tools", + "thread_tools.title": "כלי נושא", "thread_tools.markAsUnreadForAll": "סמן כלא נקרא", "thread_tools.pin": "נעץ נושא", "thread_tools.unpin": "הסר נעץ", "thread_tools.lock": "נעל נושא", "thread_tools.unlock": "הסר נעילה", "thread_tools.move": "הזז נושא", - "thread_tools.move_all": "Move All", + "thread_tools.move_all": "הזז הכל", "thread_tools.fork": "שכפל נושא", "thread_tools.delete": "מחק נושא", - "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", + "thread_tools.delete_confirm": "אתה בטוח שאתה רוצה למחוק את הנושא הזה?", "thread_tools.restore": "שחזר נושא", - "thread_tools.restore_confirm": "Are you sure you want to restore this topic?", - "thread_tools.purge": "Purge Topic", - "thread_tools.purge_confirm": "Are you sure you want to purge this topic?", - "topic_move_success": "This topic has been successfully moved to %1", - "post_delete_confirm": "Are you sure you want to delete this post?", - "post_restore_confirm": "Are you sure you want to restore this post?", - "post_purge_confirm": "Are you sure you want to purge this post?", + "thread_tools.restore_confirm": "אתה בטוח שאתה רוצה לשחזר את הנושא הזה?", + "thread_tools.purge": "מחק נושא", + "thread_tools.purge_confirm": "אתה בטוח שאתה רוצה למחוק את הנושא הזה?", + "topic_move_success": "נושא זה הועבר בהצלחה ל %1", + "post_delete_confirm": "אתה בטוח שאתה רוצה למחוק את הפוסט הזה?", + "post_restore_confirm": "אתה בטוח שאתה רוצה לשחזר את הפוסט הזה?", + "post_purge_confirm": "אתה בטוח שאתה רוצה למחוק את הפוסט הזה?", "load_categories": "טוען קטגוריות", "disabled_categories_note": "קטגוריות מבוטלות צבועות באפור", "confirm_move": "הזז", @@ -65,32 +66,34 @@ "favourites.has_no_favourites": "אין לך כרגע פוסטים מועדפים, סמן מספר פוסטים כמועדפים על מנת לראות אותם כאן!", "loading_more_posts": "טוען פוסטים נוספים", "move_topic": "הזז נושא", - "move_topics": "Move Topics", + "move_topics": "הזז נושאים", "move_post": "הזז פוסט", - "post_moved": "Post moved!", + "post_moved": "הפוסט הועבר!", "fork_topic": "שכפל נושא", "topic_will_be_moved_to": "נושא זה יועבר לקטגוריה", "fork_topic_instruction": "לחץ על הפוסטים שברצונך לשכפל", "fork_no_pids": "לא בחרת אף פוסט!", - "fork_success": "Successfully forked topic! Click here to go to the forked topic.", + "fork_success": "הפוסט שוכפל בהצלחה! לחץ כאן על מנת לעבור לפוסט המשוכפל.", "composer.title_placeholder": "הכנס את כותרת הנושא כאן...", + "composer.handle_placeholder": "שם", "composer.discard": "מחק", "composer.submit": "שלח", - "composer.replying_to": "Replying to %1", + "composer.replying_to": "מגיב ל %1", "composer.new_topic": "נושא חדש", - "composer.uploading": "uploading...", - "composer.thumb_url_label": "Paste a topic thumbnail URL", - "composer.thumb_title": "Add a thumbnail to this topic", + "composer.uploading": "מעלה...", + "composer.thumb_url_label": "הדבק את כתובת ה URL לתמונה המוקטנת עבור הנושא", + "composer.thumb_title": "הוסף תמונה מוקטנת לנושא זה", "composer.thumb_url_placeholder": "http://example.com/thumb.png", - "composer.thumb_file_label": "Or upload a file", - "composer.thumb_remove": "Clear fields", - "composer.drag_and_drop_images": "Drag and Drop Images Here", - "more_users_and_guests": "%1 more user(s) and %2 guest(s)", - "more_users": "%1 more user(s)", - "more_guests": "%1 more guest(s)", - "users_and_others": "%1 and %2 others", - "sort_by": "Sort by", - "oldest_to_newest": "Oldest to Newest", - "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "composer.thumb_file_label": "או העלה קובץ", + "composer.thumb_remove": "נקה שדות", + "composer.drag_and_drop_images": "גרור תמונות לכאן", + "more_users_and_guests": "%1 משתמשים ו%2 אורחים נוספים", + "more_users": "%1 משתמשים נוספים", + "more_guests": "%1 אורחים נוספים", + "users_and_others": "%1 ו%2 אחרים", + "sort_by": "סדר על-פי", + "oldest_to_newest": "מהישן לחדש", + "newest_to_oldest": "מהחדש לישן", + "most_votes": "הכי הרבה הצבעות", + "most_posts": "הכי הרבה פוסטים" } \ No newline at end of file diff --git a/public/language/he/user.json b/public/language/he/user.json index 332e6d18b7..e8b3a5d3a7 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -2,10 +2,12 @@ "banned": "מורחק", "offline": "לא מחובר", "username": "שם משתמש", + "joindate": "תאריך הצטרפות", + "postcount": "כמות פוסטים", "email": "כתובת אימייל", - "confirm_email": "Confirm Email", - "delete_account": "Delete Account", - "delete_account_confirm": "Are you sure you want to delete your account?
This action is irreversible and you will not be able to recover any of your data

Enter your username to confirm that you wish to destroy this account.", + "confirm_email": "אשר מייל", + "delete_account": "מחק חשבון", + "delete_account_confirm": "אתה בטוח שאתה רוצה למחוק את חשבונך?
פעולה זו לא ניתנת לשחזור ולא תוכל לגשת למידע שלך

הזן את שם המשתמש שלך על מנת לאשר שברצונך למחוק את חשבונך.", "fullname": "שם מלא", "website": "אתר", "location": "מיקום", @@ -16,6 +18,7 @@ "profile_views": "צפיות בפרופיל", "reputation": "מוניטין", "favourites": "מועדפים", + "watched": "נצפה", "followers": "עוקבים", "following": "עוקב אחרי", "signature": "חתימה", @@ -29,7 +32,7 @@ "edit": "ערוך", "uploaded_picture": "התמונה הועלתה", "upload_new_picture": "העלה תמונה חדשה", - "upload_new_picture_from_url": "Upload New Picture From URL", + "upload_new_picture_from_url": "העלה תמונה חדשה מ URL", "current_password": "סיסמה נוכחית", "change_password": "שנה סיסמה", "change_password_error": "סיסמה אינה תקינה!", @@ -40,26 +43,28 @@ "change_password_success": "הסיסמה שלך עודכנה!", "confirm_password": "אמת סיסמה", "password": "סיסמה", - "username_taken_workaround": "The username you requested was already taken, so we have altered it slightly. You are now known as %1", + "username_taken_workaround": "שם המשתמש שבחרת כבר תפוס, אז שינינו אותו מעט. שם המשתמש שלך כעת הוא %1", "upload_picture": "העלה תמונה", "upload_a_picture": "העלה תמונה", "image_spec": "ניתן להעלות תמונות בפורמט PNG, JPG או GIF בלבד", "max": "מקסימום", "settings": "הגדרות", "show_email": "פרסם את כתובת האימייל שלי", - "show_fullname": "Show My Full Name", - "restrict_chats": "Only allow chat messages from users I follow", - "digest_label": "Subscribe to Digest", - "digest_description": "Subscribe to email updates for this forum (new notifications and topics) according to a set schedule", - "digest_off": "Off", + "show_fullname": "הצג את שמי המלא", + "restrict_chats": "אשר הודעות צ'אט ממשתמשים שאני עוקב אחריהם בלבד", + "digest_label": "הרשם לקבלת תקציר", + "digest_description": "הרשם לקבלת עדכונים מפורום זה (התראות ונושאים חדשים) על-פי לוח זמנים קבוע מראש.", + "digest_off": "כבוי", "digest_daily": "יומי", "digest_weekly": "שבועי", "digest_monthly": "חודשי", - "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_chat_notifications": "שלח לי הודעה למייל כאשר הודעת צ'אט נשלחה אלי בזמן שאיני מחובר", + "send_post_notifications": "שלח לי הודעה למייל כאשר תגובות חדשות פורסמו לנושאים שאני עוקב אחריהם", "has_no_follower": "למשתמש זה אין עוקבים :(", "follows_no_one": "משתמש זה אינו עוקב אחרי אחרים :(", "has_no_posts": "המשתמש הזה עוד לא פרסם כלום.", "has_no_topics": "המשתמש טרם יצר נושאים כלשהם.", + "has_no_watched_topics": "משתמש זה לא עקב אחרי אף נושא עדיין.", "email_hidden": "כתובת אימייל מוסתרת", "hidden": "מוסתר", "paginate_description": "צור עימוד לנושאים במקום לטעון את כל התוכן בעמוד אחד.", @@ -67,9 +72,9 @@ "posts_per_page": "כמות פוסטים בעמוד", "notification_sounds": "השמע צליל כאשר מתקבלת הודעה עבורך.", "browsing": "הגדרות צפייה", - "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.", - "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "open_links_in_new_tab": "פתח לינקים חיצוניים בטאב חדש?", + "enable_topic_searching": "הפעל חיפוש בתוך נושא", + "topic_search_help": "אם מופעל, חיפוש בתוך נושא יעקוף את מנגנון החיפוש הרגיל של הדפדפן שלך על מנת לאפשר לך לחפש בתוך כל הנושא ולא רק מה שמוצג כרגע בעמוד.", + "follow_topics_you_reply_to": "עקוב אחר נושאים שהגבת עליהם.", + "follow_topics_you_create": "עקוב אחר נושאים שיצרת." } \ No newline at end of file diff --git a/public/language/he/users.json b/public/language/he/users.json index f9ec1bad9d..5b996d5f5d 100644 --- a/public/language/he/users.json +++ b/public/language/he/users.json @@ -5,5 +5,8 @@ "search": "חיפוש", "enter_username": "הכנס שם משתמש לחיפוש", "load_more": "טען עוד", - "users-found-search-took": "נמצאו %1 משתמש(ים)! החיפוש ארך %2 מילי שניות." + "users-found-search-took": "%1 משתמשים נמצאו! החיפוש ערך %2 שניות.", + "filter-by": "פלטר על-פי", + "online-only": "אונליין בלבד", + "picture-only": "תמונה בלבד" } \ No newline at end of file diff --git a/public/language/hu/category.json b/public/language/hu/category.json index 6ea4699a4c..b36e9fc37a 100644 --- a/public/language/hu/category.json +++ b/public/language/hu/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Új témakör", + "guest-login-post": "Log in to post", "no_topics": "Nincs nyitva egy téma sem ebben a kategóriában.Hozzunk létre egyet.", "browsing": "böngészés", "no_replies": "Nem érkezett válasz", diff --git a/public/language/hu/email.json b/public/language/hu/email.json index ed0a1f5a1e..8430b8ff27 100644 --- a/public/language/hu/email.json +++ b/public/language/hu/email.json @@ -1,14 +1,17 @@ { "password-reset-requested": "Jelszó-visszaállítási kérelem - %1!", "welcome-to": "Üdvözlet a %1-on", - "greeting_no_name": "Hello", - "greeting_with_name": "Hello %1", - "welcome.text1": "Thank you for registering with %1!", - "welcome.text2": "To fully activate your account, we need to verify that you own the email address you registered with.", - "welcome.cta": "Click here to confirm your email address", - "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", - "reset.text2": "To continue with the password reset, please click on the following link:", + "greeting_no_name": "Üdvözlet", + "greeting_with_name": "Üdvözlet %1", + "welcome.text1": "Köszönjük a regisztrációt %1!", + "welcome.text2": "A fiók aktiválásához ellenőriznünk kell, hogy valós e-mail cím lett e megadva.", + "welcome.cta": "Kattintsunk ide az e-mail cím megerősítéséhez", + "reset.text1": "Kaptunk egy kérést jelszava visszaállításához, valószínűleg azért, mert elfelejtette azt. Ha ez nem így van, hagyja figyelmen kívül ezt a levelet.", + "reset.text2": "Ha szeretné, hogy továbbra alaphelyzetbe a jelszavát, kérjük kattintson az alábbi linkre:", "reset.cta": "Kattints ide a jelszavad visszaállításához", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "Olvasatlan értesítéseid vannak a következőtől: %1", "digest.latest_topics": "Legutóbbi témák a következőből: %1", "digest.cta": "Kattints ide, hogy meglátogasd a következőt: %1", @@ -17,7 +20,9 @@ "notif.chat.subject": "Új chat üzenet érkezett a következőtől: %1", "notif.chat.cta": "Kattints ide a beszélgetés folytatásához", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", - "unsub.cta": "Click here to alter those settings", - "closing": "Thanks!" + "unsub.cta": "Kattintson ide megváltoztatni ezeket a beállításokat", + "closing": "Köszönjük!" } \ No newline at end of file diff --git a/public/language/hu/error.json b/public/language/hu/error.json index 3ebd2c4c81..e03041b557 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -18,6 +18,9 @@ "username-taken": "Foglalt felhasználónév", "email-taken": "Foglalt e-mail", "email-not-confirmed": "Az e-mail címed még nem lett ellenőrizve, kérlek kattints ide az e-mail címed ellenőrzéséhez!", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Túl rövid felhasználónév", "username-too-long": "Túl hosszú felhasználónév", "user-banned": "Kitiltott felhasználó", @@ -32,36 +35,47 @@ "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "Kategória kikapcsolva", "topic-locked": "Téma lezárva", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Please wait for uploads to complete.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 characters.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "You cannot vote for your own post", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "You can't ban other admins!", - "invalid-image-type": "Invalid image type", - "group-name-too-short": "Group name too short", - "group-already-exists": "Group already exists", - "group-name-change-not-allowed": "Group name change not allowed", - "post-already-deleted": "This post has already been deleted", - "post-already-restored": "This post has already been restored", - "topic-already-deleted": "This topic has already been deleted", - "topic-already-restored": "This topic has already been restored", - "topic-thumbnails-are-disabled": "Topic thumbnails are disabled.", - "invalid-file": "Invalid File", - "uploads-are-disabled": "Uploads are disabled", - "upload-error": "Upload Error : %1", - "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", + "group-name-too-short": "A csoport név túl rövid", + "group-already-exists": "A csoport nem létezik", + "group-name-change-not-allowed": "A csoport névváltoztatás nem engedélyezett", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", + "post-already-deleted": "Ez a bejegyzés mát törlésre került", + "post-already-restored": "Ez a bejegyzés már visszaállításra került", + "topic-already-deleted": "Ezt a témakör már törlésre került", + "topic-already-restored": "Ez a témakör már helyreállításra került", + "topic-thumbnails-are-disabled": "Témakör bélyegképek tíltásra kerültek.", + "invalid-file": "Érvénytelen fájl", + "uploads-are-disabled": "A feltöltés nem engedélyezett", + "signature-too-long": "Sajnáljuk, az aláírás nem lehet hosszabb %1 karakternél.", "cant-chat-with-yourself": "You can't chat with yourself!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Regisztrációs hiba" + "registration-error": "Regisztrációs hiba", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/hu/global.json b/public/language/hu/global.json index d2580ee4a3..6f3926d6a5 100644 --- a/public/language/hu/global.json +++ b/public/language/hu/global.json @@ -3,22 +3,23 @@ "search": "Keresés", "buttons.close": "Mégsem", "403.title": "Hozzáférés megtagadva", - "403.message": "Úgy tűnik egy olyan oldalt szeretnél elérni, amihez nincs hozzáférésed. Talán be kellene lépned?", - "404.title": "Nem található", - "404.message": "Úgy tűnik egy olyan oldalt szeretnél elérni, ami nem létezik. Visszatérés a kezdőlapra.", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", + "404.title": "Nincs találat", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Belső hiba.", "500.message": "Hoppá! Úgy tűnik valami hiba történt!", - "register": "Regisztrálás", + "register": "Regisztráció", "login": "Belépés", - "please_log_in": "Kérjük, jelentkezzen be", + "please_log_in": "Jelentkezzünk be", "logout": "Kijelentkezés", "posting_restriction_info": "Posting is currently restricted to registered members only, click here to log in.", - "welcome_back": "Welcome Back", - "you_have_successfully_logged_in": "Sikeresen bejelentkeztél", + "welcome_back": "Üdvözlet", + "you_have_successfully_logged_in": "Sikeres bejelentkezés", "save_changes": "Változások mentése", - "close": "Bezár", - "pagination": "Lapszámozás", - "pagination.out_of": "%1 out of %2", + "close": "Bezárás", + "pagination": "Lapozás", + "pagination.out_of": "%1 - %2", "pagination.enter_index": "Enter index", "header.admin": "Admin", "header.recent": "Friss", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "Népszerű", "header.users": "Felhasználók", + "header.groups": "Groups", "header.chats": "Chat", "header.notifications": "Értesítések", "header.search": "Keresés", @@ -73,5 +75,7 @@ "updated.title": "Forum Updated", "updated.message": "This forum has just been updated to the latest version. Click here to refresh the page.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/hu/groups.json b/public/language/hu/groups.json index d1157bd711..75a7b053d5 100644 --- a/public/language/hu/groups.json +++ b/public/language/hu/groups.json @@ -1,8 +1,34 @@ { "groups": "Csoportok", "view_group": "Csoport megtekintés", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Csoport részletek", "details.members": "Felhasználók", + "details.pending": "Pending Members", "details.has_no_posts": "A csoport felhasználói nem tettek még közzé bejegyzést.", - "details.latest_posts": "Legújabb bejegyzések" + "details.latest_posts": "Legújabb bejegyzések", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/hu/language.json b/public/language/hu/language.json index a1a3c30c09..7c6d5e8fb0 100644 --- a/public/language/hu/language.json +++ b/public/language/hu/language.json @@ -1,5 +1,5 @@ { - "name": "Angol (Egyesült Királyság/Kanada)", - "code": "en_GB", + "name": "Magyar Nyelv", + "code": "hu", "dir": "ltr" } \ No newline at end of file diff --git a/public/language/hu/login.json b/public/language/hu/login.json index ea28779f22..14be774171 100644 --- a/public/language/hu/login.json +++ b/public/language/hu/login.json @@ -1,9 +1,11 @@ { - "username": "Felhasználónév / Email", - "remember_me": "Emlékezz rám", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", + "remember_me": "Megjegyzés", "forgot_password": "Elfelejtett Jelszó?", - "alternative_logins": "Alternatív Belépések", - "failed_login_attempt": "Sikertelen belépési kísérlet, kérlek próbálkozz újra.", - "login_successful": "Sikeresen beléptél!", - "dont_have_account": "Nincs fiókod?" + "alternative_logins": "Alternatív belépés", + "failed_login_attempt": "Sikertelen belépési kísérlet, kérlek próbálkozzunk újra.", + "login_successful": "Sikeres belépés", + "dont_have_account": "Nincs még fiók?" } \ No newline at end of file diff --git a/public/language/hu/modules.json b/public/language/hu/modules.json index f8f13275ae..c339652efe 100644 --- a/public/language/hu/modules.json +++ b/public/language/hu/modules.json @@ -1,21 +1,21 @@ { "chat.chatting_with": "Chat vele: ", - "chat.placeholder": "Írj be egy üzenetet, és nyomj enter-t a küldéshez", + "chat.placeholder": "Írjuk be üzenetünket, és nyomjunk meg egyenter-t a küldéshez", "chat.send": "Küldés", - "chat.no_active": "Nincs aktív csevegésed.", - "chat.user_typing": "%1 gépel...", - "chat.user_has_messaged_you": "%1 üzenetet küldött neked.", + "chat.no_active": "Nincs aktív csevegés.", + "chat.user_typing": "%1 éppen ír ...", + "chat.user_has_messaged_you": "%1 üzenetet küldött.", "chat.see_all": "Minden beszélgetés mutatása", - "chat.no-messages": "Please select a recipient to view chat message history", + "chat.no-messages": "Válasszuk ki a címzettet és tekintsük meg a chat előzményeket", "chat.recent-chats": "Legutóbbi beszélgetések", "chat.contacts": "Kapcsolatok", - "chat.message-history": "Üzenet napló", + "chat.message-history": "Üzenet előzmények", "chat.pop-out": "Felugró chat", "chat.maximize": "Maximalizálás", "chat.seven_days": "7 nap", "chat.thirty_days": "30 nap", "chat.three_months": "3 hónap", - "composer.user_said_in": "%1 said in %2:", - "composer.user_said": "%1 said:", - "composer.discard": "Biztosan el akarod vetni ezt a hozzászólást?" + "composer.user_said_in": "%1 válasza erre %2:", + "composer.user_said": "%1 válasza:", + "composer.discard": "Biztosan elvetjük ezt a hozzászólást?" } \ No newline at end of file diff --git a/public/language/hu/notifications.json b/public/language/hu/notifications.json index d6efa73982..f991c637f6 100644 --- a/public/language/hu/notifications.json +++ b/public/language/hu/notifications.json @@ -2,6 +2,7 @@ "title": "Értesítések", "no_notifs": "Nincs új értesítés", "see_all": "Összes értesítés megtekintése", + "mark_all_read": "Mark all notifications read", "back_to_home": "Vissza - %1", "outgoing_link": "Külső Link", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Email Confirmed", "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", "email-confirm-sent": "Confirmation email sent." } \ No newline at end of file diff --git a/public/language/hu/pages.json b/public/language/hu/pages.json index e7b1500751..53b98e8562 100644 --- a/public/language/hu/pages.json +++ b/public/language/hu/pages.json @@ -1,16 +1,17 @@ { "home": "Kezdőlap", - "unread": "Olvasatlan Topikok", + "unread": "Olvasatlan témakörök", "popular": "Népszerű Témák", "recent": "Friss Topikok", "users": "Regisztrált Felhasználók", "notifications": "Értesítések", - "tags": "Topics tagged under \"%1\"", + "tags": "Témák feliratú alatt \"%1\"", "user.edit": "Szerkesztés \"%1\"", "user.following": "Tagok akiket %1 követ", "user.followers": "Tagok akik követik %1 -t", "user.posts": "Hozzászólások által %1", "user.topics": "%1 által létrehozott témák", + "user.groups": "%1's csoport", "user.favourites": "%1 Kedvenc Hozzászólásai", "user.settings": "Felhasználói Beállítások", "maintenance.text": "%1 jelenleg karbantartás alatt van. Kérlek nézz vissza késöbb!", diff --git a/public/language/hu/recent.json b/public/language/hu/recent.json index d158800ced..c20cbf3d6f 100644 --- a/public/language/hu/recent.json +++ b/public/language/hu/recent.json @@ -1,9 +1,19 @@ { - "title": "Friss", + "title": "Legújabb", "day": "Nap", "week": "Hét", "month": "Hónap", "year": "Év", "alltime": "Minden idők", - "no_recent_topics": "Nincs friss topik." + "no_recent_topics": "Nincs friss topik.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/hu/reset_password.json b/public/language/hu/reset_password.json index d0efcfda44..3f5721d6d6 100644 --- a/public/language/hu/reset_password.json +++ b/public/language/hu/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Kérlek add meg az e-mail címedet, ahová elküldjük a további teendőket a jelszavad visszaállításával kapcsolatban.", "enter_email_address": "Email cím megadása", "password_reset_sent": "Jelszó-visszaállítás elküldve", - "invalid_email": "Helytelen E-mail cím / Nem létező E-mail cím!" + "invalid_email": "Helytelen E-mail cím / Nem létező E-mail cím!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/hu/search.json b/public/language/hu/search.json index 467ff8729e..5c09b69e77 100644 --- a/public/language/hu/search.json +++ b/public/language/hu/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 eredmény(ek) erre \"%2\" (%3 másodperc alatt)", - "no-matches": "Nincs bejegyzés" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/hu/tags.json b/public/language/hu/tags.json index d818646831..aa7a02a772 100644 --- a/public/language/hu/tags.json +++ b/public/language/hu/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Nem létezik témakör ezzel a címkével.", "tags": "Címkék", - "enter_tags_here": "Adjunk meg címkét majd nyomjuk meg az entert.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Címke megadása...", "no_tags": "Nincs címke." } \ No newline at end of file diff --git a/public/language/hu/topic.json b/public/language/hu/topic.json index 61c0f40024..30bf3ab2f8 100644 --- a/public/language/hu/topic.json +++ b/public/language/hu/topic.json @@ -12,6 +12,7 @@ "notify_me": "Értesítést kérek az új hozzászólásokról ebben a topikban", "quote": "Idéz", "reply": "Válasz", + "guest-login-reply": "Log in to reply", "edit": "Szerkeszt", "delete": "Töröl", "purge": "Purge", @@ -74,6 +75,7 @@ "fork_no_pids": "Nincs hozzászólás kiválasztva!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Írd be a témanevet...", + "composer.handle_placeholder": "Name", "composer.discard": "Elvet", "composer.submit": "Küldés", "composer.replying_to": "Replying to %1", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/hu/user.json b/public/language/hu/user.json index 03d15c58f7..bacce74415 100644 --- a/public/language/hu/user.json +++ b/public/language/hu/user.json @@ -1,7 +1,9 @@ { - "banned": "Tiltva", - "offline": "offline", + "banned": "Kitíltva", + "offline": "Nem elérhető", "username": "Felhasználónév", + "joindate": "Regisztráció dátum", + "postcount": "Bejegyzés megtekintés", "email": "E-mail", "confirm_email": "E-mail megerősítése", "delete_account": "Fiók törlése", @@ -16,6 +18,7 @@ "profile_views": "Megtekintések", "reputation": "Hírnév", "favourites": "Kedvencek", + "watched": "Megtekintve", "followers": "Követők", "following": "Követve", "signature": "Aláírás", @@ -56,10 +59,12 @@ "digest_weekly": "Weekly", "digest_monthly": "Monthly", "send_chat_notifications": "E-mail küldése, amennyiben chat üzenetem érkezett és nem vagyok aktív", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Ezt a felhasználót nem követi senki :(", "follows_no_one": "Ez a felhasználó nem követ senkit :(", "has_no_posts": "Ennek a felhasználónak még nincsen hozzászólása.", "has_no_topics": "This user didn't post any topics yet.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "E-mail rejtett", "hidden": "rejtett", "paginate_description": "Oldalszámok használata a témáknál és hozzászólásoknál a végtelen görgetés helyett.", diff --git a/public/language/hu/users.json b/public/language/hu/users.json index b637800995..95e721a4d7 100644 --- a/public/language/hu/users.json +++ b/public/language/hu/users.json @@ -5,5 +5,8 @@ "search": "Keresés", "enter_username": "Írj be egy nicknevet a kereséshez", "load_more": "Több betöltése", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/id/category.json b/public/language/id/category.json new file mode 100644 index 0000000000..7b0ff0f6eb --- /dev/null +++ b/public/language/id/category.json @@ -0,0 +1,9 @@ +{ + "new_topic_button": "Topik Baru", + "guest-login-post": "Log in to post", + "no_topics": "Tidak ada topik dikategori ini
Mengapa anda tidak mencoba membuat yang baru?", + "browsing": "penjelajahan", + "no_replies": "Belum ada orang yang menjawab", + "share_this_category": "Bagikan kategori ini", + "ignore": "Abaikan" +} \ No newline at end of file diff --git a/public/language/id/email.json b/public/language/id/email.json new file mode 100644 index 0000000000..481f412f23 --- /dev/null +++ b/public/language/id/email.json @@ -0,0 +1,28 @@ +{ + "password-reset-requested": "Permintaan atur ulang Kata Sandi - %1!", + "welcome-to": "Selamat datang di %1", + "greeting_no_name": "Hai", + "greeting_with_name": "Hai %1", + "welcome.text1": "Terima kasih anda telah mendaftarkan diri anda dengan %1!", + "welcome.text2": "Untuk mengaktifkan akun anda sepenuhnya, kami perlu memverifkasi bahwa anda adalah pemilik email yang terdaftar.", + "welcome.cta": "Klik disini untuk mengkonfirmasi alamat email anda.", + "reset.text1": "Kami menerima permintan untuk mengatur ulang kata sandi anda, Ini dikarenakan anda telah lupa akan kata sandi anda. Tolong abaikan email ini jika sebaliknya.", + "reset.text2": "Mohon klik link berikut untuk mengatur ulang kata sandi anda.", + "reset.cta": "Klik di sini untuk mengatur ulang kata sandi anda", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "digest.notifications": "Anda mempunyai notifikasi yang belum terbaca dari %1:", + "digest.latest_topics": "Topik-topik terbaru dari %1", + "digest.cta": "Klik di sini untuk mengunjungi %1", + "digest.unsub.info": "Sesuai pengaturan langganan anda, maka ringkasan ini di kirimkan untuk anda ", + "digest.no_topics": "Tidak ada topik yang aktif selama %1", + "notif.chat.subject": "Pesan yang baru diterima dari %1", + "notif.chat.cta": "Klik di sini untuk melanjutkan percakapan", + "notif.chat.unsub.info": "Sesuai pengaturan langganan anda, notifikasi obrolan ini dikirmkan kepada anda", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", + "test.text1": "Ini hanya email percobaan untuk menverifkasi pengiriman email telah diatur oleh NodeBB secara benar", + "unsub.cta": "Klik di sini untuk mengubah pengaturan-pengaturan tersebut.", + "closing": "Terima kasih!" +} \ No newline at end of file diff --git a/public/language/id/error.json b/public/language/id/error.json new file mode 100644 index 0000000000..d2ceed9a23 --- /dev/null +++ b/public/language/id/error.json @@ -0,0 +1,81 @@ +{ + "invalid-data": "Data Salah", + "not-logged-in": "Kamu terlihat belum login", + "account-locked": "Akun kamu dikunci sementara", + "search-requires-login": "Pencarian butuh sebuah akun, silakan login atau register terlebih dulu", + "invalid-cid": "ID Kategori Salah", + "invalid-tid": "ID Topik Salah", + "invalid-pid": "ID Post Salah", + "invalid-uid": "ID User Salah", + "invalid-username": "Username Salah", + "invalid-email": "Email Salah", + "invalid-title": "Judul Salah", + "invalid-user-data": "Data Pengguna Salah", + "invalid-password": "Password Salah", + "invalid-username-or-password": "Mohon spesifikasikan username dan password", + "invalid-search-term": "Kata pencarian salah", + "invalid-pagination-value": "Nilai halaman salah", + "username-taken": "Username sudah terdaftar", + "email-taken": "Email sudah terdaftar", + "email-not-confirmed": "Email kamu belum dikonfirmasi, klik disini untuk mengkonfirmasi email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", + "username-too-short": "Username terlalu pendek", + "username-too-long": "Username terlalu panjang", + "user-banned": "Pengguna dibanned", + "user-too-new": "Maaf kamu harus menunggu %1 detik sebelum membuat post pertama", + "no-category": "Kategori tidak ditemukan", + "no-topic": "Topik tidak ditemukan", + "no-post": "Post tidak ditemukan", + "no-group": "Grup tidak ditemukan", + "no-user": "Pengguna tidak ditemukan", + "no-teaser": "Teaser tidak ditemukan", + "no-privileges": "Kamu tidak punya cukup izin untuk melakukan ini", + "no-emailers-configured": "Tidak ada plugin email, jadi test email tidak dapat dikirim", + "category-disabled": "Kategori ditiadakan", + "topic-locked": "Topik dikunci", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", + "still-uploading": "Tunggu proses upload sampai selesai", + "content-too-short": "Mohon masukkan posting yang lebih panjang. Posting harus memuat setidaknya %1 karakter.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", + "title-too-short": "Mohon masukkan judul yang lebih panjang. Judul harus memuat setidaknya %1 karakter.", + "title-too-long": "Mohon masukkan judul yang lebih pendek. Judul tidak dapat melebihi %1 karakter.", + "too-many-posts": "Kamu hanya dapat melakukan posting satu kali setiap %1 detik - mohon tunggu beberapa saat sebelum melakukan posting kembali", + "too-many-posts-newbie": "Sebagai pengguna baru, kamu hanya diijinkan membuat posting satu kali setiap %1 detik sampai kamu mendapatkan %2 reputasi - mohon tunggu beberapa saat sebelum melakukan posting kembali", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", + "file-too-big": "Ukuran file yang boleh diupload %1 kbs - mohon upload file dengan ukuran lebih kecil", + "cant-vote-self-post": "Kamu tidak dapat vote postingan sendiri", + "already-favourited": "Post ini sudah kamu favorit", + "already-unfavourited": "Postingan ini sudah kamu unfavorit", + "cant-ban-other-admins": "Kamu tidak dapat ban admin lainnya!", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", + "group-name-too-short": "Nama grup terlalu pendek", + "group-already-exists": "Grup sudah ada", + "group-name-change-not-allowed": "Perubahan nama grup tidak dibolehkan", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", + "post-already-deleted": "Postingan ini sudah dihapus", + "post-already-restored": "Postingan ini sudah direstore", + "topic-already-deleted": "Topik ini sudah dihapus", + "topic-already-restored": "Topik ini sudah direstore", + "topic-thumbnails-are-disabled": "Thumbnail di topik ditiadakan", + "invalid-file": "File Salah", + "uploads-are-disabled": "Upload ditiadakan", + "signature-too-long": "Maaf, tanda pengenalmu tidak dapat melebihi %1 karakter.", + "cant-chat-with-yourself": "Kamu tidak dapat chat dengan akun sendiri", + "chat-restricted": "Pengguna ini telah membatasi percakapa mereka. Mereka harus mengikutimu sebelum kamu dapat melakukan percakapan dengan mereka ", + "too-many-messages": "You have sent too many messages, please wait awhile.", + "reputation-system-disabled": "Sistem reputasi ditiadakan.", + "downvoting-disabled": "Downvoting ditiadakan", + "not-enough-reputation-to-downvote": "Tidak cukup reputation untuk downvote post ini", + "not-enough-reputation-to-flag": "Tidak cukup reputation untuk flag post ini", + "reload-failed": "NodeBB mengalami masalah saat memuat \"%1\". NodeBB akan melanjutkan pemuatan, kamu harus membatalkan tindakanmu sebelum pemuatan kembali dilakukan.", + "registration-error": "Registrasti Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" +} \ No newline at end of file diff --git a/public/language/id/global.json b/public/language/id/global.json new file mode 100644 index 0000000000..738fa81207 --- /dev/null +++ b/public/language/id/global.json @@ -0,0 +1,81 @@ +{ + "home": "Beranda", + "search": "Cari", + "buttons.close": "Tutup", + "403.title": "Akses ditolak", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", + "404.title": "Tidak ditemukan", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "500.title": "Kesalahan internal", + "500.message": "Oops! Terjadi kesalahan", + "register": "Daftar", + "login": "Login", + "please_log_in": "Silakan Log In", + "logout": "Logout", + "posting_restriction_info": "Posting hanya boleh dilakukan oleh pengguna terdaftar, klik disini untuk log in.", + "welcome_back": "Selamat Datang Kembali", + "you_have_successfully_logged_in": "Kamu sudah login", + "save_changes": "Menyimpan perubahan", + "close": "Tutup", + "pagination": "Halaman", + "pagination.out_of": "%1 dari %2", + "pagination.enter_index": "Masukkan index", + "header.admin": "Admin", + "header.recent": "Terbaru", + "header.unread": "Belum dibaca", + "header.tags": "Tag", + "header.popular": "Populer", + "header.users": "Pengguna", + "header.groups": "Groups", + "header.chats": "Chat", + "header.notifications": "Pemberitahuan", + "header.search": "Cari", + "header.profile": "Profil", + "notifications.loading": "Memuat Pemberitahuan", + "chats.loading": "Memuat Chat", + "motd.welcome": "Selamat datang di NodeBB, platform diskusi masa depan.", + "previouspage": "Halaman Sebelumnya", + "nextpage": "Halaman Selanjutnya", + "alert.success": "Sukses", + "alert.error": "Error", + "alert.banned": "Banned", + "alert.banned.message": "Akunmu telah dibanned, kamu akan logout sekarang", + "alert.unfollow": "Kamu tidak mengikuti %1", + "alert.follow": "Kamu mengikuti %1", + "online": "Online", + "users": "Pengguna", + "topics": "Topik", + "posts": "Post", + "views": "Views", + "reputation": "Reputasi", + "read_more": "selengkapnya", + "posted_ago_by_guest": "dibuat %1 oleh Guest", + "posted_ago_by": "dibuat %1 oleh %2", + "posted_ago": "dibuat %1", + "posted_in_ago_by_guest": "dibuat di %1 %2 oleh Tamu", + "posted_in_ago_by": "dibuat di %1 %2 oleh %3", + "posted_in_ago": "dibuat di %1 %2", + "replied_ago": "dibalas %1", + "user_posted_ago": "Dibuat oleh %1 %2", + "guest_posted_ago": "Dibuat oleh Tamu %1", + "last_edited_by_ago": "Terakhir diubah oleh %1 %2", + "norecentposts": "Tidak ada post terbaru", + "norecenttopics": "Tidak ada topik terbaru", + "recentposts": "Post Terbaru", + "recentips": "Beberapa IP yang digunakan untuk login baru-baru ini", + "away": "Tidak Ditempat", + "dnd": "Jangan ganggu", + "invisible": "Tidak Terlihat", + "offline": "Offline", + "email": "Email", + "language": "Bahasa", + "guest": "Tamu", + "guests": "Tamu", + "updated.title": "Forum telah diupdate", + "updated.message": "Forum ini telah diupdate ke versi terbaru. Klik disini untuk memuat halaman.", + "privacy": "Privasi", + "follow": "Follow", + "unfollow": "Unfollow", + "delete_all": "Hapus Semua" +} \ No newline at end of file diff --git a/public/language/id/groups.json b/public/language/id/groups.json new file mode 100644 index 0000000000..f70bea0bf5 --- /dev/null +++ b/public/language/id/groups.json @@ -0,0 +1,34 @@ +{ + "groups": "Grup", + "view_group": "Tampilkan Grup", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", + "details.title": "Rincian Grup", + "details.members": "Daftar Anggota", + "details.pending": "Pending Members", + "details.has_no_posts": "Anggota grup ini belum membuat posting satupun.", + "details.latest_posts": "Posting Terkini", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" +} \ No newline at end of file diff --git a/public/language/id/language.json b/public/language/id/language.json new file mode 100644 index 0000000000..1bcec669d0 --- /dev/null +++ b/public/language/id/language.json @@ -0,0 +1,5 @@ +{ + "name": "Bahasa Indonesia", + "code": "id", + "dir": "ltr" +} \ No newline at end of file diff --git a/public/language/id/login.json b/public/language/id/login.json new file mode 100644 index 0000000000..7a1c52fe71 --- /dev/null +++ b/public/language/id/login.json @@ -0,0 +1,11 @@ +{ + "username-email": "Username / Email", + "username": "Username", + "email": "Email", + "remember_me": "Ingin Diingat?", + "forgot_password": "Lupa Password?", + "alternative_logins": "Login Alternatif", + "failed_login_attempt": "Percobaan login gagal, cobalah kembali.", + "login_successful": "Kamu telah berhasil login!", + "dont_have_account": "Belum memiliki akun?" +} \ No newline at end of file diff --git a/public/language/id/modules.json b/public/language/id/modules.json new file mode 100644 index 0000000000..53320cf627 --- /dev/null +++ b/public/language/id/modules.json @@ -0,0 +1,21 @@ +{ + "chat.chatting_with": "Gunakan untuk melakukan percakapan", + "chat.placeholder": "Tulis pesan percakapan di sini, tekan enter untuk mengirim", + "chat.send": "Kirim", + "chat.no_active": "Kamu tidak memiliki percakapan yang aktif.", + "chat.user_typing": "%1 sedang menulis ...", + "chat.user_has_messaged_you": "%1 telah mengirimkan pesan untukmu.", + "chat.see_all": "Lihat seluruh Percakapan", + "chat.no-messages": "Mohon pilih satu penerima untuk melihat riwayat pesan percakapan", + "chat.recent-chats": "Percakapan terbaru", + "chat.contacts": "Kontak", + "chat.message-history": "Riwayat Pesan", + "chat.pop-out": "Munculkan pesan", + "chat.maximize": "Maksimalkan", + "chat.seven_days": "7 Hari", + "chat.thirty_days": "30 Hari", + "chat.three_months": "3 Bulan", + "composer.user_said_in": "%1 berkata di %2: ", + "composer.user_said": "%1 berkata:", + "composer.discard": "Kamu yakin akan membuang posting ini?" +} \ No newline at end of file diff --git a/public/language/id/notifications.json b/public/language/id/notifications.json new file mode 100644 index 0000000000..ee609afb0b --- /dev/null +++ b/public/language/id/notifications.json @@ -0,0 +1,27 @@ +{ + "title": "Pemberitahuan", + "no_notifs": "Kamu tidak memiliki pemberitahuan baru", + "see_all": "Lihat seluruh Pemberitahuan", + "mark_all_read": "Mark all notifications read", + "back_to_home": "Kembali ke %1", + "outgoing_link": "Tautan Keluar", + "outgoing_link_message": "Saat ini kamu meninggalkan %1.", + "continue_to": "Lanjut ke %1", + "return_to": "Kembali ke %1", + "new_notification": "Pemberitahuan Baru", + "you_have_unread_notifications": "Kamu memiliki pemberitahuan yang belum dibaca.", + "new_message_from": "Pesan baru dari %1", + "upvoted_your_post_in": "%1 telah melakukan upvote untuk posting kamu di %2.", + "moved_your_post": "%1 telah memindahkan postingmu.", + "moved_your_topic": "%1 telah memindahkan topikmu.", + "favourited_your_post_in": "%1 telah memfavoritkan posting mu di %2.", + "user_flagged_post_in": "%1 menandai sebuah posting di %2", + "user_posted_to": "%1 telah mengirim sebuah balasan kepada: %2", + "user_posted_topic": "%1 telah membuat topik baru: %2", + "user_mentioned_you_in": "%1 menyebut mu di %2", + "user_started_following_you": "%1 mulai mengikutimu.", + "email-confirmed": "Email telah Dikonfirmasi", + "email-confirmed-message": "Terimakasih telah melakukan validasi email. Akunmu saat ini telah aktif sepenuhnya.", + "email-confirm-error-message": "Terjadi masalah saat melakukan validasi emailmu. Mungkin terjadi kesalahan kode atau waktu habis.", + "email-confirm-sent": "Email konfirmasi telah dikirim." +} \ No newline at end of file diff --git a/public/language/id/pages.json b/public/language/id/pages.json new file mode 100644 index 0000000000..83b55a2b22 --- /dev/null +++ b/public/language/id/pages.json @@ -0,0 +1,19 @@ +{ + "home": "Beranda", + "unread": "Topik belum Dibaca", + "popular": "Topik Populer", + "recent": "Topik Terkini", + "users": "Pengguna Terdaftar", + "notifications": "Pemberitahuan", + "tags": "Topik ditag dalam \"%1\"", + "user.edit": "Sedang merubah \"%1\"", + "user.following": "Mengikuti Pengguna %1", + "user.followers": "Pengguna yang mengikuti %1", + "user.posts": "Posting dibuat oleh %1", + "user.topics": "Topik dibuat oleh %1", + "user.groups": "%1's Groups", + "user.favourites": "Posting Favorit %1", + "user.settings": "Pengaturan Pengguna", + "maintenance.text": "%1 saat ini sedang dalam masa pemeliharaan. Silahkan kembali lain waktu.", + "maintenance.messageIntro": "Tambahan, Administrator meninggalkan pesan ini:" +} \ No newline at end of file diff --git a/public/language/id/recent.json b/public/language/id/recent.json new file mode 100644 index 0000000000..896583950f --- /dev/null +++ b/public/language/id/recent.json @@ -0,0 +1,19 @@ +{ + "title": "Terkini", + "day": "Hari", + "week": "Pekan", + "month": "Bulan", + "year": "Tahun", + "alltime": "Sepanjang Waktu", + "no_recent_topics": "Tidak ada topik terbaru.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." +} \ No newline at end of file diff --git a/public/language/id/register.json b/public/language/id/register.json new file mode 100644 index 0000000000..f38cb7a6d6 --- /dev/null +++ b/public/language/id/register.json @@ -0,0 +1,18 @@ +{ + "register": "Daftar", + "help.email": "Secara default, emailmu akan disembunyikan dari publik.", + "help.username_restrictions": "Nama Pengguna yang unik antara %1 dan %2 karakter. Pengguna lain dapat menyebutmu dengan menggunakan @nama pengguna.", + "help.minimum_password_length": "Panjang passwordmu harus memuat setidaknya %1 karakter.", + "email_address": "Alamat Email", + "email_address_placeholder": "Masukkan Alamat Email", + "username": "Nama Pengguna", + "username_placeholder": "Masukkan Nama Pengguna", + "password": "Kata Sandi", + "password_placeholder": "Masukkan Kata Sandi", + "confirm_password": "Konfirmasi Kata Sandi", + "confirm_password_placeholder": "Konfirmasi Kata Sandi", + "register_now_button": "Daftar Sekarang", + "alternative_registration": "Pendaftaran Alternatif", + "terms_of_use": "Aturan Penggunaan", + "agree_to_terms_of_use": "Saya menyetujui Aturan Penggunaan" +} \ No newline at end of file diff --git a/public/language/id/reset_password.json b/public/language/id/reset_password.json new file mode 100644 index 0000000000..ec65c5ca68 --- /dev/null +++ b/public/language/id/reset_password.json @@ -0,0 +1,16 @@ +{ + "reset_password": "Atur Ulang Kata Sandi", + "update_password": "Perbarui Kata Sandi", + "password_changed.title": "Kata Sandi telah Diganti", + "password_changed.message": "

Kata Sandi berhasil diatur ulang, silakan login kembali.", + "wrong_reset_code.title": "Kode Pengaturan Ulang Salah", + "wrong_reset_code.message": "Kode pengaturan ulang salah. Silakan coba lagi, atauminta kode pengaturan ulang baru.", + "new_password": "Kata Sandi Baru", + "repeat_password": "Konfirmasi Kata Sandi", + "enter_email": "Mohon masukkan alamat emailmu dan kami akan mengirimkan mu sebuah email dengan instruksi mengenai cara pengaturan ulang akunmu.", + "enter_email_address": "Masukkan Alamat Email", + "password_reset_sent": "Pengaturan Kembali Kata Sandi telah DIkirim", + "invalid_email": "Email Salah / Email tidak ada!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." +} \ No newline at end of file diff --git a/public/language/id/search.json b/public/language/id/search.json new file mode 100644 index 0000000000..544579a3ff --- /dev/null +++ b/public/language/id/search.json @@ -0,0 +1,40 @@ +{ + "results_matching": "%1 hasil yang sesuai dengan \"%2\", (%3 detik)", + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" +} \ No newline at end of file diff --git a/public/language/id/success.json b/public/language/id/success.json new file mode 100644 index 0000000000..a978b89347 --- /dev/null +++ b/public/language/id/success.json @@ -0,0 +1,6 @@ +{ + "success": "Sukses", + "topic-post": "Kamu berhasil melakukan posting.", + "authentication-successful": "Otentikasi Sukses", + "settings-saved": "Pengaturan disimpan!" +} \ No newline at end of file diff --git a/public/language/id/tags.json b/public/language/id/tags.json new file mode 100644 index 0000000000..647542884e --- /dev/null +++ b/public/language/id/tags.json @@ -0,0 +1,7 @@ +{ + "no_tag_topics": "Tidak ada topik dengan tag ini.", + "tags": "Tag", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here_short": "Masukkan tag...", + "no_tags": "Belum ada tag." +} \ No newline at end of file diff --git a/public/language/id/topic.json b/public/language/id/topic.json new file mode 100644 index 0000000000..c47b9612be --- /dev/null +++ b/public/language/id/topic.json @@ -0,0 +1,99 @@ +{ + "topic": "Topik", + "topic_id": "ID Topik", + "topic_id_placeholder": "Masukkan ID topik", + "no_topics_found": "Tidak topik yang ditemukan!", + "no_posts_found": "Tidak ada posting yang ditemukan!", + "post_is_deleted": "Posting ini telah dihapus!", + "profile": "Profil", + "posted_by": "Dibuat oleh %1", + "posted_by_guest": "Dibuat oleh Tamu", + "chat": "Percakapan", + "notify_me": "Beritahukan balasan baru untuk topik ini", + "quote": "Kutip", + "reply": "Balas", + "guest-login-reply": "Log in to reply", + "edit": "Ubah", + "delete": "Hapus", + "purge": "Musnahkan", + "restore": "Kembalikan", + "move": "Pindah", + "fork": "Cabangkan", + "link": "Tautan", + "share": "Bagikan", + "tools": "Perangkat", + "flag": "Tandai", + "locked": "Terkunci", + "bookmark_instructions": "Klik di sini untuk kembali ke posisi terakhirmu atau tutup untuk membuang.", + "flag_title": "Tandai posting ini untuk moderasi", + "flag_confirm": "Kamu yakin ingin menandai posting ini?", + "flag_success": "Posting ini telah ditandai untuk moderasi", + "deleted_message": "Topik ini telah dihapus. Hanya pengguna dengan hak manajemen topik yang dapat melihatnya.", + "following_topic.message": "Saat ini kamu akan menerima pemberitahuan saat seseorang membuat posting di dalam topik ini.", + "not_following_topic.message": "Kamu tidak lagi menerima notiifikasi dari topik ini.", + "login_to_subscribe": "Daftar atau login untuk berlangganan topik ini.", + "markAsUnreadForAll.success": "Topik ditandai Belum Dibaca seluruhnya", + "watch": "Pantau", + "unwatch": "Batalkan Pantau", + "watch.title": "Beritahukan balasan baru untuk topik ini", + "unwatch.title": "Berhenti memantau topik ini", + "share_this_post": "Bagikan Posting ini", + "thread_tools.title": "Perangkat Topik", + "thread_tools.markAsUnreadForAll": "Tandai Belum Dibaca", + "thread_tools.pin": "Tempel Topik", + "thread_tools.unpin": "Copot Topik", + "thread_tools.lock": "Kunci Topik", + "thread_tools.unlock": "Lepas Topik", + "thread_tools.move": "Pindah Topik", + "thread_tools.move_all": "Pindah Semua", + "thread_tools.fork": "Cabangkan Topik", + "thread_tools.delete": "Hapus Topik", + "thread_tools.delete_confirm": "Kamu yakin ingin menghapus topik ini?", + "thread_tools.restore": "Kembalikan Topik", + "thread_tools.restore_confirm": "Kamu yakin ingin mengembalikan topik ini?", + "thread_tools.purge": "Musnahkan Topik", + "thread_tools.purge_confirm": "Kamu yakin ingin memusnahkan topik ini?", + "topic_move_success": "Topik ini berhasil dipindahkan ke %1", + "post_delete_confirm": "Kamu yakin ingin menghapus posting ini?", + "post_restore_confirm": "Kamu yakin ingin mengembalikan posting ini?", + "post_purge_confirm": "Kamu yakin ingin memusnahkan posting ini?", + "load_categories": "Memuat Kategori", + "disabled_categories_note": "Indikator Kategori yang Ditiadakan keabu-abuan", + "confirm_move": "Pindah", + "confirm_fork": "Cabangkan", + "favourite": "Favorit", + "favourites": "Beberapa Favorit", + "favourites.has_no_favourites": "Kamu tidak memiliki favorit, favoritkan beberapa posting untuk melihatnya di sini! ", + "loading_more_posts": "Memuat Lebih Banyak Posting", + "move_topic": "Pindahkan Topik", + "move_topics": "Pindahkan Beberapa Topik", + "move_post": "Pindahkan Posting", + "post_moved": "Posting dipindahkan!", + "fork_topic": "Cabangkan Topik", + "topic_will_be_moved_to": "Topik ini akan dipindahkan ke kategori", + "fork_topic_instruction": "Klik posting yang kamu ingin cabangkan", + "fork_no_pids": "Tidak ada posting yang dipilih!", + "fork_success": "Topik berhasil dicabangkan! Klik disini untuk menuju topik yang telah dicabangkan.", + "composer.title_placeholder": "Masukkan judul topik di sini...", + "composer.handle_placeholder": "Name", + "composer.discard": "Buang", + "composer.submit": "Kirim", + "composer.replying_to": "Membalas ke %1", + "composer.new_topic": "Topik Baru", + "composer.uploading": "mengunggah...", + "composer.thumb_url_label": "Tempelkan URL gambar mini topik", + "composer.thumb_title": "Tambah gambar mini untuk topik ini", + "composer.thumb_url_placeholder": "http://example.com/thumb.png", + "composer.thumb_file_label": "Atau unggah sebuah berkas", + "composer.thumb_remove": "Hapus kolom", + "composer.drag_and_drop_images": "Geser dan Lepas Gambar di sini", + "more_users_and_guests": "%1 lebuh pengguna dan %2 tamu", + "more_users": "%1 lebih pengguna", + "more_guests": "%1 lebih tamu", + "users_and_others": "%1 dan %2 lainnya", + "sort_by": "Urutkan berdasakan", + "oldest_to_newest": "Terlama ke Terbaru", + "newest_to_oldest": "Terbaru ke Terlama", + "most_votes": "Vote terbanyak", + "most_posts": "Most posts" +} \ No newline at end of file diff --git a/public/language/id/unread.json b/public/language/id/unread.json new file mode 100644 index 0000000000..326f9d732b --- /dev/null +++ b/public/language/id/unread.json @@ -0,0 +1,9 @@ +{ + "title": "Belum Dibaca", + "no_unread_topics": "Tidak ada topik yang belum dibaca.", + "load_more": "Tampilkan Lebih Banyak", + "mark_as_read": "Tandai Sudah Dibaca", + "selected": "Terpilih", + "all": "Semua", + "topics_marked_as_read.success": "Topik ditandai sudah dibaca!" +} \ No newline at end of file diff --git a/public/language/id/user.json b/public/language/id/user.json new file mode 100644 index 0000000000..ce82e7888f --- /dev/null +++ b/public/language/id/user.json @@ -0,0 +1,80 @@ +{ + "banned": "Banned", + "offline": "Offline", + "username": "Nama Pengguna", + "joindate": "Join Date", + "postcount": "Post Count", + "email": "Email", + "confirm_email": "Konfirmasi Email", + "delete_account": "Hapus Akun", + "delete_account_confirm": "Kamu yakin ingin menghapus akunmu?
Tindakan ini tidak dapat dibatalkan dan kamu tidak dapat mengembalikan seluruh data mu

Masukkan nama pengguna kamu untuk memastikan jika kamu benar-benar ingin menghapus akun ini.", + "fullname": "Nama Lengkap", + "website": "Website", + "location": "Lokasi", + "age": "Umur", + "joined": "Tergabung", + "lastonline": "Online Terakhir", + "profile": "Profil", + "profile_views": "Tampilan profil", + "reputation": "Reputasi", + "favourites": "Favorit", + "watched": "Watched", + "followers": "Pengikut", + "following": "Mengikuti", + "signature": "Tanda Pengenal", + "gravatar": "Gravatar", + "birthday": "Hari Lahir", + "chat": "Percakapan", + "follow": "Ikuti", + "unfollow": "Tinggalkan", + "profile_update_success": "Profil berhasil diperbarui!", + "change_picture": "Ganti Gambar/Foto", + "edit": "Perbarui", + "uploaded_picture": "Gambar/Foto yang Diunggah", + "upload_new_picture": "Unggah Gambar/Foto Baru", + "upload_new_picture_from_url": "Unggah Gambar/Foto Baru dari URL", + "current_password": "Kata Sandi Saat Ini", + "change_password": "Ganti Kata Sandi", + "change_password_error": "Kata Sandi Salah!", + "change_password_error_wrong_current": "Kata Sandi kamu saat ini salah!", + "change_password_error_length": "Kata Sandi terlalu pendek!", + "change_password_error_match": "Kata Sandi harus sesuai!", + "change_password_error_privileges": "Kamu tidak memiliki hak untuk mengganti kata sandi ini.", + "change_password_success": "Kata Sandi kamu telah diperbarui!", + "confirm_password": "Konfirmasi Kata Sandi", + "password": "Kata Sandi", + "username_taken_workaround": "Nama pengguna yang kamu inginkan telah diambil, jadi kami merubahnya sedikit. Kamu saat ini dikenal sebagai %1", + "upload_picture": "Unggah gambar/foto", + "upload_a_picture": "Unggah sebuah gambar/foto", + "image_spec": "Kamu hanya diijinkan mengunggah berkas dengan format PNG, JPG, atau GIF", + "max": "maks.", + "settings": "Pengaturan", + "show_email": "Tampilkan Email Saya", + "show_fullname": "Tampilkan Nama Lengkap Saya", + "restrict_chats": "Hanya ijinkan pesan percakapan dari pengguna yang saya ikuti.", + "digest_label": "Berlangganan Digest", + "digest_description": "Berlangganan melalui email untuk forum ini (pemberitahuan baru dan topik) sesuai dengan pengaturan jadwal", + "digest_off": "Off", + "digest_daily": "Harian", + "digest_weekly": "Mingguan", + "digest_monthly": "Bulanan", + "send_chat_notifications": "Kirimkan email jika menerima pesan percakapan dan saya sedang tidak online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", + "has_no_follower": "User ini tidak memiliki pengikut :(", + "follows_no_one": "User ini tidak mengikuti seorangpun :(", + "has_no_posts": "User ini belum pernah membuat posting.", + "has_no_topics": "User ini belum pernah membuat topik.", + "has_no_watched_topics": "This user didn't watch any topics yet.", + "email_hidden": "Email Disembunyikan", + "hidden": "disembunyikan", + "paginate_description": "Gunakan halaman topik dan posting sebagai ganti penggunaan gulungan tanpa batas.", + "topics_per_page": "Topik per Halaman", + "posts_per_page": "Posting per Halaman", + "notification_sounds": "Mainkan suara saat kamu menerima pemberitahuan.", + "browsing": "Pengaturan Penelusuran", + "open_links_in_new_tab": "Buka tautan ke luar pada tab baru?", + "enable_topic_searching": "Gunakan Pencarian Di dalam Topik", + "topic_search_help": "Jika digunakan, pencarian di dalam topik akan mengambil alih tindakan pencarian default browser dan mengijinkan kamu untuk mencari keseluruhan topik sebagai pengganti pencarian hanya yang tampil pada layar saja.", + "follow_topics_you_reply_to": "Ikuti topik yang kamu balas.", + "follow_topics_you_create": "Ikuti topik yang kamu buat." +} \ No newline at end of file diff --git a/public/language/id/users.json b/public/language/id/users.json new file mode 100644 index 0000000000..783d9478f3 --- /dev/null +++ b/public/language/id/users.json @@ -0,0 +1,12 @@ +{ + "latest_users": "Pengguna Terakhir", + "top_posters": "Posting Terbanyak", + "most_reputation": "Reputasi Terbanyak", + "search": "Pencarian", + "enter_username": "Masukkan nama pengguna untuk mencari", + "load_more": "Tampilkan Lebih Banyak", + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" +} \ No newline at end of file diff --git a/public/language/it/category.json b/public/language/it/category.json index b88bdd54e0..5721f6eb3f 100644 --- a/public/language/it/category.json +++ b/public/language/it/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Nuova Discussione", + "guest-login-post": "Effettua il Log in per pubblicare", "no_topics": "Non ci sono discussioni in questa categoria.
Perché non ne inizi una?", "browsing": "visualizzando", "no_replies": "Nessuno ha risposto", diff --git a/public/language/it/email.json b/public/language/it/email.json index 7950641501..e351a25036 100644 --- a/public/language/it/email.json +++ b/public/language/it/email.json @@ -9,14 +9,19 @@ "reset.text1": "Abbiamo ricevuto una richiesta di reset della tua password, probabilmente perché l'hai dimenticata. Se non è così si prega di ignorare questa email.", "reset.text2": "Per confermare il reset della password per favore clicca il seguente link:", "reset.cta": "Clicca qui per resettare la tua password", + "reset.notify.subject": "Possword modificata con successo.", + "reset.notify.text1": "Ti informiamo che in data %1, la password è stata cambiata con successo.", + "reset.notify.text2": "Se non hai autorizzato questo, per favore notifica immediatamente un amministratore.", "digest.notifications": "Hai una notifica non letta da %1:", "digest.latest_topics": "Ultimi argomenti su %1", "digest.cta": "Clicca qui per visitare %1", "digest.unsub.info": "Questo sommario ti è stato inviato perché lo hai sottoscritto nelle tue impostazioni.", - "digest.no_topics": "There have been no active topics in the past %1", + "digest.no_topics": "Non ci sono state discussioni attive nell'ultimo %1", "notif.chat.subject": "Nuovo messaggio in chat da %1", "notif.chat.cta": "Clicca qui per continuare la conversazione", "notif.chat.unsub.info": "Questa notifica di chat ti è stata inviata perché l'hai scelta nelle impostazioni.", + "notif.post.cta": "Clicca qui per leggere il topic completo.", + "notif.post.unsub.info": "Questo post ti è stato notificato in base alle tue impostazioni di sottoscrizione.", "test.text1": "Questa è una email di test per verificare che il servizio di invio email è configurato correttamente sul tuo NodeBB.", "unsub.cta": "Clicca qui per modificare queste impostazioni", "closing": "Grazie!" diff --git a/public/language/it/error.json b/public/language/it/error.json index e1c46af192..cbcc20dedc 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -18,6 +18,9 @@ "username-taken": "Nome utente già preso", "email-taken": "Email già esistente", "email-not-confirmed": "La tua Email deve essere ancora confermata, per favore clicca qui per confermare la tua Email.", + "email-not-confirmed-chat": "Non potrai chattare finchè non avrai confermato la tua email", + "no-email-to-confirm": "Questo forum richiede la conferma dell'indirizzo email, per favore clicca qui per inserirne uno", + "email-confirm-failed": "Non possiamo confermare la tua email, per favore prova ancora più tardi.", "username-too-short": "Nome utente troppo corto", "username-too-long": "Nome utente troppo lungo", "user-banned": "Utente bannato", @@ -32,21 +35,29 @@ "no-emailers-configured": "Nessun plugin per le email è caricato, quindi la mail di test non può essere inviata", "category-disabled": "Categoria disabilitata", "topic-locked": "Discussione Bloccata", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Per favore attendere il completamento degli uploads.", "content-too-short": "Inserisci un post più lungo. Il Messaggio deve contenere almeno %1 caratteri.", + "content-too-long": "Per favore inserisci un post più breve. I post non possono essere più lunghi di %1 caratteri.", "title-too-short": "Inserisci un titolo più lungo. I titoli devono contenere almeno %1 caratteri.", "title-too-long": "Per favore inserire un titolo più corto, non può essere più lungo di %1 caratteri.", "too-many-posts": "È possibile inserire un Post ogni %1 secondi - si prega di attendere prima di postare di nuovo", - "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "too-many-posts-newbie": "Come nuovo utente puoi postare solamente una volta ogni %1 secondi finché non hai raggiunto un livello di reputazione %2 - per favore attendi prima di inviare ancora", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "La dimensione massima del file consentita è di % 1 kbs - si prega di caricare un file più piccolo", "cant-vote-self-post": "Non puoi votare il tuo stesso post", "already-favourited": "Hai già inserito tra i preferiti questo post", "already-unfavourited": "Hai già inserito tra i Non Preferiti questo post", "cant-ban-other-admins": "Non puoi bannare altri amministratori!", - "invalid-image-type": "Tipo di immagine invalido", + "invalid-image-type": "Tipo dell'immagine non valido. I tipi permessi sono: %1", + "invalid-image-extension": "Estensione immagine non valida", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Nome del Gruppo troppo corto", "group-already-exists": "Il Gruppo esiste già", "group-name-change-not-allowed": "Il cambio di nome al Gruppo non è consentito", + "group-already-member": "Fai già parte di questo gruppo", + "group-needs-owner": "Questo gruppo richiede almeno un proprietario.", "post-already-deleted": "Questo Post è già stato cancellato", "post-already-restored": "Questo Post è già stato ripristinato", "topic-already-deleted": "Questo Topic è già stato cancellato", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Le anteprime della Discussione sono disabilitate.", "invalid-file": "File non valido", "uploads-are-disabled": "Uploads disabilitati", - "upload-error": "Errore upload: %1", "signature-too-long": "Spiacenti, la tua firma non può essere lunga %1 caratteri.", "cant-chat-with-yourself": "Non puoi chattare con te stesso!", - "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "chat-restricted": "Questo utente ha ristretto i suoi messaggi in chat alle persone che segue. Per poter chattare con te ti deve prima seguire.", + "too-many-messages": "Hai inviato troppi messaggi, aspetta un attimo.", "reputation-system-disabled": "Il sistema di reputazione è disabilitato.", "downvoting-disabled": "Il Downvoting è disabilitato", "not-enough-reputation-to-downvote": "Non hai i privilegi per votare negativamente questo post", "not-enough-reputation-to-flag": "Tu non hai abbastanza reputazione per segnalare questo Post", "reload-failed": "NodeBB ha incontrato un problema durante il ricaricamento: \"%1\". NodeBB continuerà a servire gli assets esistenti lato client, così puoi annullare quello che hai fatto prima di ricaricare.", - "registration-error": "Registration Error" + "registration-error": "Errore nella registrazione", + "parse-error": "Qualcosa è andato storto durante l'analisi della risposta proveniente dal server", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Per favore usa il tuo nome utente per accedere" } \ No newline at end of file diff --git a/public/language/it/global.json b/public/language/it/global.json index 67a1cbdec4..ed27a9340d 100644 --- a/public/language/it/global.json +++ b/public/language/it/global.json @@ -3,9 +3,10 @@ "search": "Cerca", "buttons.close": "Chiudi", "403.title": "Accesso Proibito", - "403.message": "Non hai accesso alla pagina che stavi cercando di aprire. Probabilmente devi effettuare il log in?", + "403.message": "Sembra tu sia arrivato ad una pagina a cui non hai accesso.", + "403.login": "Forse dovresti effettuare l'accesso?", "404.title": "Non trovato", - "404.message": "La pagina che stavi cercando di aprire non esiste. Ritorna alla pagina iniziale.", + "404.message": "Sembra tu sia arrivato ad una pagina che non esiste. Torna alla home page.", "500.title": "Errore interno.", "500.message": "Oops! Qualcosa non funziona come si deve!", "register": "Registrazione", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "Popolare", "header.users": "Utenti", + "header.groups": "Gruppi", "header.chats": "Messaggi", "header.notifications": "Notifiche", "header.search": "Cerca", @@ -55,7 +57,7 @@ "posted_in_ago_by": "postato in %1 %2 da %3", "posted_in_ago": "postato in %1 %2", "replied_ago": "risposto %1", - "user_posted_ago": "%1 postato %2", + "user_posted_ago": "%1 ha postato %2", "guest_posted_ago": "Ospite ha scritto %1", "last_edited_by_ago": "ultima modifica di %1 %2", "norecentposts": "Nessun Post Recente", @@ -73,5 +75,7 @@ "updated.title": "Forum Aggiornato", "updated.message": "Questo forum è stato aggiornato all'ultima versione. Clicca qui per ricaricare la pagina.", "privacy": "Privacy", - "delete_all": "Delete All" + "follow": "Segui", + "unfollow": "Non seguire", + "delete_all": "Elimina Tutto" } \ No newline at end of file diff --git a/public/language/it/groups.json b/public/language/it/groups.json index 97a2c0cbc6..96b915d56e 100644 --- a/public/language/it/groups.json +++ b/public/language/it/groups.json @@ -1,8 +1,34 @@ { "groups": "Gruppi", "view_group": "Vedi Gruppo", + "owner": "Proprietario del Gruppo", + "new_group": "Crea Nuovo Gruppo", + "no_groups_found": "Non ci sono gruppi da vedere", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop una fotografia, spostarla ad una posizione, e premere Salva", + "cover-change": "Cambia", + "cover-save": "Salva", + "cover-saving": "Salvando", "details.title": "Dettagli Gruppo", "details.members": "Lista Membri", + "details.pending": "Membri in attesa", "details.has_no_posts": "I membri di questo gruppo non hanno ancora postato.", - "details.latest_posts": "Ultimi Post" + "details.latest_posts": "Ultimi Post", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Amministratore del Grupo", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "I dettagli del Gruppo sono stati aggiornati", + "event.deleted": "Il gruppo \"%1\" è stato eliminato" } \ No newline at end of file diff --git a/public/language/it/language.json b/public/language/it/language.json index b749dfac01..76bc29d1e3 100644 --- a/public/language/it/language.json +++ b/public/language/it/language.json @@ -1,5 +1,5 @@ { "name": "Italiano", - "code": "it_IT", + "code": "it", "dir": "ltr" } \ No newline at end of file diff --git a/public/language/it/login.json b/public/language/it/login.json index c4961f6221..75747e30d1 100644 --- a/public/language/it/login.json +++ b/public/language/it/login.json @@ -1,5 +1,7 @@ { - "username": "Nome utente / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Ricordami?", "forgot_password": "Password dimenticata?", "alternative_logins": "Accessi Alternativi", diff --git a/public/language/it/notifications.json b/public/language/it/notifications.json index f888a9a744..c3f067b0cf 100644 --- a/public/language/it/notifications.json +++ b/public/language/it/notifications.json @@ -2,6 +2,7 @@ "title": "Notifiche", "no_notifs": "Non hai nuove notifiche", "see_all": "Vedi tutte le Notifiche", + "mark_all_read": "Segna tutte le notifiche come già lette", "back_to_home": "Indietro a %1", "outgoing_link": "Link in uscita", "outgoing_link_message": "Stai lasciando %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 ha iniziato a seguirti.", "email-confirmed": "Email Confermata", "email-confirmed-message": "Grazie per aver validato la tua email. Il tuo account è ora completamente attivato.", - "email-confirm-error": "Si è verificato un errore...", "email-confirm-error-message": "C'è stato un problema nella validazione del tuo indirizzo email. Potrebbe essere il codice non valido o scaduto.", "email-confirm-sent": "Email di conferma inviata." } \ No newline at end of file diff --git a/public/language/it/pages.json b/public/language/it/pages.json index 38c22f82b7..3d3ed9865a 100644 --- a/public/language/it/pages.json +++ b/public/language/it/pages.json @@ -11,6 +11,7 @@ "user.followers": "Persone che seguono %1", "user.posts": "Post creati da %1", "user.topics": "Discussioni create da %1", + "user.groups": "%1's Gruppi", "user.favourites": "Post Favoriti da %1", "user.settings": "Impostazioni Utente", "maintenance.text": "%1 è attualmente in manutenzione. Per favore ritorna più tardi.", diff --git a/public/language/it/recent.json b/public/language/it/recent.json index fb552194e3..bf4485644c 100644 --- a/public/language/it/recent.json +++ b/public/language/it/recent.json @@ -5,5 +5,15 @@ "month": "Mese", "year": "Anno", "alltime": "Sempre", - "no_recent_topics": "Non ci sono discussioni recenti." + "no_recent_topics": "Non ci sono discussioni recenti.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "C'è un nuovo topic.", + "there-is-a-new-topic-and-a-new-post": "C'è un nuovo topic e un nuovo post.", + "there-is-a-new-topic-and-new-posts": "C'è una nuova discussione e %1 nuovi post.", + "there-are-new-topics": "Ci sono %1 nuove discussioni.", + "there-are-new-topics-and-a-new-post": "Ci sono %1 nuove discussioni e un nuovo post.", + "there-are-new-topics-and-new-posts": "Ci sono %1 nuove discussioni e %2 nuovi post.", + "there-is-a-new-post": "C'è un nuovo post.", + "there-are-new-posts": "Ci sono %1 nuovi post.", + "click-here-to-reload": "Clicca qui per ricaricare." } \ No newline at end of file diff --git a/public/language/it/reset_password.json b/public/language/it/reset_password.json index 9340714167..d89642e43b 100644 --- a/public/language/it/reset_password.json +++ b/public/language/it/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Inserisci il tuo indirizzo email e ti invieremo un'email con le istruzioni per resettare il tuo account.", "enter_email_address": "Inserisci l'Indirizzo Email", "password_reset_sent": "Password Reset Inviata", - "invalid_email": "Email invalida / L'email non esiste!" + "invalid_email": "Email invalida / L'email non esiste!", + "password_too_short": "La password inserita è troppo corta, inserisci una password differente.", + "passwords_do_not_match": "Le due password che hai inserito non corrispondono." } \ No newline at end of file diff --git a/public/language/it/search.json b/public/language/it/search.json index 957b7557b1..14ddeaa98a 100644 --- a/public/language/it/search.json +++ b/public/language/it/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 risultato(i) corrispondente(i) \"%2\", (%3 secondi)", - "no-matches": "Nessun post trovato" + "no-matches": "Nessuna corrispondenza trovata", + "in": "In", + "by": "Da", + "titles": "Titoli", + "titles-posts": "Titoli e Messaggi", + "posted-by": "Pubblicato da", + "in-categories": "In Categorie", + "search-child-categories": "Search child categories", + "reply-count": "Numero Risposte", + "at-least": "Almeno", + "at-most": "Al massimo", + "post-time": "Ora invio", + "newer-than": "Più nuovi di", + "older-than": "Più vecchi di", + "any-date": "Qualsiasi data", + "yesterday": "Ieri", + "one-week": "Una settimana", + "two-weeks": "Due settimane", + "one-month": "Un mese", + "three-months": "Tre mesi", + "six-months": "Sei mesi", + "one-year": "Un anno", + "sort-by": "Ordina per", + "last-reply-time": "Last reply time", + "topic-title": "Titolo argomento", + "number-of-replies": "Numero di risposte", + "number-of-views": "Numero di visite", + "topic-start-date": "Data inizio argomento", + "username": "Nome utente", + "category": "Categoria", + "descending": "In ordine decrescente", + "ascending": "In ordine crescente", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/it/tags.json b/public/language/it/tags.json index f8f88265a4..c3364a0bbf 100644 --- a/public/language/it/tags.json +++ b/public/language/it/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Non ci sono discussioni con questo tag.", "tags": "Tags", - "enter_tags_here": "Inserire qui i tags. Premere invio dopo ogni tag.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Inserisci i tags...", "no_tags": "Non ci sono ancora tags." } \ No newline at end of file diff --git a/public/language/it/topic.json b/public/language/it/topic.json index c4c75dd5d8..e53ac5c6f2 100644 --- a/public/language/it/topic.json +++ b/public/language/it/topic.json @@ -12,6 +12,7 @@ "notify_me": "Ricevi notifiche di nuove risposte in questa discussione", "quote": "Cita", "reply": "Rispondi", + "guest-login-reply": "Effettua il Log in per rispondere", "edit": "Modifica", "delete": "Cancella", "purge": "Svuota", @@ -74,6 +75,7 @@ "fork_no_pids": "Nessun post selezionato!", "fork_success": "Topic Diviso con successo ! Clicca qui per andare al Topic Diviso.", "composer.title_placeholder": "Inserisci qui il titolo della discussione...", + "composer.handle_placeholder": "Nome", "composer.discard": "Annulla", "composer.submit": "Invia", "composer.replying_to": "Rispondendo a %1", @@ -92,5 +94,6 @@ "sort_by": "Ordina per", "oldest_to_newest": "Da Vecchi a Nuovi", "newest_to_oldest": "Da Nuovi a Vecchi", - "most_votes": "Più votati" + "most_votes": "Più votati", + "most_posts": "Ulteriori post" } \ No newline at end of file diff --git a/public/language/it/user.json b/public/language/it/user.json index 020c2d3b4b..e93be01541 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -2,6 +2,8 @@ "banned": "Bannato", "offline": "Non in linea", "username": "Nome Utente", + "joindate": "Data di adesione", + "postcount": "Numero post", "email": "Email", "confirm_email": "Conferma Email", "delete_account": "Elimina Account", @@ -16,6 +18,7 @@ "profile_views": "Visite al profilo", "reputation": "Reputazione", "favourites": "Favoriti", + "watched": "Osservati", "followers": "Da chi è seguito", "following": "Chi segue", "signature": "Firma", @@ -48,7 +51,7 @@ "settings": "Impostazioni", "show_email": "Mostra la mia Email", "show_fullname": "Vedi il Mio Nome Completo", - "restrict_chats": "Only allow chat messages from users I follow", + "restrict_chats": "Abilita messaggi in chat soltanto dagli utenti che seguo", "digest_label": "Iscriviti al Sommario", "digest_description": "Abbonati agli aggiornamenti via email di questo forum (nuove notifiche e argomenti) secondo una pianificazione impostata", "digest_off": "Spento", @@ -56,10 +59,12 @@ "digest_weekly": "Settimanale", "digest_monthly": "Mensile", "send_chat_notifications": "Invia una email se arriva un nuovo messaggio di chat e non sono online", + "send_post_notifications": "Invia una email quando le risposte sono fatte a discussioni a cui sono sottoscritto", "has_no_follower": "Questo utente non è seguito da nessuno :(", "follows_no_one": "Questo utente non segue nessuno :(", "has_no_posts": "Questo utente non ha ancora postato nulla.", "has_no_topics": "Questo utente non ha ancora avviato discussioni.", + "has_no_watched_topics": "Questo utente non sta ancora osservando alcuna discussione.", "email_hidden": "Email Nascosta", "hidden": "nascosta", "paginate_description": "Dividi discussioni e post in pagine anziché usare lo scroll infinito.", @@ -68,8 +73,8 @@ "notification_sounds": "Riproduci un suono quando ricevi una notifica.", "browsing": "Impostazioni di Navigazione", "open_links_in_new_tab": "Aprire i link esterni in una nuova 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.", + "enable_topic_searching": "Abilita la ricerca negli argomenti", + "topic_search_help": "Se abilitata, la ricerca negli argomenti sovrascriverà la pagina di ricerca preimpostata del browser per consentirti di cercare all'interno delle discussioni, anziché soltanto nel contenuto visibile a schermo.", "follow_topics_you_reply_to": "Segui le discussioni in cui rispondi.", "follow_topics_you_create": "Segui le discussioni che crei." } \ No newline at end of file diff --git a/public/language/it/users.json b/public/language/it/users.json index e8fda0d3a8..4774dd2909 100644 --- a/public/language/it/users.json +++ b/public/language/it/users.json @@ -5,5 +5,8 @@ "search": "Cerca", "enter_username": "Inserisci il nome utente da cercare", "load_more": "Carica altri", - "users-found-search-took": "%1 utente(i) trovati! La ricerca ha impiegato %2 ms." + "users-found-search-took": "%1 utente(i) trovati! La ricerca ha impiegato %2 secondi.", + "filter-by": "Filtra per", + "online-only": "Solo online", + "picture-only": "Solo con foto" } \ No newline at end of file diff --git a/public/language/ja/category.json b/public/language/ja/category.json index c5ffc01c13..6fbd386dac 100644 --- a/public/language/ja/category.json +++ b/public/language/ja/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "新規スレッド", + "guest-login-post": "Log in to post", "no_topics": "まだスレッドはありません.
一番目のスレッドを書いてみないか?", "browsing": "閲覧中", "no_replies": "返事はまだありません", diff --git a/public/language/ja/email.json b/public/language/ja/email.json index fdbfb006c6..f290435e75 100644 --- a/public/language/ja/email.json +++ b/public/language/ja/email.json @@ -9,6 +9,9 @@ "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", "reset.cta": "Click here to reset your password", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", "digest.cta": "Click here to visit %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "New chat message received from %1", "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", "unsub.cta": "Click here to alter those settings", "closing": "Thanks!" diff --git a/public/language/ja/error.json b/public/language/ja/error.json index 62e49edc51..95cf6728ac 100644 --- a/public/language/ja/error.json +++ b/public/language/ja/error.json @@ -18,6 +18,9 @@ "username-taken": "ユーザー名が取られた", "email-taken": "メールアドレスが使用された", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", "username-too-long": "Username too long", "user-banned": "ユーザーが停止された", @@ -32,21 +35,29 @@ "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "この板は無効された", "topic-locked": "スレッドがロックされた", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "アップロードが完成するまでお待ちください。", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "タイトルに最大 %1 文字の制限があります。", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "自分のポストに評価することはできません。", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "ほかの管理者を停止することはできません!", - "invalid-image-type": "無効なユーザータイプ", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "グループ名は短すぎます。", "group-already-exists": "グループ名はすでに存在しています", "group-name-change-not-allowed": "グループ名の修正はできません", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "スレッドのサムネイルが無効された", "invalid-file": "無効なファイル", "uploads-are-disabled": "アップロードが無効された", - "upload-error": "Upload Error : %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "自分にチャットすることはできません!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/ja/global.json b/public/language/ja/global.json index fa13085f7d..f0f54776bb 100644 --- a/public/language/ja/global.json +++ b/public/language/ja/global.json @@ -3,9 +3,10 @@ "search": "検索", "buttons.close": "閉じる", "403.title": "アクセス拒否", - "403.message": "アクセスが拒否されました.ログインしますか?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "見つかりません", - "404.message": "アクセスしようとしていたページは存在しません.ホームへ", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "内部エラー", "500.message": "何とも言えない障害が発生しているようです.m(_ _)m", "register": "登録", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "人気", "header.users": "ユーザー", + "header.groups": "Groups", "header.chats": "チャット", "header.notifications": "通知", "header.search": "検索", @@ -73,5 +75,7 @@ "updated.title": "Forum Updated", "updated.message": "This forum has just been updated to the latest version. Click here to refresh the page.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/ja/groups.json b/public/language/ja/groups.json index bf69c732b0..d2314fdc29 100644 --- a/public/language/ja/groups.json +++ b/public/language/ja/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "View Group", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Group Details", "details.members": "Member List", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Latest Posts", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/ja/login.json b/public/language/ja/login.json index 915c86a4cd..82a18ea9b1 100644 --- a/public/language/ja/login.json +++ b/public/language/ja/login.json @@ -1,5 +1,7 @@ { - "username": "ユーザー名 / メール", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "ログイン情報を記憶", "forgot_password": "パスワードがわからない?", "alternative_logins": "ほかのログイン方法", diff --git a/public/language/ja/notifications.json b/public/language/ja/notifications.json index 80467939b6..6677d832e2 100644 --- a/public/language/ja/notifications.json +++ b/public/language/ja/notifications.json @@ -2,6 +2,7 @@ "title": "通知センター", "no_notifs": "新しい通知はありません", "see_all": "すべての通知を確認", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "外部サイトへのリンク", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Email Confirmed", "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", "email-confirm-sent": "Confirmation email sent." } \ No newline at end of file diff --git a/public/language/ja/pages.json b/public/language/ja/pages.json index e4534d567d..eb5274c6f1 100644 --- a/public/language/ja/pages.json +++ b/public/language/ja/pages.json @@ -11,6 +11,7 @@ "user.followers": "%1のフォロワー", "user.posts": "%1が作成したポスト", "user.topics": "%1が作成したスレッド", + "user.groups": "%1's Groups", "user.favourites": "%1のお気に入りポスト", "user.settings": "ユーザー設定", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/ja/recent.json b/public/language/ja/recent.json index 35cdd2b23f..5b76f5d6fc 100644 --- a/public/language/ja/recent.json +++ b/public/language/ja/recent.json @@ -5,5 +5,15 @@ "month": "最近 1 ヶ月", "year": "Year", "alltime": "All Time", - "no_recent_topics": "最近のスレッドはありません。" + "no_recent_topics": "最近のスレッドはありません。", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/ja/reset_password.json b/public/language/ja/reset_password.json index c732e9e159..7e31c22720 100644 --- a/public/language/ja/reset_password.json +++ b/public/language/ja/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "メールアドレスを入力してください.パスワードリセットの指示をメールでご送付します。", "enter_email_address": "メールアドレスを入力してください", "password_reset_sent": "パスワードリセットのメールを送信しました", - "invalid_email": "このメールアドレスは存在しません" + "invalid_email": "このメールアドレスは存在しません", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/ja/search.json b/public/language/ja/search.json index e9eef4632a..9dad8b6eab 100644 --- a/public/language/ja/search.json +++ b/public/language/ja/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/ja/tags.json b/public/language/ja/tags.json index d2e9a213ac..aa9f14c70c 100644 --- a/public/language/ja/tags.json +++ b/public/language/ja/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. Press enter after each tag.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/ja/topic.json b/public/language/ja/topic.json index d759a07e46..680b10b702 100644 --- a/public/language/ja/topic.json +++ b/public/language/ja/topic.json @@ -12,6 +12,7 @@ "notify_me": "このスレッドに新しいポストが投稿された際に通知する", "quote": "引用", "reply": "返答", + "guest-login-reply": "Log in to reply", "edit": "編集", "delete": "削除", "purge": "Purge", @@ -74,6 +75,7 @@ "fork_no_pids": "ポストが選択されていません!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "スレッドのタイトルを入力して...", + "composer.handle_placeholder": "Name", "composer.discard": "破棄する", "composer.submit": "保存する", "composer.replying_to": "%1へ返答中", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/ja/user.json b/public/language/ja/user.json index d73f31b7da..0b2b065a94 100644 --- a/public/language/ja/user.json +++ b/public/language/ja/user.json @@ -2,6 +2,8 @@ "banned": "停止された", "offline": "オフライン", "username": "ユーザー名", + "joindate": "Join Date", + "postcount": "Post Count", "email": "メール", "confirm_email": "Confirm Email", "delete_account": "Delete Account", @@ -16,6 +18,7 @@ "profile_views": "閲覧数", "reputation": "評価", "favourites": "お気に入り", + "watched": "Watched", "followers": "フォロワー", "following": "フォロー中", "signature": "署名", @@ -56,10 +59,12 @@ "digest_weekly": "ウィークリー", "digest_monthly": "マンスリー", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "フォロワーはまだいません :(", "follows_no_one": "フォロー中のユーザーはまだいません :(", "has_no_posts": "まだポストを投稿したことありません。", "has_no_topics": "まだスレッドを作成したありません。", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "メールアドレスを非表示", "hidden": "非表示", "paginate_description": "スクロールでのページ自動ロードはしない", diff --git a/public/language/ja/users.json b/public/language/ja/users.json index ac5553dbb9..6d73cf0513 100644 --- a/public/language/ja/users.json +++ b/public/language/ja/users.json @@ -5,5 +5,8 @@ "search": "検索", "enter_username": "検索するユーザー名を入力してください", "load_more": "もっと表示", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/ko/category.json b/public/language/ko/category.json index 1ceaddb7ac..3518e3a3d1 100644 --- a/public/language/ko/category.json +++ b/public/language/ko/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "새 주제 생성", + "guest-login-post": "Log in to post", "no_topics": "이 카테고리에는 생성된 주제가 없습니다.
먼저 주제를 생성해 보세요.", "browsing": "이 주제를 읽고 있는 사용자", "no_replies": "답글이 없습니다.", diff --git a/public/language/ko/email.json b/public/language/ko/email.json index 0142a60205..1c5032db35 100644 --- a/public/language/ko/email.json +++ b/public/language/ko/email.json @@ -9,6 +9,9 @@ "reset.text1": "패스워드 재설정 요청을 받았습니다. 패스워드를 분실해서 요청한 것이 아니라면 이 메일을 무시하셔도 좋습니다.", "reset.text2": "패스워드를 재설정하려면 다음 링크를 클릭하세요.", "reset.cta": "패스워드를 재설정하려면 여기를 클릭하세요.", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "%1에 읽지 않은 게시물이 있습니다.", "digest.latest_topics": "%1의 최근 주제", "digest.cta": "%1에 방문하시려면 클릭하세요.", @@ -17,6 +20,8 @@ "notif.chat.subject": "%1님이 채팅 메시지를 보냈습니다.", "notif.chat.cta": "대화를 계속하려면 여기를 클릭하세요.", "notif.chat.unsub.info": "이 채팅 알림은 사용자 설정에 따라 전송되었습니다.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "이 메일은 NodeBB에 메일러가 정상적으로 설치되었는지 확인할 테스트 용도로 발송되었습니다.", "unsub.cta": "설정을 변경하려면 여기를 클릭하세요.", "closing": "감사합니다!" diff --git a/public/language/ko/error.json b/public/language/ko/error.json index 196a067318..bf1eb8d8e4 100644 --- a/public/language/ko/error.json +++ b/public/language/ko/error.json @@ -18,6 +18,9 @@ "username-taken": "이미 사용 중인 사용자 이름입니다.", "email-taken": "이미 사용 중인 이메일입니다.", "email-not-confirmed": "아직 이메일이 인증되지 않았습니다. 여기를 누르면 인증 메일을 발송할 수 있습니다.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "사용자 이름이 너무 짧습니다.", "username-too-long": "사용자 이름이 너무 깁니다.", "user-banned": "차단된 사용자입니다.", @@ -32,21 +35,29 @@ "no-emailers-configured": "이메일 추가기능이 로드되지 않았으므로 테스트 메일을 발송할 수 없습니다.", "category-disabled": "비활성화된 카테고리입니다.", "topic-locked": "잠긴 주제입니다.", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "업로드가 끝날 때까지 기다려 주세요.", "content-too-short": "게시물의 내용이 너무 짧습니다. 최소 %1자 이상이어야 합니다.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "제목이 너무 짧습니다. 최소 %1자 이상이어야 합니다.", "title-too-long": "제목은 최대 %1자로 제한됩니다.", "too-many-posts": "새 게시물 작성은 %1초 간격으로 제한됩니다 - 잠시 기다렸다가 작성해주세요.", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "파일의 크기는 최대 %1KB로 제한됩니다 - 더 작은 파일을 업로드하세요.", "cant-vote-self-post": "자신의 게시물에는 투표할 수 없습니다.", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "다른 관리자를 차단할 수 없습니다.", - "invalid-image-type": "올바르지 않은 이미지입니다.", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "그룹 이름이 너무 짧습니다.", "group-already-exists": "이미 존재하는 그룹입니다.", "group-name-change-not-allowed": "금지된 그룹 이름입니다.", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "이미 삭제된 게시물입니다.", "post-already-restored": "이미 복원된 게시물입니다.", "topic-already-deleted": "이미 삭제된 주제입니다.", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "주제 섬네일이 이미 해제되었습니다.", "invalid-file": "올바르지 않은 파일입니다.", "uploads-are-disabled": "업로드는 비활성화되어 있습니다.", - "upload-error": "업로드 오류가 발생했습니다. : %1", "signature-too-long": "죄송합니다. 서명은 최대 %1자로 제한됩니다.", "cant-chat-with-yourself": "자신과는 채팅할 수 없습니다.", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "인기도 시스템을 사용하지 않습니다.", "downvoting-disabled": "비추천 기능을 사용하지 않습니다.", "not-enough-reputation-to-downvote": "인기도가 낮아 이 게시물에 반대할 수 없습니다.", "not-enough-reputation-to-flag": "인기도가 낮아 이 게시물을 신고할 수 없습니다.", "reload-failed": "NodeBB를 다시 읽어들이는 중 다음과 같은 문제가 발생했습니다. \"%1\" 다시 읽어들이기 직전에 했던 동작은 되돌리세요. 클라이언트측 자원은 문제없이 계속 전송됩니다.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/ko/global.json b/public/language/ko/global.json index d3659fd163..d5c5787e33 100644 --- a/public/language/ko/global.json +++ b/public/language/ko/global.json @@ -3,9 +3,10 @@ "search": "검색", "buttons.close": "닫기", "403.title": "접근이 거부되었습니다.", - "403.message": "접근 권한이 없는 페이지에 접근하였습니다. 로그인되어 있는지 확인해 주세요.", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "페이지를 찾을 수 없습니다.", - "404.message": "존재하지 않는 페이지에 접근하였습니다. 홈으로 돌아갈 수 있습니다.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "내부 오류가 발생했습니다.", "500.message": "알 수 없는 오류가 발생했습니다.", "register": "회원가입", @@ -26,6 +27,7 @@ "header.tags": "태그", "header.popular": "인기 주제", "header.users": "사용자", + "header.groups": "Groups", "header.chats": "채팅", "header.notifications": "알림", "header.search": "검색", @@ -73,5 +75,7 @@ "updated.title": "포럼이 업데이트 되었습니다.", "updated.message": "이 포럼은 지금 최신 버전으로 업데이트 되었습니다. 여기를 누르면 페이지를 새로고침합니다.", "privacy": "개인정보", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/ko/groups.json b/public/language/ko/groups.json index bf61efd9a0..a3383c2ce2 100644 --- a/public/language/ko/groups.json +++ b/public/language/ko/groups.json @@ -1,8 +1,34 @@ { "groups": "그룹", "view_group": "그룹 보기", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "그룹 상세정보", "details.members": "구성원 목록", + "details.pending": "Pending Members", "details.has_no_posts": "이 그룹의 구성원이 작성한 게시물이 없습니다.", - "details.latest_posts": "최근 게시물" + "details.latest_posts": "최근 게시물", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/ko/login.json b/public/language/ko/login.json index 2898cb892d..736c28484f 100644 --- a/public/language/ko/login.json +++ b/public/language/ko/login.json @@ -1,5 +1,7 @@ { - "username": "사용자 이름 / 이메일", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "로그인 유지", "forgot_password": "비밀번호 초기화", "alternative_logins": "다른 방법으로 로그인", diff --git a/public/language/ko/notifications.json b/public/language/ko/notifications.json index 9489b51e45..d0240f52ae 100644 --- a/public/language/ko/notifications.json +++ b/public/language/ko/notifications.json @@ -2,6 +2,7 @@ "title": "알림", "no_notifs": "새 알림이 없습니다.", "see_all": "모든 알림 보기", + "mark_all_read": "Mark all notifications read", "back_to_home": "%1로 돌아가기", "outgoing_link": "외부 링크", "outgoing_link_message": "%1에서 다른 사이트로 이동합니다.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1님이 나를 팔로우합니다.", "email-confirmed": "확인된 이메일", "email-confirmed-message": "이메일을 확인해주셔서 감사합니다. 계정이 완전히 활성화되었습니다.", - "email-confirm-error": "에러가 발생했습니다...", "email-confirm-error-message": "이메일 주소를 검증하지 못했습니다. 코드가 올바르지 않거나 만료되었을 수 있습니다.", "email-confirm-sent": "확인 이메일이 발송되었습니다." } \ No newline at end of file diff --git a/public/language/ko/pages.json b/public/language/ko/pages.json index 570f5b22f5..ce1f9e5a05 100644 --- a/public/language/ko/pages.json +++ b/public/language/ko/pages.json @@ -11,6 +11,7 @@ "user.followers": "%1님을 팔로우하는 사용자", "user.posts": "%1님이 작성한 게시물", "user.topics": "%1님이 생성한 주제", + "user.groups": "%1's Groups", "user.favourites": "%1님이 좋아하는 게시물", "user.settings": "설정", "maintenance.text": "%1 사이트는 현재 점검 중입니다. 나중에 다시 방문해주세요.", diff --git a/public/language/ko/recent.json b/public/language/ko/recent.json index 132e17f5c8..9fdf7af769 100644 --- a/public/language/ko/recent.json +++ b/public/language/ko/recent.json @@ -5,5 +5,15 @@ "month": "월간", "year": "연간", "alltime": "전체", - "no_recent_topics": "최근 생성된 주제가 없습니다." + "no_recent_topics": "최근 생성된 주제가 없습니다.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/ko/reset_password.json b/public/language/ko/reset_password.json index d229a5a931..60fe18c8e5 100644 --- a/public/language/ko/reset_password.json +++ b/public/language/ko/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "이메일 주소를 입력하면 비밀번호를 초기화하는 방법을 메일로 알려드립니다.", "enter_email_address": "여기에 이메일 주소를 입력하세요.", "password_reset_sent": "이메일이 발송되었습니다.", - "invalid_email": "올바르지 않거나 가입되지 않은 이메일입니다." + "invalid_email": "올바르지 않거나 가입되지 않은 이메일입니다.", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/ko/search.json b/public/language/ko/search.json index 2a523478a5..3ec01cd868 100644 --- a/public/language/ko/search.json +++ b/public/language/ko/search.json @@ -1,4 +1,40 @@ { "results_matching": "\"%2\"와 일치하는 %1개의 결과를 찾았습니다 (검색시간: %3초)", - "no-matches": "게시물이 없습니다." + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/ko/tags.json b/public/language/ko/tags.json index a1e86639cb..a50fc5e9e1 100644 --- a/public/language/ko/tags.json +++ b/public/language/ko/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "이 태그에 해당하는 주제가 없습니다.", "tags": "태그", - "enter_tags_here": "태그를 여기에 입력하세요. 태그 한 개마다 엔터를 누르세요.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "태그 입력...", "no_tags": "아직 아무런 태그도 없습니다." } \ No newline at end of file diff --git a/public/language/ko/topic.json b/public/language/ko/topic.json index a3cbbdc7e5..56714d7a0a 100644 --- a/public/language/ko/topic.json +++ b/public/language/ko/topic.json @@ -12,6 +12,7 @@ "notify_me": "이 주제의 새 답글 알리기", "quote": "인용", "reply": "답글", + "guest-login-reply": "Log in to reply", "edit": "수정", "delete": "삭제", "purge": "폐기", @@ -74,6 +75,7 @@ "fork_no_pids": "게시물이 선택되지 않았습니다.", "fork_success": "주제가 분리되었습니다! 분리된 주제를 보려면 여기를 클릭하세요.", "composer.title_placeholder": "여기에 제목을 입력하세요.", + "composer.handle_placeholder": "Name", "composer.discard": "취소", "composer.submit": "등록", "composer.replying_to": "'%1'에 대한 답글", @@ -92,5 +94,6 @@ "sort_by": "정렬", "oldest_to_newest": "오래된 순으로 정렬", "newest_to_oldest": "최신 순으로 정렬", - "most_votes": "추천수 순으로 정렬" + "most_votes": "추천수 순으로 정렬", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/ko/user.json b/public/language/ko/user.json index c0f0d5d3dd..c656a64242 100644 --- a/public/language/ko/user.json +++ b/public/language/ko/user.json @@ -2,6 +2,8 @@ "banned": "차단됨", "offline": "오프라인", "username": "사용자 이름", + "joindate": "Join Date", + "postcount": "Post Count", "email": "이메일", "confirm_email": "이메일 확인", "delete_account": "계정 삭제", @@ -16,6 +18,7 @@ "profile_views": "프로필 조회 수", "reputation": "인기도", "favourites": "좋아요", + "watched": "Watched", "followers": "이 사용자를 팔로우", "following": "이 사용자가 팔로우", "signature": "서명", @@ -56,10 +59,12 @@ "digest_weekly": "매주", "digest_monthly": "매월", "send_chat_notifications": "오프라인일 때 채팅 메시지가 도착하면 알림 메일을 보냅니다.", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "아무도 이 사용자를 팔로우하지 않습니다.", "follows_no_one": "이 사용자는 아무도 팔로우하지 않습니다.", "has_no_posts": "이 사용자는 게시물을 작성하지 않았습니다.", "has_no_topics": "이 사용자는 주제를 생성하지 않았습니다.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "이메일 비공개", "hidden": "비공개", "paginate_description": "주제와 게시물을 여러 페이지로 나누어 표시", diff --git a/public/language/ko/users.json b/public/language/ko/users.json index 0f0d1bfe91..9135621eb6 100644 --- a/public/language/ko/users.json +++ b/public/language/ko/users.json @@ -5,5 +5,8 @@ "search": "검색", "enter_username": "검색할 사용자 이름을 입력하세요.", "load_more": "더 보기", - "users-found-search-took": "%1명의 사용자를 찾았습니다! 검색에 %2 ms가 소요되었습니다." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/lt/category.json b/public/language/lt/category.json index 1c9dd0899b..3694a767a7 100644 --- a/public/language/lt/category.json +++ b/public/language/lt/category.json @@ -1,8 +1,9 @@ { "new_topic_button": "Nauja tema", + "guest-login-post": "Prisijungti įrašų paskelbimui", "no_topics": "Šioje kategorijoje temų nėra.
Kodėl gi jums nesukūrus naujos?", "browsing": "naršo", "no_replies": "Niekas dar neatsakė", "share_this_category": "Pasidalinti šią kategoriją", - "ignore": "Ignore" + "ignore": "Nepaisyti" } \ No newline at end of file diff --git a/public/language/lt/email.json b/public/language/lt/email.json index fdbfb006c6..af0968b55e 100644 --- a/public/language/lt/email.json +++ b/public/language/lt/email.json @@ -1,23 +1,28 @@ { "password-reset-requested": "Password Reset Requested - %1!", - "welcome-to": "Welcome to %1", - "greeting_no_name": "Hello", - "greeting_with_name": "Hello %1", + "welcome-to": "Sveiki atvykę į %1", + "greeting_no_name": "Sveiki", + "greeting_with_name": "Sveiki %1", "welcome.text1": "Thank you for registering with %1!", "welcome.text2": "To fully activate your account, we need to verify that you own the email address you registered with.", - "welcome.cta": "Click here to confirm your email address", + "welcome.cta": "El. adreso patvirtinimui spauskite čia", "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", - "reset.cta": "Click here to reset your password", - "digest.notifications": "You have unread notifications from %1:", + "reset.cta": "Slaptažodžio atstatymui spauskite čia", + "reset.notify.subject": "Slaptažodis sėkmingai pakeistas", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "digest.notifications": "Turite neskaitytų pranešimų nuo %1:", "digest.latest_topics": "Latest topics from %1", - "digest.cta": "Click here to visit %1", + "digest.cta": "Kad aplankyti %1, spauskite čia", "digest.unsub.info": "This digest was sent to you due to your subscription settings.", "digest.no_topics": "There have been no active topics in the past %1", "notif.chat.subject": "New chat message received from %1", - "notif.chat.cta": "Click here to continue the conversation", + "notif.chat.cta": "Pokalbio pratęsimui spauskite čia", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Spauskite čia norėdami skaityti visą temą", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", - "unsub.cta": "Click here to alter those settings", - "closing": "Thanks!" + "unsub.cta": "Spauskite čia norėdami pakeisti šiuos nustatymus", + "closing": "Ačiū!" } \ No newline at end of file diff --git a/public/language/lt/error.json b/public/language/lt/error.json index 9b09bb6b87..08bf3c80a4 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -12,56 +12,70 @@ "invalid-title": "Neteisingas pavadinimas!", "invalid-user-data": "Klaidingi vartotojo duomenys", "invalid-password": "Klaidingas slaptažodis", - "invalid-username-or-password": "Please specify both a username and password", - "invalid-search-term": "Invalid search term", + "invalid-username-or-password": "Prašome nurodyti tiek vartotojo vardą, tiek ir slaptažodį", + "invalid-search-term": "Neteisingas paieškos terminas", "invalid-pagination-value": "Klaidinga puslapiavimo reikšmė", "username-taken": "Vartotojo vardas jau užimtas", "email-taken": "El. pašto adresas jau užimtas", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed": "Jūsų el. paštas nepatvirtintas, prašome paspausti čia norint jį patvirtinti.", + "email-not-confirmed-chat": "Jūs negalite kalbėtis, kol el. adresas nepatvirtintas", + "no-email-to-confirm": "Šis forumas reikalauja patvirtinimo el. paštu prašome spausti čia el. adreso įrašymui", + "email-confirm-failed": "Negalime patvirtinti jūsų el. adreso, prašom bandyti vėliau.", "username-too-short": "Slapyvardis per trumpas", - "username-too-long": "Username too long", + "username-too-long": "Vartotojo vardas per ilgas", "user-banned": "Vartotojas užblokuotas", - "user-too-new": "Sorry, you are required to wait %1 seconds before making your first post", - "no-category": "Category does not exist", - "no-topic": "Topic does not exist", - "no-post": "Post does not exist", - "no-group": "Group does not exist", - "no-user": "User does not exist", + "user-too-new": "Atsiprašome, bet jums reikia laukti 1% sekundes prieš patalpinant savo pirmąjį įrašą", + "no-category": "Tokios kategorijos nėra", + "no-topic": "Tokios temos nėra", + "no-post": "Tokio įrašo nėra", + "no-group": "Grupė neegzistuoja", + "no-user": "Tokio vartotojo nėra", "no-teaser": "Teaser does not exist", - "no-privileges": "You do not have enough privileges for this action.", + "no-privileges": "Šiam veiksmui jūs neturite pakankamų privilegijų.", "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "Kategorija išjungta", "topic-locked": "Tema užrakinta", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Prašome palaukti kol bus baigti visi kėlimai į serverį", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Pavadinimas turėtų būti trumpesnis. Maksimalus leistinas ilgis- %1 simbolių.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "Jūs negalite balsuoti už savo pranešimą", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "Jūs negalite užblokuoti kitų administratorių!", - "invalid-image-type": "Klaidingas paveikslėlio tipas", + "invalid-image-type": "Neteisingas vaizdo tipas. Leidžiami tipai :%1", + "invalid-image-extension": "Neteisingas vaizdo plėtinys", + "invalid-file-type": "Neteisingas failo tipas. Leidžiami tipai: %1", "group-name-too-short": "Grupės pavadinimas per trumpas", "group-already-exists": "Tokia grupė jau egzistuoja", "group-name-change-not-allowed": "Grupės pavadinimas keitimas neleidžiamas", - "post-already-deleted": "This post has already been deleted", - "post-already-restored": "This post has already been restored", - "topic-already-deleted": "This topic has already been deleted", - "topic-already-restored": "This topic has already been restored", + "group-already-member": "Jūs jau priklausote šiai grupei", + "group-needs-owner": "This group requires at least one owner", + "post-already-deleted": "Šis įrašas jau buvo ištrintas", + "post-already-restored": "Šis įrašas jau atstatytas", + "topic-already-deleted": "Ši tema jau ištrinta", + "topic-already-restored": "Ši tema jau atkurta", "topic-thumbnails-are-disabled": "Temos paveikslėliai neleidžiami.", "invalid-file": "Klaidingas failas", "uploads-are-disabled": "Įkėlimai neleidžiami", - "upload-error": "Įkėlimo klaida: %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "Jūs negalite susirašinėti su savimi!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", - "reputation-system-disabled": "Reputation system is disabled.", + "too-many-messages": "Išsiuntėte per daug pranešimų, kurį laiką prašome palaukti.", + "reputation-system-disabled": "Reputacijos sistema išjungta.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "Jūs neturite pakankamai reputacijos balsuoti prieš šį pranešimą", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registracijos klaida", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Prisijungimui prašom naudoti jūsų el. adresą", + "wrong-login-type-username": "Prisijungimui prašome naudoti vartotojo vardą" } \ No newline at end of file diff --git a/public/language/lt/global.json b/public/language/lt/global.json index dab0d48357..8301db2346 100644 --- a/public/language/lt/global.json +++ b/public/language/lt/global.json @@ -3,9 +3,10 @@ "search": "Ieškoti", "buttons.close": "Uždaryti", "403.title": "Prieiga negalima", - "403.message": "Atrodo, kad jūs bandote patekti į puslapį, kuriame jūsų prieiga negalima. Gal pabandykite prisijungti?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Nerasta", - "404.message": "Atrodo, kad jūs patekote į puslapį, kuris neegzistuoja. Grįžkite į namų puslapį", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Vidinė klaida.", "500.message": "Oops! Atrodo, kad kažkas nutiko!", "register": "Registruotis", @@ -26,6 +27,7 @@ "header.tags": "Žymos", "header.popular": "Populiarūs", "header.users": "Vartotojai", + "header.groups": "Grupės", "header.chats": "Susirašinėjimai", "header.notifications": "Pranešimai", "header.search": "Ieškoti", @@ -72,6 +74,8 @@ "guests": "Svečiai", "updated.title": "Forumas atnaujintas", "updated.message": "Forumas buvo atnaujintas iki naujausios versijos. Paspauskite čia norėdami perkrauti puslapį.", - "privacy": "Privacy", - "delete_all": "Delete All" + "privacy": "Privatumas", + "follow": "Sekti", + "unfollow": "Nebesekti", + "delete_all": "Viską ištrinti" } \ No newline at end of file diff --git a/public/language/lt/groups.json b/public/language/lt/groups.json index bf69c732b0..076154cf92 100644 --- a/public/language/lt/groups.json +++ b/public/language/lt/groups.json @@ -1,8 +1,34 @@ { - "groups": "Groups", - "view_group": "View Group", - "details.title": "Group Details", - "details.members": "Member List", - "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "groups": "Grupės", + "view_group": "Grupės peržiūra", + "owner": "Grupės savininkas", + "new_group": "Kurti naują grupę", + "no_groups_found": "There are no groups to see", + "pending.accept": "Priimti", + "pending.reject": "Atmesti", + "cover-instructions": "Vilkite čia nuotrauką, perkelkite į reikalingą poziciją ir spauskite Save", + "cover-change": "Keisti", + "cover-save": "Saugoti", + "cover-saving": "Išsaugoma", + "details.title": "Grupės detalės", + "details.members": "Narių sąrašas", + "details.pending": "Laukiantys nariai", + "details.has_no_posts": "Šios grupės nariai neatliko jokių įrašų.", + "details.latest_posts": "Vėliausi įrašai", + "details.private": "Asmeniška", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Grupės pavadinimas", + "details.description": "Aprašymas", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Pakeisti paveikslėlį", + "details.change_colour": "Pakeisti spalvą", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Paslėptas", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Grupės informacija atnaujinta", + "event.deleted": "Grupė \"%1\" pašalinta" } \ No newline at end of file diff --git a/public/language/lt/login.json b/public/language/lt/login.json index ce993ead94..dd18d2949c 100644 --- a/public/language/lt/login.json +++ b/public/language/lt/login.json @@ -1,5 +1,7 @@ { - "username": "Vartotojo vardas / El. paštas", + "username-email": "Vartotojo vardas / El. paštas", + "username": "Vartotojo vardas", + "email": "El. paštas", "remember_me": "Prisiminti?", "forgot_password": "Užmiršote slaptažodį?", "alternative_logins": "Alternatyvūs prisijungimo būdai", diff --git a/public/language/lt/modules.json b/public/language/lt/modules.json index aefb40aed0..d7e012a412 100644 --- a/public/language/lt/modules.json +++ b/public/language/lt/modules.json @@ -12,9 +12,9 @@ "chat.message-history": "Žinučių istorija", "chat.pop-out": "Iššokančio lango pokalbiai", "chat.maximize": "Padininti", - "chat.seven_days": "7 Days", - "chat.thirty_days": "30 Days", - "chat.three_months": "3 Months", + "chat.seven_days": "7 dienos", + "chat.thirty_days": "30 dienų", + "chat.three_months": "3 mėnesiai", "composer.user_said_in": "%1 parašė į %2:", "composer.user_said": "%1 parašė:", "composer.discard": "Ar tikrai norite sunaikinti šį pranešimą?" diff --git a/public/language/lt/notifications.json b/public/language/lt/notifications.json index 10a4cd914e..e7deae258e 100644 --- a/public/language/lt/notifications.json +++ b/public/language/lt/notifications.json @@ -2,11 +2,12 @@ "title": "Pranešimai", "no_notifs": "Jūs neturite naujų pranešimų", "see_all": "Peržiūrėti visus pranešimus", + "mark_all_read": "Žymėti visus perspėjimus kaip skaitytus", "back_to_home": "Atgal į %1", "outgoing_link": "Išeinanti nuoroda", "outgoing_link_message": "You are now leaving %1.", "continue_to": "Continue to %1", - "return_to": "Return to %1", + "return_to": "Grįžti į %1", "new_notification": "Naujas pranešimas", "you_have_unread_notifications": "Jūs turite neperskaitytų pranešimų.", "new_message_from": "Nauja žinutė nuo %1", @@ -16,12 +17,11 @@ "favourited_your_post_in": "%1 has favourited your post in %2.", "user_flagged_post_in": "%1 flagged a post in %2", "user_posted_to": "%1 parašė atsaką %2", - "user_posted_topic": "%1 has posted a new topic: %2", + "user_posted_topic": "%1 paskelbė naują temą: %2", "user_mentioned_you_in": "%1 paminėjo Jus %2", "user_started_following_you": "%1 started following you.", "email-confirmed": "El. paštas patvirtintas", "email-confirmed-message": "Dėkojame už el. pašto patvirtinimą. Jūsų paskyra pilnai aktyvuota.", - "email-confirm-error": "Įvyko klaida...", "email-confirm-error-message": "Įvyko klaida mėginant patvirtinti Jūsų el. pašto adresą. Galbūt kodas yra neteisingas, arba nebegalioajantis.", "email-confirm-sent": "Patvirtinimo laiškas išsiųstas." } \ No newline at end of file diff --git a/public/language/lt/pages.json b/public/language/lt/pages.json index 1551e325f2..b317d51487 100644 --- a/public/language/lt/pages.json +++ b/public/language/lt/pages.json @@ -11,8 +11,9 @@ "user.followers": "Žmonės, kurie seka %1", "user.posts": "Pranešimai, kuriuos parašė %1", "user.topics": "Temos, kurias sukūrė %1", + "user.groups": "%1's grupės", "user.favourites": "Vartotojo %1 mėgstami pranešimai", "user.settings": "Vartotojo nustatymai", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", - "maintenance.messageIntro": "Additionally, the administrator has left this message:" + "maintenance.messageIntro": "Be to, administratorius paliko šį pranešimą:" } \ No newline at end of file diff --git a/public/language/lt/recent.json b/public/language/lt/recent.json index 0ccdef0f8c..bebb9353fa 100644 --- a/public/language/lt/recent.json +++ b/public/language/lt/recent.json @@ -4,6 +4,16 @@ "week": "Savaitė", "month": "Mėnesis", "year": "Metai", - "alltime": "All Time", - "no_recent_topics": "Paskutinių temų nėra" + "alltime": "Per visą laiką", + "no_recent_topics": "Paskutinių temų nėra", + "no_popular_topics": "Populiarių temų nėra.", + "there-is-a-new-topic": "Yra nauja tema.", + "there-is-a-new-topic-and-a-new-post": "Yra nauja tema ir naujas įrašas.", + "there-is-a-new-topic-and-new-posts": "Yra nauja tema ir %1 nauji įrašai.", + "there-are-new-topics": "Yra %1 naujos temos.", + "there-are-new-topics-and-a-new-post": "Yra %1 naujos temos ir naujas įrašas.", + "there-are-new-topics-and-new-posts": "Yra %1 naujos temos ir %2 nauji įrašai.", + "there-is-a-new-post": "Yra naujas įrašas.", + "there-are-new-posts": "Yra %1 naujas pranešimas.", + "click-here-to-reload": "Spauskite čia norėdami perkrauti." } \ No newline at end of file diff --git a/public/language/lt/reset_password.json b/public/language/lt/reset_password.json index 66192d423f..b95f3800be 100644 --- a/public/language/lt/reset_password.json +++ b/public/language/lt/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Prašome įrašyti el. pašto adresą ir mes atsiųsime jums instrukciją, kaip atstatyti jūsų paskyrą.", "enter_email_address": "Įrašykite el. pašto adresą", "password_reset_sent": "Slaptažodžio atstatymas išsiųstas", - "invalid_email": "Klaidingas arba neegzistuojantis el. pašto adresas!" + "invalid_email": "Klaidingas arba neegzistuojantis el. pašto adresas!", + "password_too_short": "Įvestas slaptažodis yra per trumpas, prašome pasirinkti kitą slaptažodį.", + "passwords_do_not_match": "Du slaptažodžiai, kuriuos įvedėte, nesutampa." } \ No newline at end of file diff --git a/public/language/lt/search.json b/public/language/lt/search.json index e9eef4632a..b31715a6b4 100644 --- a/public/language/lt/search.json +++ b/public/language/lt/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "Atitikmenų nerasta", + "in": "In", + "by": "By", + "titles": "Antraštės", + "titles-posts": "Antraštės ir įrašai", + "posted-by": "Parašė", + "in-categories": "Kategorijose", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "Mažiausiai", + "at-most": "Daugiausia", + "post-time": "Įrašo laikas", + "newer-than": "Naujesni kaip", + "older-than": "Senesni kaip", + "any-date": "Bet kokia data", + "yesterday": "Vakar", + "one-week": "Viena savaitė", + "two-weeks": "Dvi savaitės", + "one-month": "Mėnuo", + "three-months": "Trys mėnesiai", + "six-months": "Šeši mėnesiai", + "one-year": "Vieneri metai", + "sort-by": "Rūšiuoti pagal", + "last-reply-time": "Last reply time", + "topic-title": "Temos pavadinimas", + "number-of-replies": "Atsakymų skaičius", + "number-of-views": "Peržiūrų skaičius", + "topic-start-date": "Temos pradžia", + "username": "Vartotojo vardas", + "category": "Kategorija", + "descending": "Mažėjančia tvarka", + "ascending": "Didėjančia tvarka", + "save-preferences": "Išsaugoti nustatymus", + "clear-preferences": "Išvalyti nustatymus", + "search-preferences-saved": "Paieškos nustatymai išsaugoti", + "search-preferences-cleared": "Paieškos nuostatos išvalytos", + "show-results-as": "Rodyti rezultatus kaip" } \ No newline at end of file diff --git a/public/language/lt/tags.json b/public/language/lt/tags.json index 93a06c9cbe..2f2b9e11d2 100644 --- a/public/language/lt/tags.json +++ b/public/language/lt/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Temų su šią žyma nėra.", "tags": "Žymos", - "enter_tags_here": "Čia surašykite žymas. Paspauskite enter po kiekvienos žymos.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Enter tags...", "no_tags": "Žymų kolkas nėra." } \ No newline at end of file diff --git a/public/language/lt/topic.json b/public/language/lt/topic.json index 3ebdac9b97..e79c869a1b 100644 --- a/public/language/lt/topic.json +++ b/public/language/lt/topic.json @@ -12,6 +12,7 @@ "notify_me": "Gauti pranešimus apie naujus atsakymus šioje temoje", "quote": "Cituoti", "reply": "Atsakyti", + "guest-login-reply": "Norėdami atsakyti, prisijunkite", "edit": "Redaguoti", "delete": "Ištrinti", "purge": "Išvalyti", @@ -33,11 +34,11 @@ "login_to_subscribe": "Norėdami prenumeruoti šią temą, prašome prisiregistruoti arba prisijungti.", "markAsUnreadForAll.success": "Tema visiems vartotojams pažymėta kaip neskaityta.", "watch": "Žiūrėti", - "unwatch": "Unwatch", + "unwatch": "Nebesekti", "watch.title": "Gauti pranešimą apie naujus įrašus šioje temoje", - "unwatch.title": "Stop watching this topic", + "unwatch.title": "Baigti šios temos stebėjimą", "share_this_post": "Dalintis šiuo įrašu", - "thread_tools.title": "Topic Tools", + "thread_tools.title": "Temos priemonės", "thread_tools.markAsUnreadForAll": "Pažymėti kaip neskaitytą", "thread_tools.pin": "Prisegti temą", "thread_tools.unpin": "Atsegti temą", @@ -47,11 +48,11 @@ "thread_tools.move_all": "Perkelti visus", "thread_tools.fork": "Išskaidyti temą", "thread_tools.delete": "Ištrinti temą", - "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", + "thread_tools.delete_confirm": "Ar jūs tikrai norite ištrinti šią temą?", "thread_tools.restore": "Atkurti temą", - "thread_tools.restore_confirm": "Are you sure you want to restore this topic?", + "thread_tools.restore_confirm": "Ar jūs tikrai norite atkurti šią temą?", "thread_tools.purge": "Išvalyti temą", - "thread_tools.purge_confirm": "Are you sure you want to purge this topic?", + "thread_tools.purge_confirm": "Ar tikrai norite išvalyti šią temą?", "topic_move_success": "Ši tema buvo sėkmingai perkelta į %1", "post_delete_confirm": "Ar jūs tikrai norite ištrinti šį įrašą?", "post_restore_confirm": "Ar jūs tikrai norite atkurti šį įrašą?", @@ -74,6 +75,7 @@ "fork_no_pids": "Nepasirinktas joks įrašas!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Įrašykite temos pavadinimą...", + "composer.handle_placeholder": "Vardas ir pavardė", "composer.discard": "Atšaukti", "composer.submit": "Patvirtinti", "composer.replying_to": "Atsakymas %1", @@ -88,9 +90,10 @@ "more_users_and_guests": "dar %1 vartotojai(-ų) ir %2 svečiai(-ių)", "more_users": "dar %1 vartotojai(-ų)", "more_guests": "dar %1 svečiai(-ių)", - "users_and_others": "%1 and %2 others", + "users_and_others": "%1 ir kiti %2", "sort_by": "Rūšiuoti pagal", "oldest_to_newest": "Nuo seniausių iki naujausių", "newest_to_oldest": "Nuo naujausių iki seniausių", - "most_votes": "Daugiausiai balsų" + "most_votes": "Daugiausiai balsų", + "most_posts": "Daugiausia įrašų" } \ No newline at end of file diff --git a/public/language/lt/user.json b/public/language/lt/user.json index e4f7a27dd2..2928033fc2 100644 --- a/public/language/lt/user.json +++ b/public/language/lt/user.json @@ -2,10 +2,12 @@ "banned": "Užblokuotas", "offline": "Atsijungęs", "username": "Vartotojo vardas", + "joindate": "Prisijungimo data", + "postcount": "Įrašų kiekis", "email": "El. paštas", "confirm_email": "Patvirtinti el. paštą", - "delete_account": "Delete Account", - "delete_account_confirm": "Are you sure you want to delete your account?
This action is irreversible and you will not be able to recover any of your data

Enter your username to confirm that you wish to destroy this account.", + "delete_account": "Ištrinti paskyrą", + "delete_account_confirm": "Ar tikrai norite ištrinti savo paskyrą?
Šis veiksmas yra negrįžtamas, ir jūs negalėsite susigrąžinti jokių duomenų

Įveskite savo vardą, kad patvirtintumėte, jog norite panaikinti šią paskyrą.", "fullname": "Vardas ir pavardė", "website": "Tinklalapis", "location": "Vieta", @@ -16,6 +18,7 @@ "profile_views": "Profilio peržiūros", "reputation": "Reputacija", "favourites": "Mėgstamiausi", + "watched": "Watched", "followers": "Sekėjai", "following": "Seka", "signature": "Parašas", @@ -29,7 +32,7 @@ "edit": "Redaguoti", "uploaded_picture": "Įkeltas paveikslėlis", "upload_new_picture": "Įkelti naują paveikslėlį", - "upload_new_picture_from_url": "Upload New Picture From URL", + "upload_new_picture_from_url": "Įkelti naują paveikslėlį iš URL", "current_password": "Dabartinis slaptažodis", "change_password": "Pakeisti slaptažodį", "change_password_error": "Negalimas slaptažodis!", @@ -47,19 +50,21 @@ "max": "maks.", "settings": "Nustatymai", "show_email": "Rodyti mano el. paštą viešai", - "show_fullname": "Show My Full Name", - "restrict_chats": "Only allow chat messages from users I follow", + "show_fullname": "Rodyti mano vardą ir pavardę", + "restrict_chats": "Gauti pokalbių žinutes tik iš tų narių, kuriuos seku", "digest_label": "Prenumeruoti įvykių santrauką", "digest_description": "Gauti naujienas apie naujus pranešimus ir temas į el. paštą pagal nustatytą grafiką", "digest_off": "Išjungta", "digest_daily": "Kas dieną", "digest_weekly": "Kas savaitę", "digest_monthly": "Kas mėnesį", - "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_chat_notifications": "Jeigu gaunama nauja pokalbių žinutė ir aš neprisijungęs, siųsti el. laišką", + "send_post_notifications": "Atsiųsti el. laišką kai parašomi atsakymai į mano prenumeruojamas temas", "has_no_follower": "Šis vartotojas neturi jokių sekėjų :(", "follows_no_one": "Šis vartotojas nieko neseka :(", "has_no_posts": "Šis vartotojas dar neparašė nė vieno pranešimo.", "has_no_topics": "Šis vartotojas dar nesukūrė nė vienos temos.", + "has_no_watched_topics": "Šis vartotojas dar neseka jokių temų", "email_hidden": "El. paštas paslėptas", "hidden": "paslėptas", "paginate_description": "Temose ir kategorijose naudoti numeraciją puslapiams vietoje begalinės slinkties.", @@ -70,6 +75,6 @@ "open_links_in_new_tab": "Atidaryti nuorodas naujame skirtuke?", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.", - "follow_topics_you_reply_to": "Follow topics that you reply to.", - "follow_topics_you_create": "Follow topics you create." + "follow_topics_you_reply_to": "Sekite temas, į kurias jūs atsakėte.", + "follow_topics_you_create": "Sekite jūsų sukurtas temas." } \ No newline at end of file diff --git a/public/language/lt/users.json b/public/language/lt/users.json index 66a9f76b1f..f4f4360022 100644 --- a/public/language/lt/users.json +++ b/public/language/lt/users.json @@ -5,5 +5,8 @@ "search": "Ieškoti", "enter_username": "Įrašykite vartotojo vardą paieškai", "load_more": "Įkelti daugiau", - "users-found-search-took": "%1 paskyra(-os)! Paieška užtruko %2 ms." + "users-found-search-took": "Rasta %1 vartotojas(-ai)! Paieška užtruko %2 sekundes.", + "filter-by": "Filtruoti pagal", + "online-only": "Online only", + "picture-only": "Tik paveikslėlis" } \ No newline at end of file diff --git a/public/language/ms/category.json b/public/language/ms/category.json index db2dc8d039..cc483ad763 100644 --- a/public/language/ms/category.json +++ b/public/language/ms/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "\nTopik Baru", + "guest-login-post": "Log in to post", "no_topics": "Tiada topik dalam kategori ini.
Cuba menghantar topik yang baru?", "browsing": "melihat", "no_replies": "Tiada jawapan", diff --git a/public/language/ms/email.json b/public/language/ms/email.json index 85de394b29..4c5ca1adde 100644 --- a/public/language/ms/email.json +++ b/public/language/ms/email.json @@ -9,6 +9,9 @@ "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", "reset.cta": "Click here to reset your password", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", "digest.cta": "Click here to visit %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "New chat message received from %1", "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", "unsub.cta": "Click here to alter those settings", "closing": "Terima Kasih!" diff --git a/public/language/ms/error.json b/public/language/ms/error.json index 6384d68eb1..340e4e528b 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -18,6 +18,9 @@ "username-taken": "Username taken", "email-taken": "Email taken", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Nama pengunna terlalu pendek", "username-too-long": "Username too long", "user-banned": "User banned", @@ -32,21 +35,29 @@ "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "Category disabled", "topic-locked": "Topic Locked", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Please wait for uploads to complete.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 characters.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "You cannot vote for your own post", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "You can't ban other admins!", - "invalid-image-type": "Invalid image type", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Group name too short", "group-already-exists": "Group already exists", "group-name-change-not-allowed": "Group name change not allowed", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Topic thumbnails are disabled.", "invalid-file": "Invalid File", "uploads-are-disabled": "Uploads are disabled", - "upload-error": "Upload Error : %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "You can't chat with yourself!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/ms/global.json b/public/language/ms/global.json index ebda99a05f..438206d7ef 100644 --- a/public/language/ms/global.json +++ b/public/language/ms/global.json @@ -3,9 +3,10 @@ "search": "Cari", "buttons.close": "Tutup", "403.title": "Akses dinafikan", - "403.message": "Anda telah menemui ruangan anda tidak diberikan akses. Munkin anda sepatutnya cuba log masuk semula?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "tidak dijumpai", - "404.message": "Anda telah menemui ruangan yang tidak wujud. kembali kelama utama?", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "ralat dalaman", "500.message": "Oops! ada yang tidak kena", "register": "Daftar", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "popular", "header.users": "pengguna", + "header.groups": "Groups", "header.chats": "chats", "header.notifications": "makluman", "header.search": "Cari", @@ -73,5 +75,7 @@ "updated.title": "Forum Updated", "updated.message": "This forum has just been updated to the latest version. Click here to refresh the page.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/ms/groups.json b/public/language/ms/groups.json index bf69c732b0..d2314fdc29 100644 --- a/public/language/ms/groups.json +++ b/public/language/ms/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "View Group", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Group Details", "details.members": "Member List", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Latest Posts", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/ms/login.json b/public/language/ms/login.json index 7836b6feb7..3f0d1e37ea 100644 --- a/public/language/ms/login.json +++ b/public/language/ms/login.json @@ -1,5 +1,7 @@ { - "username": "Nama pengguna / Emel", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Ingat Saya?", "forgot_password": "Lupa Kata Laluan?", "alternative_logins": "Login Alternatif", diff --git a/public/language/ms/notifications.json b/public/language/ms/notifications.json index 8026012905..e8fffb1cd8 100644 --- a/public/language/ms/notifications.json +++ b/public/language/ms/notifications.json @@ -2,6 +2,7 @@ "title": "pemberitahuan", "no_notifs": "Anda tiada pemberitahuan baru", "see_all": "LIhat semua pemberitahuan", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "Sambungan luar", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Email Confirmed", "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", "email-confirm-sent": "Confirmation email sent." } \ No newline at end of file diff --git a/public/language/ms/pages.json b/public/language/ms/pages.json index 6ce4a94980..dc7c0385e9 100644 --- a/public/language/ms/pages.json +++ b/public/language/ms/pages.json @@ -11,6 +11,7 @@ "user.followers": "Pengguna yang Mengikuti %1", "user.posts": "Kiriman dibuat oleh %1", "user.topics": "Topik dibuat oleh %1", + "user.groups": "%1's Groups", "user.favourites": "Mesej Kegemaran %1", "user.settings": "Tetapan pengguna", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/ms/recent.json b/public/language/ms/recent.json index bface6de72..fe18961628 100644 --- a/public/language/ms/recent.json +++ b/public/language/ms/recent.json @@ -5,5 +5,15 @@ "month": "Bulan", "year": "Year", "alltime": "All Time", - "no_recent_topics": "Tiada topik terkini" + "no_recent_topics": "Tiada topik terkini", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/ms/reset_password.json b/public/language/ms/reset_password.json index 20c519aa55..2951ed5007 100644 --- a/public/language/ms/reset_password.json +++ b/public/language/ms/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Sila masukkan alamat emel dan kami akan menghantar arahan untuk penetapan semula akaun anda", "enter_email_address": "Masukkan alamat emel", "password_reset_sent": "Penetapan semula password telah dihantar", - "invalid_email": "Emel yang tidak sah / Emel tidak wujud" + "invalid_email": "Emel yang tidak sah / Emel tidak wujud", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/ms/search.json b/public/language/ms/search.json index e9eef4632a..9dad8b6eab 100644 --- a/public/language/ms/search.json +++ b/public/language/ms/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/ms/tags.json b/public/language/ms/tags.json index d2e9a213ac..aa9f14c70c 100644 --- a/public/language/ms/tags.json +++ b/public/language/ms/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. Press enter after each tag.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/ms/topic.json b/public/language/ms/topic.json index d02259f03c..e173c79263 100644 --- a/public/language/ms/topic.json +++ b/public/language/ms/topic.json @@ -12,6 +12,7 @@ "notify_me": "Kekal dimaklumkan berkenaan respon dalam topik ini", "quote": "Petikan", "reply": "Balas", + "guest-login-reply": "Log in to reply", "edit": "Edit", "delete": "Padamkan", "purge": "Purge", @@ -74,6 +75,7 @@ "fork_no_pids": "Tiada kiriman yang dipilih", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Masukkan tajuk topik disini", + "composer.handle_placeholder": "Name", "composer.discard": "Abaikan", "composer.submit": "Hantar", "composer.replying_to": "Replying to %1", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/ms/user.json b/public/language/ms/user.json index 90a0baa313..5b44dfc707 100644 --- a/public/language/ms/user.json +++ b/public/language/ms/user.json @@ -2,6 +2,8 @@ "banned": "Diharamkan", "offline": "Tidak ditalian", "username": "Nama pengguna", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Emel", "confirm_email": "Confirm Email", "delete_account": "Delete Account", @@ -16,6 +18,7 @@ "profile_views": "Lihat profil", "reputation": "Reputasi", "favourites": "Kegemaran", + "watched": "Watched", "followers": "Pengikut", "following": "Mengikuti", "signature": "Tandatangan", @@ -56,10 +59,12 @@ "digest_weekly": "Mingguan", "digest_monthly": "Bulanan", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Pengguna ini tiada pengikut :(", "follows_no_one": "Pengguna ini tidak mengikuti sesiapa :(", "has_no_posts": "Pengguna ini masih belum mengirim sebarang pos", "has_no_topics": "Pengguna ini masih belum menghantar sebarang kiriman", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Emel disembunyikan", "hidden": "disembunyikan", "paginate_description": "Pecahkan topik dan pesanan adalah lebih baik daripada menggunakan scroll berterusan", diff --git a/public/language/ms/users.json b/public/language/ms/users.json index ddb632d1dc..26475bd746 100644 --- a/public/language/ms/users.json +++ b/public/language/ms/users.json @@ -5,5 +5,8 @@ "search": "Cari", "enter_username": "Masukkan nama pengguna untuk carian", "load_more": "Muat lagi", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/nb/category.json b/public/language/nb/category.json index 7de0fb5cde..f8afafe14a 100644 --- a/public/language/nb/category.json +++ b/public/language/nb/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Nytt emne", + "guest-login-post": "Logg inn til innlegg", "no_topics": "Det er ingen emner i denne kategorien
Hvorfor ikke lage ett?", "browsing": "leser", "no_replies": "Ingen har svart", diff --git a/public/language/nb/email.json b/public/language/nb/email.json index f9c1377ab0..37b5df85d0 100644 --- a/public/language/nb/email.json +++ b/public/language/nb/email.json @@ -9,14 +9,19 @@ "reset.text1": "Vi har blir bedt om å tilbakestille passordet ditt, muligens fordi du har glemt det. Hvis dette ikke stemmer kan du ignorere denne eposten.", "reset.text2": "For å fortsette med tilbakestillingen, vennligst klikk på følgende lenke:", "reset.cta": "Klikk her for å tilbakestille passordet ditt", + "reset.notify.subject": "Passordet ble endret", + "reset.notify.text1": "Vi gir deg beskjed om at du endret passordet ditt den %1.", + "reset.notify.text2": "Hvis du ikke godkjenner dette, vennligst gi beskjed til en administrator omgående.", "digest.notifications": "Du har uleste varsler fra %1:", "digest.latest_topics": "Siste emner fra %1", "digest.cta": "Klikk her for å besøke %1", "digest.unsub.info": "Dette sammendraget er sendt til deg basert på dine innstillinger for abonnering.", - "digest.no_topics": "There have been no active topics in the past %1", + "digest.no_topics": "Det har ikke vært noen aktive tråder i det siste %1", "notif.chat.subject": "Ny chat-melding mottatt fra %1", "notif.chat.cta": "Klikk her for å fortsette samtalen", "notif.chat.unsub.info": "Denne chat-varselen er sendt til deg basert på dine innstillinger for abonnering.", + "notif.post.cta": "Trykk for å lese hele emnet", + "notif.post.unsub.info": "Dette postvarselet ble sendt til deg på grunn av dine abonnementsinnstillinger.", "test.text1": "Dette er en test-epost for å verifisere at epostsystemet i NodeBB fungerer som det skal.", "unsub.cta": "Klikk her for å endre disse innstillingene", "closing": "Takk!" diff --git a/public/language/nb/error.json b/public/language/nb/error.json index 45dd6f6853..2b47e8c8ca 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -18,6 +18,9 @@ "username-taken": "Brukernavn opptatt", "email-taken": "E-post opptatt", "email-not-confirmed": "E-posten din har ikke blitt bekreftet enda, vennligst klikk for å bekrefte din e-post.", + "email-not-confirmed-chat": "Du kan ikke chatte før e-posten din har blitt bekreftet", + "no-email-to-confirm": "Dette forumet krever at e-postbekreftelse, vennligst klikk her for å skrive inn en e-post", + "email-confirm-failed": "Vi kunne ikke godkjenne e-posten din, vennligst prøv igjen senere.", "username-too-short": "Brukernavnet er for kort", "username-too-long": "Brukernavnet er for langt", "user-banned": "Bruker utestengt", @@ -32,21 +35,29 @@ "no-emailers-configured": "Ingen e-post-tillegg er lastet, så ingen test e-post kunne bli sendt", "category-disabled": "Kategori deaktivert", "topic-locked": "Emne låst", + "post-edit-duration-expired": "Du har bare lov til å endre innlegg i %1 sekunder etter at det ble skrevet", "still-uploading": "Vennligst vent til opplastingene blir fullført.", "content-too-short": "Vennligst skriv et lengere innlegg. Innlegg må inneholde minst %1 tegn.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Vennligst skriv en lengere tittel. Titler må inneholde minst %1 tegn.", "title-too-long": "Vennligst skriv en kortere tittel. Titler må inneholde minst %1 tegn.", "too-many-posts": "Du kan bare poste et innlegg hvert %1 sekund - vennligst vent før du poster igjen", "too-many-posts-newbie": "Som en ny bruker, kan du bare poste et innlegg hvert %1 sekund til du har tjent deg opp %2 i rykte - vennligst vent før du poster igjen", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Max tilatte filstørrelse er %1 kbs - vennligst last opp en mindre fil", "cant-vote-self-post": "Du kan ikke stemme på ditt eget innlegg", "already-favourited": "Du har allerede favorittmerket dette innlegget", "already-unfavourited": "Du har allerede avfavorisert dette innlegget", "cant-ban-other-admins": "Du kan ikke utestenge andre administratorer!", - "invalid-image-type": "Ugyldig bildetype", + "invalid-image-type": "Ugyldig bildetype. Tilatte typer er: %1", + "invalid-image-extension": "Ugyldig bildefiltype", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Gruppenavnet er for kort", "group-already-exists": "Gruppe eksisterer allerede", "group-name-change-not-allowed": "Gruppenavn ikke tillatt", + "group-already-member": "Du er allerede en del av denne gruppen", + "group-needs-owner": "Denne gruppen kreves minst en eier", "post-already-deleted": "Dette innlegget har blitt slettet", "post-already-restored": "Dette innlegget har allerede blitt gjenopprettet", "topic-already-deleted": "Dette emnet har allerede blitt slettet", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Emne-minatyrbilder har blitt deaktivert", "invalid-file": "Ugyldig fil", "uploads-are-disabled": "Opplastninger er deaktivert", - "upload-error": "Opplastningfeil: %1", "signature-too-long": "Beklager, signaturen din kan ikke være lengre en %1 tegn.", "cant-chat-with-yourself": "Du kan ikke chatte med deg selv!", "chat-restricted": "Denne brukeren har begrenset sine chat-meldinger. De må følge deg før du kan chatte med dem", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Ryktesystem er deaktivert.", "downvoting-disabled": "Nedstemming av deaktivert", "not-enough-reputation-to-downvote": "Du har ikke nok rykte til å nedstemme det innlegget", "not-enough-reputation-to-flag": "Du har ikke nok rykte til å flagge dette innlegget", "reload-failed": "NodeBB støtte på et problem under lasting på nytt: \"%1\". NodeBB vil fortsette å servere eksisterende klientside ressureser, selv om du burde angre endringene du gjorde før du lastet på nytt.", - "registration-error": "Registration Error" + "registration-error": "Feil under registrering", + "parse-error": "Noe gikk feil under analysering av serversvar", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/nb/global.json b/public/language/nb/global.json index c1f1f40f39..9528d360c5 100644 --- a/public/language/nb/global.json +++ b/public/language/nb/global.json @@ -3,9 +3,10 @@ "search": "Søk", "buttons.close": "Steng", "403.title": "Adgang nektet", - "403.message": "Du har funnet en side du ikke har tilgang til. Kanskje du skal prøve å logge inn?", + "403.message": "Du har funnet en side du ikke har tilgang til.", + "403.login": "Kanskje du skal prøve å logge inn?", "404.title": "Ikke funnet", - "404.message": "Du har funnet en side som ikke eksisterer. Returner til startsiden?", + "404.message": "Du har funnet en side som ikke eksisterer. Returner til startsiden?", "500.title": "Intern feil.", "500.message": "Oops! Ser ut som noe gikk galt!", "register": "Registrer", @@ -26,6 +27,7 @@ "header.tags": "Tagger", "header.popular": "Populære", "header.users": "Brukere", + "header.groups": "Grupper", "header.chats": "Chatter", "header.notifications": "Varsler", "header.search": "Søk", @@ -73,5 +75,7 @@ "updated.title": "Forum oppdatert", "updated.message": "Dette forumet har nettopp blitt oppdatert til den nyeste versjonen. Klikk her for å laste siden på nytt.", "privacy": "Personvern", - "delete_all": "Delete All" + "follow": "Følg", + "unfollow": "Avfølg", + "delete_all": "Slett alle" } \ No newline at end of file diff --git a/public/language/nb/groups.json b/public/language/nb/groups.json index 7762e5b3ad..6ff3a9b71f 100644 --- a/public/language/nb/groups.json +++ b/public/language/nb/groups.json @@ -1,8 +1,34 @@ { "groups": "Grupper", "view_group": "Vis gruppe", + "owner": "Gruppe-eier", + "new_group": "Opprett ny gruppe", + "no_groups_found": "Det er ingen grupper å se", + "pending.accept": "Aksepter", + "pending.reject": "Avslå", + "cover-instructions": "Dra og slipp et bilde, dra til posisjon, og trykk Lagre", + "cover-change": "Endre", + "cover-save": "Lagre", + "cover-saving": "Lagrer", "details.title": "Gruppedetaljer", "details.members": "Medlemsliste", + "details.pending": "Ventende meldemmer", "details.has_no_posts": "Medlemmene i denne gruppen har ikke skrevet noen innlegg.", - "details.latest_posts": "Seneste innlegg" + "details.latest_posts": "Seneste innlegg", + "details.private": "Privat", + "details.grant": "Gi/Opphev Eierskap", + "details.kick": "Kast ut", + "details.owner_options": "Gruppeadministrasjon", + "details.group_name": "Gruppenavn", + "details.description": "Beskrivelse", + "details.badge_preview": "Forhåndsvisning av skilt", + "details.change_icon": "Endre ikon", + "details.change_colour": "Endre farge", + "details.badge_text": "Skilt-tekst", + "details.userTitleEnabled": "Vis skilt", + "details.private_help": "Hvis aktivert, vil medlemskap i grupper kreve godkjennelse fra en gruppe-eier", + "details.hidden": "Skjult", + "details.hidden_help": "vis aktivert, vil denne gruppen ikke bli funnet i gruppelista, og brukere må inviteres manuellt", + "event.updated": "Gruppedetaljer har blitt oppgradert", + "event.deleted": "Gruppen \"%1\" har blitt slettet" } \ No newline at end of file diff --git a/public/language/nb/login.json b/public/language/nb/login.json index 92e26c01da..785a7defc4 100644 --- a/public/language/nb/login.json +++ b/public/language/nb/login.json @@ -1,5 +1,7 @@ { - "username": "Brukernavn / E-post", + "username-email": "Brukernavn / E-post", + "username": "Brukernavn", + "email": "E-post", "remember_me": "Husk meg?", "forgot_password": "Glemt passord?", "alternative_logins": "Alternativ innlogging", diff --git a/public/language/nb/notifications.json b/public/language/nb/notifications.json index f85acbdd55..33ff86eff6 100644 --- a/public/language/nb/notifications.json +++ b/public/language/nb/notifications.json @@ -2,6 +2,7 @@ "title": "Varsler", "no_notifs": "Du har ingen nye varsler", "see_all": "Se alle varsler", + "mark_all_read": "Mark all notifications read", "back_to_home": "Tilbake til %1", "outgoing_link": "Utgående link", "outgoing_link_message": "Du forlater nå %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 begynte å følge deg.", "email-confirmed": "E-post bekreftet", "email-confirmed-message": "Thank for at du har validert din e-post. Kontoen din er nå fullstendig aktivert.", - "email-confirm-error": "En feil oppsto...", "email-confirm-error-message": "Det oppsto et problem under valdiering av din e-post. Koden kan ha vært ugyldig eller ha utløpt.", "email-confirm-sent": "Bekreftelsesepost sendt." } \ No newline at end of file diff --git a/public/language/nb/pages.json b/public/language/nb/pages.json index 151b1c7a79..1d657bd759 100644 --- a/public/language/nb/pages.json +++ b/public/language/nb/pages.json @@ -11,6 +11,7 @@ "user.followers": "Personer som følger %1", "user.posts": "Innlegg laget av %1", "user.topics": "Emner opprettet av %1", + "user.groups": "%1's Groups", "user.favourites": "%1 sine favoritt-innlegg", "user.settings": "Brukerinnstillinger", "maintenance.text": "%1 er for tiden under vedlikehold. Kom tilbake en annen gang.", diff --git a/public/language/nb/recent.json b/public/language/nb/recent.json index 4b5611e8a8..3b980f6f02 100644 --- a/public/language/nb/recent.json +++ b/public/language/nb/recent.json @@ -5,5 +5,15 @@ "month": "Måned", "year": "År", "alltime": "All tid", - "no_recent_topics": "Det er ingen nye tråder." + "no_recent_topics": "Det er ingen nye tråder.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "Det finnes et nytt emne.", + "there-is-a-new-topic-and-a-new-post": "Det finnes et nytt emne og et nytt innlegg.", + "there-is-a-new-topic-and-new-posts": "Det finnes et nytt emne og %1 nye innlegg.", + "there-are-new-topics": "Det finnes %1 nye emner.", + "there-are-new-topics-and-a-new-post": "Det finnes %1 nye emner og et nytt innlegg.", + "there-are-new-topics-and-new-posts": "Det finnes %1 nye emner og %2 nye innlegg", + "there-is-a-new-post": "Det finnes et nytt innlegg.", + "there-are-new-posts": "Det finnes %1 nye innlegg.", + "click-here-to-reload": "Trykk her for å laste på nytt." } \ No newline at end of file diff --git a/public/language/nb/reset_password.json b/public/language/nb/reset_password.json index d8aab92154..ed6659abdf 100644 --- a/public/language/nb/reset_password.json +++ b/public/language/nb/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Vennligst skriv din e-post-adresse og vi vil sende den en e-post med instruksjoner om hvordan du tilbakestiller din konto.", "enter_email_address": "Skriv e-post", "password_reset_sent": "Passord-tilbakestilling sendt", - "invalid_email": "Ugyldig e-post / e-post eksisterer ikke" + "invalid_email": "Ugyldig e-post / e-post eksisterer ikke", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/nb/search.json b/public/language/nb/search.json index d27adb6754..2f06a88eb5 100644 --- a/public/language/nb/search.json +++ b/public/language/nb/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 resultat(er) samsvarer med \"%2\", (%3 sekunder)", - "no-matches": "Ingen innlegg funnet" + "no-matches": "Ingen matcher funnet", + "in": "I", + "by": "Av", + "titles": "Titler", + "titles-posts": "Titler og innlegg", + "posted-by": "Skapt av", + "in-categories": "I kategorier", + "search-child-categories": "Søk underkategorier", + "reply-count": "Mengde svar", + "at-least": "Minst", + "at-most": "Maks", + "post-time": "Innlegg-tid", + "newer-than": "Nyere enn", + "older-than": "Eldre en", + "any-date": "Alle datoer", + "yesterday": "I går", + "one-week": "En uke", + "two-weeks": "To uker", + "one-month": "En måned ", + "three-months": "Tre måneder", + "six-months": "Seks måneder", + "one-year": "Ett år", + "sort-by": "Sorter etter", + "last-reply-time": "Sise svartid", + "topic-title": "Emne-tittel", + "number-of-replies": "Antall svar", + "number-of-views": "Antall visninger", + "topic-start-date": "Starttid for emne", + "username": "Brukernavn", + "category": "Kategori", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Lagre innstillinger", + "clear-preferences": "Tøm innstillinnger", + "search-preferences-saved": "Søkeinnstillinger lagret", + "search-preferences-cleared": "Søkeinnstillinger tømt", + "show-results-as": "Vis resultateter som" } \ No newline at end of file diff --git a/public/language/nb/tags.json b/public/language/nb/tags.json index 3e2f7961ce..d38e00a025 100644 --- a/public/language/nb/tags.json +++ b/public/language/nb/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Det er ingen emnet med denne taggen.", "tags": "Tagger", - "enter_tags_here": "Skriv tagger her. Trykk enter etter hver tagg.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Skriv tagger...", "no_tags": "Det finnes ingen tagger enda." } \ No newline at end of file diff --git a/public/language/nb/topic.json b/public/language/nb/topic.json index 7b0156352c..8a599b7942 100644 --- a/public/language/nb/topic.json +++ b/public/language/nb/topic.json @@ -12,6 +12,7 @@ "notify_me": "Bli varslet om nye svar i dette emnet", "quote": "Siter", "reply": "Svar", + "guest-login-reply": "Log in to reply", "edit": "Endre", "delete": "Slett", "purge": "Tøm", @@ -74,6 +75,7 @@ "fork_no_pids": "Ingen innlegg valgt!", "fork_success": "Dette emnet ble delt! Klikk for å gå til delt emne.", "composer.title_placeholder": "Skriv din tråd-tittel her", + "composer.handle_placeholder": "Navn", "composer.discard": "Forkast", "composer.submit": "Send", "composer.replying_to": "Svarer i %1", @@ -92,5 +94,6 @@ "sort_by": "Sorter etter", "oldest_to_newest": "Eldste til nyeste", "newest_to_oldest": "Nyeste til eldste", - "most_votes": "Flest stemmer" + "most_votes": "Flest stemmer", + "most_posts": "Flest innlegg" } \ No newline at end of file diff --git a/public/language/nb/user.json b/public/language/nb/user.json index 565dac3bae..f3e6523e25 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -2,6 +2,8 @@ "banned": "Utestengt", "offline": "Offline", "username": "Brukernavn", + "joindate": "Registereringsdato", + "postcount": "Antall innlegg", "email": "E-post", "confirm_email": "Bekfreft e-post", "delete_account": "Slett konto", @@ -16,6 +18,7 @@ "profile_views": "Profilvisninger", "reputation": "Rykte", "favourites": "Favoritter", + "watched": "Overvåkede", "followers": "Følgere", "following": "Følger", "signature": "Signatur", @@ -56,10 +59,12 @@ "digest_weekly": "Ukentlig", "digest_monthly": "Månedlig", "send_chat_notifications": "Send en epost hvis jeg mottar en chat-melding når jeg ikke er pålogget", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Denne brukeren har ingen følgere :(", "follows_no_one": "Denne brukeren følger ingen :(", "has_no_posts": "Denne brukeren har ikke skrevet noe enda.", "has_no_topics": "Denne brukeren har ikke skrevet noen emner enda.", + "has_no_watched_topics": "Denne brukeren overvåker ingen innlegg foreløpig.", "email_hidden": "E-post skjult", "hidden": "skjult", "paginate_description": "Paginer tråder og innlegg istedet for å bruke uendelig skrolling.", @@ -68,8 +73,8 @@ "notification_sounds": "Spill av en lyd når du mottar ett varsel.", "browsing": "Surfeinnstillinger", "open_links_in_new_tab": "Åpne utgående linker i en ny fane?", - "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.", + "enable_topic_searching": "Aktiver søk-i-emne", + "topic_search_help": "Hvis aktivert, vil i-emne-søk overstyre nettleseren sin standard sidesøk-oppførsel og tillate deg å søke gjennom hele emnet, i stedet for bare det som vises på skjermen.", "follow_topics_you_reply_to": "Følg emner du svarer i.", "follow_topics_you_create": "Følg emner du oppretter." } \ No newline at end of file diff --git a/public/language/nb/users.json b/public/language/nb/users.json index f5a8de35de..661479fbf1 100644 --- a/public/language/nb/users.json +++ b/public/language/nb/users.json @@ -5,5 +5,8 @@ "search": "Søk", "enter_username": "Skriv ett brukernavn for å søke", "load_more": "Last flere", - "users-found-search-took": "%1 bruker(e) funnet! Søk tok %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filtrer etter", + "online-only": "Bare påloggede", + "picture-only": "Bare bilde" } \ No newline at end of file diff --git a/public/language/nl/category.json b/public/language/nl/category.json index 45dbbf4d4d..bee6530395 100644 --- a/public/language/nl/category.json +++ b/public/language/nl/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Nieuw onderwerp", + "guest-login-post": "Log in to post", "no_topics": "Er zijn geen onderwerpen in deze categorie.
Waarom maak je er niet een aan?", "browsing": "verkennen", "no_replies": "Niemand heeft gereageerd", diff --git a/public/language/nl/email.json b/public/language/nl/email.json index 0ca1b08ba7..a1f26cd2ea 100644 --- a/public/language/nl/email.json +++ b/public/language/nl/email.json @@ -9,6 +9,9 @@ "reset.text1": "Wij ontvingen een verzoek van u om uw wachtwoord te resetten. Als dat niet het geval is, kunt u deze mail negeren ", "reset.text2": "Om uw wachtwoord te resetten, klik op de volgende link", "reset.cta": "Klik hier om u wachtwoord te resetten", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "U heeft ongelezen notificaties van %1:", "digest.latest_topics": "De laatste onderwerpen van %1", "digest.cta": "Klik hier om deze website te bezoeken %1 ", @@ -17,6 +20,8 @@ "notif.chat.subject": "U heeft een chatbericht ontvangen van %1", "notif.chat.cta": "Klik hier om het gesprek te hervatten", "notif.chat.unsub.info": "Deze chat notificatie was verzonden naar jou vanwege je abbonement instellingen", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "Dit is een test email om te verifiëren dat de email service correct is opgezet voor jou NodeBB", "unsub.cta": "Klik hier om u instellingen te wijzigen", "closing": "Bedankt!" diff --git a/public/language/nl/error.json b/public/language/nl/error.json index 160c838e0d..de83d31255 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -18,6 +18,9 @@ "username-taken": "Gebruikersnaam is al bezet", "email-taken": "Email adres is al gebruikt", "email-not-confirmed": "U email adres is niet bevestigd, Klik hier om uw email adres te bevestigen", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Gebruikersnaam is te kort", "username-too-long": "Gebruikersnaam is te lang", "user-banned": "Gebruiker verbannen", @@ -32,21 +35,29 @@ "no-emailers-configured": "Er zijn geen email plugins geladen, een test email kan dus niet verzonden worden", "category-disabled": "Categorie uitgeschakeld", "topic-locked": "Onderwerp gesloten", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Heb even geduld totdat de alle bestanden geüpload zijn", "content-too-short": "Maak de bericht alsjeblieft wat langer. Op z'n minst %1 karakters", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Maak de titel wat langer. Op z'n minst %1 karakters", "title-too-long": "Maak de titel wat korter. Het kan niet langer zijn dan %1 karakters", "too-many-posts": "Je kan eens in de %1 seconden een bericht aanmaken. Wacht alstublieft.", "too-many-posts-newbie": "Als een nieuwe gebruiker kan je maar om de %1 seconden een bericht plaatsen vanwege je reputatie. Uw moet deze level van reputatie verdienen %2. Wacht alstublieft met het plaatsen van uw bericht.", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "De maximale bestandsgrootte is %1 kbs", "cant-vote-self-post": "Je kan niet op je eigen berichten stemmen", "already-favourited": "U heeft al dit bericht in uw favorieten staan", "already-unfavourited": "U heeft al dit bericht uit uw favorieten gehaald", "cant-ban-other-admins": "U kunt niet de andere admins bannen!", - "invalid-image-type": "Ongeldig foto type", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "De groepsnaam is te kort", "group-already-exists": "Deze groep bestaat al", "group-name-change-not-allowed": "Het veranderen van de groepsnaam is niet toegestaan!", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "Dit bericht is al verwijderd", "post-already-restored": "Dit bericht is al hersteld", "topic-already-deleted": "Deze topic is al verwijderd", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Onderwerp thumbnails zijn uitgeschakeld", "invalid-file": "Ongeldig bestand", "uploads-are-disabled": "Uploads zijn uitgeschakeld", - "upload-error": "Upload Fout : %1", "signature-too-long": "Sorry, maar deze handtekening kan niet groter zijn dan %1 karakters!", "cant-chat-with-yourself": "Je kan niet met jezelf chatten!", "chat-restricted": "Deze gebruiker heeft beperkingen gelegd op chatfunctie. Hun moeten jouw volgen voordat je met hun kan chatten", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputatie systeem is uitgeschakeld", "downvoting-disabled": "Downvoten is uitgeschakeld", "not-enough-reputation-to-downvote": "U heeft niet de benodigde reputatie om dit bericht te downvoten", "not-enough-reputation-to-flag": "U heeft niet de benodigde reputatie om dit bericht te melden aan de admins", "reload-failed": "NodeBB heeft een probleem geconstateerd tijdens het laden van: \"%1\".\nNodeBB blijft verder draaien. Het is wel verstandig om de actie wat u daarvoor heeft gedaan ongedaan te maken door te herladen.", - "registration-error": "Registratie fout" + "registration-error": "Registratie fout", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/nl/global.json b/public/language/nl/global.json index 74459f5810..84899903b0 100644 --- a/public/language/nl/global.json +++ b/public/language/nl/global.json @@ -3,9 +3,10 @@ "search": "Zoeken", "buttons.close": "Sluiten", "403.title": "Toegang Geweigerd", - "403.message": "Het lijkt erop dat je op een pagina beland bent waar je geen toegang tot hebt. Misschien moet je inloggen?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Niet Gevonden", - "404.message": "Het lijkt erop dat je op een pagina beland bent die niet bestaat. Ga terug naar de home pagina.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Interne fout.", "500.message": "Oeps! Het lijkt erop dat iets is fout gegaan!", "register": "Registeren", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "Populair", "header.users": "Gebruikers", + "header.groups": "Groups", "header.chats": "Chats", "header.notifications": "Notificaties", "header.search": "Zoeken", @@ -73,5 +75,7 @@ "updated.title": "Forum geüpdatet", "updated.message": "Dit forum is zojuist geüpdatet naar de laatste versie. Klik hier om de pagina te verversen", "privacy": "Privé", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Alles verwijderen" } \ No newline at end of file diff --git a/public/language/nl/groups.json b/public/language/nl/groups.json index b0dccd48be..9fe5c00975 100644 --- a/public/language/nl/groups.json +++ b/public/language/nl/groups.json @@ -1,8 +1,34 @@ { "groups": "Groepen", "view_group": "Bekijk Groep", + "owner": "Groep eigenaar", + "new_group": "Maak een nieuwe groep", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Opslaan", + "cover-saving": "Bezig met opslaan", "details.title": "Groep Details", "details.members": "Ledenlijst", + "details.pending": "Pending Members", "details.has_no_posts": "Deze groepleden hebben nog geen berichten geplaatst", - "details.latest_posts": "Nieuwste Berichten" + "details.latest_posts": "Nieuwste Berichten", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/nl/login.json b/public/language/nl/login.json index fa8f5d55d7..ec75667e86 100644 --- a/public/language/nl/login.json +++ b/public/language/nl/login.json @@ -1,5 +1,7 @@ { - "username": "Gebruikersnaam / Emailadres", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Mij Onthouden?", "forgot_password": "Wachtwoord Vergeten?", "alternative_logins": "Alternatieve Loginmethodes", diff --git a/public/language/nl/notifications.json b/public/language/nl/notifications.json index a63b085026..f0dc76c27f 100644 --- a/public/language/nl/notifications.json +++ b/public/language/nl/notifications.json @@ -2,6 +2,7 @@ "title": "Notificaties", "no_notifs": "Je hebt geen nieuwe notificaties", "see_all": "Bekijk alle Notificaties", + "mark_all_read": "Mark all notifications read", "back_to_home": "Terug naar %1", "outgoing_link": "Uitgaande Link", "outgoing_link_message": "Je verlaat nu %1", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 volgt u nu.", "email-confirmed": "Email adres bevestigd", "email-confirmed-message": "Bedankt voor het bevestigen van uw email adres. Uw account is nu volledig actief.", - "email-confirm-error": "Een fout vond plaats", "email-confirm-error-message": "Er was een probleem met het bevestigen van uw email adres. Misschien was de code niet goed of was door de tijd verstreken.", "email-confirm-sent": "Bevestigings email verstuurd" } \ No newline at end of file diff --git a/public/language/nl/pages.json b/public/language/nl/pages.json index b567e526d1..09cda815b9 100644 --- a/public/language/nl/pages.json +++ b/public/language/nl/pages.json @@ -11,6 +11,7 @@ "user.followers": "Mensen die %1 Volgen", "user.posts": "Berichten geplaatst door %1", "user.topics": "Topics gecreëerd door %1", + "user.groups": "%1's Groups", "user.favourites": "%1's Favoriete Berichten", "user.settings": "Gebruikersinstellingen", "maintenance.text": "%1 is momenteel in onderhoud modus. Probeer later opnieuw", diff --git a/public/language/nl/recent.json b/public/language/nl/recent.json index fbbfaaeb52..e2f3471de6 100644 --- a/public/language/nl/recent.json +++ b/public/language/nl/recent.json @@ -5,5 +5,15 @@ "month": "Maand", "year": "Jaar", "alltime": "Intussen", - "no_recent_topics": "Er zijn geen recente reacties." + "no_recent_topics": "Er zijn geen recente reacties.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "Er is een nieuw onderwerp", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "Er is een nieuwe onderwerp en %1 nieuwe berichten", + "there-are-new-topics": "Er zijn %1 nieuwe onderwerpen", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/nl/reset_password.json b/public/language/nl/reset_password.json index a529b6b8f8..2bac7d3849 100644 --- a/public/language/nl/reset_password.json +++ b/public/language/nl/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Vul a.u.b. je email address in en we versturen je een email met de stappen hoe je je account reset.", "enter_email_address": "Vul uw Email Adres in", "password_reset_sent": "Wachtwoord Reset Verzonden", - "invalid_email": "Fout Email Adres / Email Adres bestaat niet!" + "invalid_email": "Fout Email Adres / Email Adres bestaat niet!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/nl/search.json b/public/language/nl/search.json index cb61065a4e..756a0ef3a7 100644 --- a/public/language/nl/search.json +++ b/public/language/nl/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 resulta(a)ten was een match \"%2\", (%3 seconds)", - "no-matches": "Geen berichten gevonden" + "no-matches": "Geen matches gevonden", + "in": "in", + "by": "door", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/nl/tags.json b/public/language/nl/tags.json index 07e2c9ccf0..85c11b0476 100644 --- a/public/language/nl/tags.json +++ b/public/language/nl/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Er zijn geen onderwerpen met deze tag", "tags": "Tags", - "enter_tags_here": "Voer hier uw tags in. Druk op enter na elke tag ingevoerd te hebben", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Voer uw tags in...", "no_tags": "Er zijn nog geen tags te vinden" } \ No newline at end of file diff --git a/public/language/nl/topic.json b/public/language/nl/topic.json index 76f174d10d..5f9250bea4 100644 --- a/public/language/nl/topic.json +++ b/public/language/nl/topic.json @@ -12,6 +12,7 @@ "notify_me": "Krijg notificaties van nieuwe reacties op dit onderwerp", "quote": "Citeren", "reply": "Reageren", + "guest-login-reply": "Log in to reply", "edit": "Aanpassen", "delete": "Verwijderen", "purge": "weggooien", @@ -74,6 +75,7 @@ "fork_no_pids": "Geen berichten geselecteerd!", "fork_success": "Met succes het onderwerp gesplitst. klik hier om naar het nieuwe onderwerp te gaan.", "composer.title_placeholder": "Vul de titel voor het onderwerp hier in...", + "composer.handle_placeholder": "Naam", "composer.discard": "Annuleren", "composer.submit": "Opslaan", "composer.replying_to": "Reageren op %1", @@ -92,5 +94,6 @@ "sort_by": "gesorteerd op", "oldest_to_newest": "Oud naar Nieuw", "newest_to_oldest": "Nieuw naar Oud", - "most_votes": "Meeste stemmen" + "most_votes": "Meeste stemmen", + "most_posts": "Meeste berichten" } \ No newline at end of file diff --git a/public/language/nl/user.json b/public/language/nl/user.json index 6b99ab28c8..0cc9df6cbe 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -2,6 +2,8 @@ "banned": "Verbannen", "offline": "Offline", "username": "Gebruikersnaam", + "joindate": "Datum van registratie", + "postcount": "Post Count", "email": "Email", "confirm_email": "Bevestig uw email adres", "delete_account": "Account Verwijderen", @@ -16,6 +18,7 @@ "profile_views": "Profiel weergaven", "reputation": "Reputatie", "favourites": "Favorieten", + "watched": "Watched", "followers": "Volgers", "following": "Volgend", "signature": "Handtekening", @@ -56,10 +59,12 @@ "digest_weekly": "Weekelijks", "digest_monthly": "Maandelijks", "send_chat_notifications": "Verstuur mij een email als iemand een chatbericht stuurt terwijl ik niet online ben", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Deze gebruiker heeft geen volgers :(", "follows_no_one": "Deze gebruiker volgt niemand :(", "has_no_posts": "Deze gebruiker heeft nog geen berichten geplaatst", "has_no_topics": "Deze gebruiker heeft nog geen berichten geplaatst", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Email Verborgen", "hidden": "verborgen", "paginate_description": "Blader door onderwerpen en berichten in plaats van oneindig scrollen.", diff --git a/public/language/nl/users.json b/public/language/nl/users.json index 7dd347b5c3..315b86fe31 100644 --- a/public/language/nl/users.json +++ b/public/language/nl/users.json @@ -5,5 +5,8 @@ "search": "Zoeken", "enter_username": "Vul een gebruikersnaam in om te zoeken", "load_more": "Meer Laden", - "users-found-search-took": "%1 gebruiker(s) gevonden! Zoekactie duurde %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter op", + "online-only": "Online ", + "picture-only": "Alleen een afbeelding" } \ No newline at end of file diff --git a/public/language/pl/category.json b/public/language/pl/category.json index fe8b77fe54..a6e6ec1b0f 100644 --- a/public/language/pl/category.json +++ b/public/language/pl/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Nowy wątek", + "guest-login-post": "Zaloguj się, aby napisać.", "no_topics": "W tej kategorii nie ma jeszcze żadnych wątków.
Dlaczego ty nie utworzysz jakiegoś?", "browsing": "przegląda", "no_replies": "Nikt jeszcze nie odpowiedział", diff --git a/public/language/pl/email.json b/public/language/pl/email.json index d6293baa43..da76caf73c 100644 --- a/public/language/pl/email.json +++ b/public/language/pl/email.json @@ -9,14 +9,19 @@ "reset.text1": "Otrzymaliśmy żądanie przywrócenia Twojego hasła. Jeśli nie żądałeś przywrócenia hasła, zignoruj ten e-mail.", "reset.text2": "Aby przywrócić swoje hasło, skorzystaj z poniższego linku:", "reset.cta": "Kliknij tu, by przywrócić swoje hasło", + "reset.notify.subject": "Hasło pomyślnie zmienione", + "reset.notify.text1": "Informujemy, że %1, twoje hasło zostało pomyślnie zmienione.", + "reset.notify.text2": "Jeśli nie wyraziłeś na to zgody, proszę niezwłocznie poinformuj administratora.", "digest.notifications": "Masz nowe powiadomienia od %1:", "digest.latest_topics": "Ostatnie tematy z %1", "digest.cta": "Kliknij, by odwiedzić %1", "digest.unsub.info": "To podsumowanie zostało wysłane zgodnie z Twoimi ustawieniami.", - "digest.no_topics": "There have been no active topics in the past %1", - "notif.chat.subject": "Nowa wiadomość chatu od %1", + "digest.no_topics": "Nie było żadnych aktywnych wątków %1", + "notif.chat.subject": "Nowa wiadomość czatu od %1", "notif.chat.cta": "Kliknij tutaj, by kontynuować konwersację", - "notif.chat.unsub.info": "To powiadomienie o chacie zostało Ci wysłane zgodnie z ustawieniami Twojego konta.", + "notif.chat.unsub.info": "To powiadomienie o czacie zostało Ci wysłane zgodnie z ustawieniami Twojego konta.", + "notif.post.cta": "Kliknij tutaj, aby przeczytać cały wątek.", + "notif.post.unsub.info": "To powiadomienie o poście zostało Ci wysłane zgodnie z ustawieniami Twojego konta.", "test.text1": "To jest e-mail testowy, aby sprawdzić, czy poprawnie skonfigurowałeś e-mailer w swoim NodeBB.", "unsub.cta": "Kliknij tutaj, by zmienić te ustawienia", "closing": "Dziękujemy!" diff --git a/public/language/pl/error.json b/public/language/pl/error.json index 1d7e0298a4..c967749eeb 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -18,6 +18,9 @@ "username-taken": "Login zajęty.", "email-taken": "E-mail zajęty.", "email-not-confirmed": "Twój email nie został jeszcze potwierdzony. Proszę kliknąć tutaj by go potwierdzić.", + "email-not-confirmed-chat": "Nie możesz rozmawiać do czasu, gdy twój email zostanie potwierdzony.", + "no-email-to-confirm": "To forum wymaga weryfikacji przez email. Proszę kliknąć tutaj, aby wprowadzić adres.", + "email-confirm-failed": "Nie byliśmy w stanie potwierdzić twojego email-a. Proszę spróbować później.", "username-too-short": "Nazwa użytkownika za krótka.", "username-too-long": "Zbyt długa nazwa użytkownika", "user-banned": "Użytkownik zbanowany", @@ -32,21 +35,29 @@ "no-emailers-configured": "Nie zainstalowano żadnego dodatku obsługującego e-mail, więc nie można wysłać testowej wiadomości.", "category-disabled": "Kategoria wyłączona.", "topic-locked": "Temat zamknięty", + "post-edit-duration-expired": "Możesz edytować posty przez %1 sekund po napisaniu.", "still-uploading": "Poczekaj na pełne załadowanie", "content-too-short": "Proszę wpisać dłuższy post. Posty powinny zawierać co najmniej %1 znaków.", + "content-too-long": "Proszę wpisać krótszy post. Posty nie mogą zawierać więcej niż %1 znaków.", "title-too-short": "Proszę podać dłuższy tytuł. Tytuły powinny zawierać co najmniej %1 znaków.", "title-too-long": "Wpisz krótszy tytuł, nie może być dłuższy niż %1 znaków.", "too-many-posts": "Możesz wysyłać posty co %1 sekund - proszę poczekać", "too-many-posts-newbie": "Jako nowy użytkownik, możesz wysyłać posty co %1 sekund, do chwili aż zbierzesz %2 reputacji - proszę poczekać przed ponownym wysłaniem posta", + "tag-too-short": "Proszę podać dłuższy tag. Tagi powinny zawierać co najmniej %1 znaków.", + "tag-too-long": "Proszę podać krótszy tag. Tagi nie mogą być dłuższe niż %1 znaków.", "file-too-big": "Maksymalny dozwolony rozmiar pliku to %1 kb - proszę wybrać mniejszy plik", "cant-vote-self-post": "Nie możesz głosować na własny post", "already-favourited": "Już polubiłeś ten post", "already-unfavourited": "Już przestałeś lubić ten post", "cant-ban-other-admins": "Nie możesz zbanować innych adminów!", - "invalid-image-type": "Błędny typ pliku", + "invalid-image-type": "Błędny typ pliku. Dozwolone typy to: %1", + "invalid-image-extension": "Błędne rozszerzenie pliku", + "invalid-file-type": "Błędny typ pliku. Dozwolone typy to: %1", "group-name-too-short": "Nazwa grupy za krótka", "group-already-exists": "Grupa już istnieje", "group-name-change-not-allowed": "Nie można zmieniać nazwy tej grupy.", + "group-already-member": "Już należysz do tej grupy", + "group-needs-owner": "Ta grupa musi mieć przynajmniej jednego właściciela", "post-already-deleted": "Ten post został już skasowany", "post-already-restored": "Ten post został już przywrócony", "topic-already-deleted": "Ten temat został już skasowany", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Miniatury tematów są wyłączone", "invalid-file": "Błędny plik", "uploads-are-disabled": "Uploadowanie jest wyłączone", - "upload-error": "Błąd uploadu: %1", "signature-too-long": "Przepraszamy, ale podpis nie może być dłuższy niż %1 znaków.", - "cant-chat-with-yourself": "Nie możesz czatować ze sobą", + "cant-chat-with-yourself": "Nie możesz rozmawiać ze sobą", "chat-restricted": "Ten użytkownik ograniczył swoje czaty. Musi Cię śledzić, zanim będziesz mógł z nim czatować.", + "too-many-messages": "Wysłałeś zbyt wiele wiadomości, proszę poczekaj chwilę.", "reputation-system-disabled": "System reputacji został wyłączony", "downvoting-disabled": "Ocena postów jest wyłączona", "not-enough-reputation-to-downvote": "Masz za mało reputacji by ocenić ten post.", "not-enough-reputation-to-flag": "Nie masz dość reputacji, by flagować ten post", "reload-failed": "NodeBB napotkał problem w czasie ładowania \"%1\". Forum będzie nadal dostarczać zasoby dostępne w kliencie, jednak powinieneś cofnąć ostatnią akcję.", - "registration-error": "Registration Error" + "registration-error": "Błąd rejestracji", + "parse-error": "Coś poszło nie tak podczas parsingu odpowiedzi serwera", + "wrong-login-type-email": "Zaloguj się używając adresu email", + "wrong-login-type-username": "Zaloguj się używając nazwy użytkownika" } \ No newline at end of file diff --git a/public/language/pl/global.json b/public/language/pl/global.json index 38add8afba..a12b45bcdf 100644 --- a/public/language/pl/global.json +++ b/public/language/pl/global.json @@ -3,9 +3,10 @@ "search": "Szukaj", "buttons.close": "Zamknij", "403.title": "Dostęp zabroniony", - "403.message": "Natknąłeś się na stronę, do której nie masz dostępu. Może spróbuj się zalogować?", + "403.message": "Wygląda na to, że trafiłeś na stronę, do której nie masz dostępu.", + "403.login": "Może powinieneś się zalogować?", "404.title": "Nie znaleziono", - "404.message": "Natknąłeś się na nieistniejącą stronę. Wróć do strony głównej.", + "404.message": "Wygląda na to, że trafiłeś na stronę, która nie istnieje. Wróć do strony głównej.", "500.title": "Błąd wewnętrzny", "500.message": "Ups! Coś poszło nie tak.", "register": "Zarejestruj się", @@ -26,6 +27,7 @@ "header.tags": "Tagi", "header.popular": "Popularne", "header.users": "Użytkownicy", + "header.groups": "Grupy", "header.chats": "Rozmowy", "header.notifications": "Powiadomienia", "header.search": "Szukaj", @@ -73,5 +75,7 @@ "updated.title": "Forum zaktualizowane", "updated.message": "To forum zostało zaktualizowane do najnowszej wersji. Kliknij tutaj by odświeżyć stronę", "privacy": "Prywatność", - "delete_all": "Delete All" + "follow": "Obserwuj", + "unfollow": "Przestań śledzić", + "delete_all": "Usuń wszystko" } \ No newline at end of file diff --git a/public/language/pl/groups.json b/public/language/pl/groups.json index d618ade34b..b9c32948b9 100644 --- a/public/language/pl/groups.json +++ b/public/language/pl/groups.json @@ -1,8 +1,34 @@ { "groups": "Grupy", "view_group": "Obejrzyj grupę", + "owner": "Właściciel grupy", + "new_group": "Stwórz nową grupę", + "no_groups_found": "Brak grup do wyświetlenia", + "pending.accept": "Przyjmij", + "pending.reject": "Odrzuć", + "cover-instructions": "Przeciągnij i upuść zdjęcie, ustaw w odpowiedniej pozycji i kliknij Zapisz", + "cover-change": "Zmień", + "cover-save": "Zapisz", + "cover-saving": "Zapisuję", "details.title": "Szczegóły grupy", "details.members": "Lista członków", + "details.pending": "Członkowie oczekujący", "details.has_no_posts": "Członkowie tej grupy nie napisali żadnych postów.", - "details.latest_posts": "Ostatnie posty" + "details.latest_posts": "Ostatnie posty", + "details.private": "Prywatna", + "details.grant": "Nadaj/Cofnij prawa Właściciela", + "details.kick": "Wykop", + "details.owner_options": "Administracja grupy", + "details.group_name": "Nazwa grupy", + "details.description": "Opis", + "details.badge_preview": "Podgląd plakietki", + "details.change_icon": "Zmień ikonę", + "details.change_colour": "Zmień kolor", + "details.badge_text": "Treść plakietki", + "details.userTitleEnabled": "Pokaż plakietkę", + "details.private_help": "Jeśli aktywowane, przystępowanie do grup wymaga zatwierdzenia przez właściciela grupy", + "details.hidden": "Ukryty", + "details.hidden_help": "Jeśli aktywowane, ta grupa nie będzie widoczna w wykazie grup, a użytkownicy będą musieli być zapraszani manualnie.", + "event.updated": "Dane grupy zostały zaktualizowane", + "event.deleted": "Grupa \"%1\" została skasowana" } \ No newline at end of file diff --git a/public/language/pl/login.json b/public/language/pl/login.json index cc6f749e15..1133f6afba 100644 --- a/public/language/pl/login.json +++ b/public/language/pl/login.json @@ -1,5 +1,7 @@ { - "username": "Nazwa użytkownika lub adres e-mail", + "username-email": "Nazwa użytkownika lub adres e-mail", + "username": "Nazwa użytkownika", + "email": "Adres e-mail", "remember_me": "Zapamiętaj mnie", "forgot_password": "Zapomniałeś hasło?", "alternative_logins": "Alternatywne logowanie", diff --git a/public/language/pl/modules.json b/public/language/pl/modules.json index aca4a95c56..af44c3ab51 100644 --- a/public/language/pl/modules.json +++ b/public/language/pl/modules.json @@ -1,16 +1,16 @@ { "chat.chatting_with": "Rozmawiaj z ", - "chat.placeholder": "Wpisz wiadomość czatu tutaj, naciśnij enter by wysłać.", + "chat.placeholder": "Wpisz wiadomość tutaj i naciśnij Enter aby wysłać.", "chat.send": "Wyślij", "chat.no_active": "Nie prowadzisz obecnie żadnych rozmów.", "chat.user_typing": "%1 pisze...", "chat.user_has_messaged_you": "%1 napisał do Ciebie", - "chat.see_all": "Pokaż wszystkie czaty", - "chat.no-messages": "Wybierz odbiorce by zobaczyć historię czatu.", - "chat.recent-chats": "Ostatnie czaty.", + "chat.see_all": "Pokaż wszystkie rozmowy", + "chat.no-messages": "Wybierz odbiorcę, by wyświetlić historię rozmów.", + "chat.recent-chats": "Ostatnie rozmowy", "chat.contacts": "Kontakty", "chat.message-history": "Historia wiadomości", - "chat.pop-out": "Pokaż czat", + "chat.pop-out": "Otwórz rozmowę w nowym oknie", "chat.maximize": "Maksymalizuj", "chat.seven_days": "7 dni", "chat.thirty_days": "30 dni", diff --git a/public/language/pl/notifications.json b/public/language/pl/notifications.json index ad8cc4de3d..2a24b7c122 100644 --- a/public/language/pl/notifications.json +++ b/public/language/pl/notifications.json @@ -2,6 +2,7 @@ "title": "Powiadomienia", "no_notifs": "Nie masz nowych powiadomień", "see_all": "Zobacz wszystkie powiadomienia", + "mark_all_read": "Oznacz wszystkie powiadomienia jako przeczytane", "back_to_home": "Wróć do %1", "outgoing_link": "Łącze wychodzące", "outgoing_link_message": "Opuszczasz %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1
zaczął Cię śledzić.", "email-confirmed": "E-mail potwierdzony", "email-confirmed-message": "Dziękujemy za potwierdzenie maila. Twoje konto zostało aktywowane.", - "email-confirm-error": "Wystąpił błąd.", "email-confirm-error-message": "Wystąpił problem przy aktywacji, - kod jest błędny lub przestarzały", "email-confirm-sent": "E-mail potwierdzający wysłany" } \ No newline at end of file diff --git a/public/language/pl/pages.json b/public/language/pl/pages.json index f8afb878f5..7f71ba388a 100644 --- a/public/language/pl/pages.json +++ b/public/language/pl/pages.json @@ -11,6 +11,7 @@ "user.followers": "Obserwujący %1", "user.posts": "Posty napisane przez %1", "user.topics": "Wątki stworzone przez %1", + "user.groups": "Grupy %1", "user.favourites": "Ulubione posty %1", "user.settings": "Ustawienia użytkownika", "maintenance.text": "Obecnie trwają prace konserwacyjne nad %1. Proszę wrócić później.", diff --git a/public/language/pl/recent.json b/public/language/pl/recent.json index 207d22a1d8..563533001f 100644 --- a/public/language/pl/recent.json +++ b/public/language/pl/recent.json @@ -5,5 +5,15 @@ "month": "Miesiąc", "year": "Rok", "alltime": "Od początku", - "no_recent_topics": "Brak ostatnich wątków." + "no_recent_topics": "Brak ostatnich wątków.", + "no_popular_topics": "Brak popularnych wątków.", + "there-is-a-new-topic": "Masz nowy wątek.", + "there-is-a-new-topic-and-a-new-post": "Masz nowy wątek i nowy post.", + "there-is-a-new-topic-and-new-posts": "Masz nowy wątek i %1 nowych postów.", + "there-are-new-topics": "Masz %1 nowych wątków.", + "there-are-new-topics-and-a-new-post": "Masz %1 nowych wątków i nowy post.", + "there-are-new-topics-and-new-posts": "Masz %1 nowych wątków i %2 nowych postów.", + "there-is-a-new-post": "Masz nowy post.", + "there-are-new-posts": "Masz %1 nowych postów.", + "click-here-to-reload": "Kliknij tutaj, aby przeładować." } \ No newline at end of file diff --git a/public/language/pl/reset_password.json b/public/language/pl/reset_password.json index fa0affeab6..57b58f35e3 100644 --- a/public/language/pl/reset_password.json +++ b/public/language/pl/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Podaj swój adres e-mail i wyślemy ci wiadomość z instrukcjami jak zresetować hasło.", "enter_email_address": "Wpisz swój adres e-mail", "password_reset_sent": "Instrukcje zostały wysłane", - "invalid_email": "Niepoprawny adres e-mail." + "invalid_email": "Niepoprawny adres e-mail.", + "password_too_short": "Wprowadzone hasło jest zbyt krótkie, proszę wybierz inne hasło.", + "passwords_do_not_match": "Wprowadzone hasła nie pasują do siebie" } \ No newline at end of file diff --git a/public/language/pl/search.json b/public/language/pl/search.json index ed42681f15..52b4e5a137 100644 --- a/public/language/pl/search.json +++ b/public/language/pl/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 wyników pasujących do \"%2\", (%3 sekund)", - "no-matches": "Nie znaleziono postów" + "no-matches": "Nie znaleziono pasujących wyników", + "in": "W", + "by": "Przez", + "titles": "Tytuły", + "titles-posts": "Tytuły i posty", + "posted-by": "Napisane przez", + "in-categories": "W kategoriach", + "search-child-categories": "Przeszukaj podkategorie", + "reply-count": "Ilość odpowiedzi", + "at-least": "Przynajmniej", + "at-most": "Co najwyżej", + "post-time": "Napisano", + "newer-than": "Nowsze niż", + "older-than": "Starsze niż", + "any-date": "Kiedykolwiek", + "yesterday": "Wczoraj", + "one-week": "Jeden tydzień", + "two-weeks": "Dwa tygodnie", + "one-month": "Jeden miesiąc", + "three-months": "Trzy miesiące", + "six-months": "Sześć miesięcy", + "one-year": "Jeden rok", + "sort-by": "Sortuj po", + "last-reply-time": "Odpowiedziano ostatnio", + "topic-title": "Tytuł wątku", + "number-of-replies": "Ilość odpowiedzi", + "number-of-views": "Ilość wyświetleń", + "topic-start-date": "Data utworzenia wątku", + "username": "Nazwa użytkownika", + "category": "Kategoria", + "descending": "W kolejności malejącej", + "ascending": "W kolejności rosnącej", + "save-preferences": "Zapisz ustawienia", + "clear-preferences": "Wyczyść ustawienia", + "search-preferences-saved": "Ustawienia wyszukiwania zapisane", + "search-preferences-cleared": "Ustawienia wyszukiwania wyczyszczone", + "show-results-as": "Pokaż wyniki jako" } \ No newline at end of file diff --git a/public/language/pl/success.json b/public/language/pl/success.json index d8633f5ccd..afef91d9a0 100644 --- a/public/language/pl/success.json +++ b/public/language/pl/success.json @@ -1,6 +1,6 @@ { "success": "Sukces!", - "topic-post": "Wysłałeś posta!", - "authentication-successful": "Autoryzacja przebiegła pomyślnie!", - "settings-saved": "Ustawienia zapisane!" + "topic-post": "Twój post został wysłany.", + "authentication-successful": "Zostałeś pomyślnie zalogowany.", + "settings-saved": "Ustawienia zostały zapisane." } \ No newline at end of file diff --git a/public/language/pl/tags.json b/public/language/pl/tags.json index 57f1a280df..3036b34e62 100644 --- a/public/language/pl/tags.json +++ b/public/language/pl/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Nie ma tematów z tym tagiem", "tags": "Tagi", - "enter_tags_here": "Tutaj wpisz tagi. Naciśnij enter po każdym.", + "enter_tags_here": "Tutaj wpisz tagi. %1-%2 znaków. Naciśnij enter po każdym.", "enter_tags_here_short": "Wpisz tagi...", "no_tags": "Jeszcze nie ma tagów." } \ No newline at end of file diff --git a/public/language/pl/topic.json b/public/language/pl/topic.json index ded37cf3db..f27171c5fa 100644 --- a/public/language/pl/topic.json +++ b/public/language/pl/topic.json @@ -12,9 +12,10 @@ "notify_me": "Powiadamiaj mnie o nowych odpowiedziach w tym wątku", "quote": "Cytuj", "reply": "Odpowiedz", + "guest-login-reply": "Zaloguj się, aby odpowiedzieć.", "edit": "Edytuj", "delete": "Usuń", - "purge": "Wyczyść", + "purge": "Wymaż", "restore": "Przywróć", "move": "Przenieś", "fork": "Skopiuj", @@ -50,8 +51,8 @@ "thread_tools.delete_confirm": "Na pewno chcesz skasować ten wątek?", "thread_tools.restore": "Przywróć wątek", "thread_tools.restore_confirm": "Na pewno chcesz przywrócić ten wątek?", - "thread_tools.purge": "Wyczyść wątek", - "thread_tools.purge_confirm": "Na pewno chcesz wyczyścić ten wątek?", + "thread_tools.purge": "Wymaż wątek", + "thread_tools.purge_confirm": "Na pewno chcesz wymazać ten wątek?", "topic_move_success": "Temat przeniesiono do %1", "post_delete_confirm": "Na pewno chcesz usunąć ten post?", "post_restore_confirm": "Na pewno chcesz przywrócić ten post?", @@ -72,8 +73,9 @@ "topic_will_be_moved_to": "Ten wątek zostanie przeniesiony do kategorii", "fork_topic_instruction": "Zaznacz posty, które chcesz sklonować", "fork_no_pids": "Nie zaznaczyłeś żadnych postów!", - "fork_success": "Successfully forked topic! Click here to go to the forked topic.", + "fork_success": "Udało się skopiować wątek. Kliknij tutaj, aby do niego przejść.", "composer.title_placeholder": "Wpisz tytuł wątku tutaj", + "composer.handle_placeholder": "Nazwa", "composer.discard": "Odrzuć", "composer.submit": "Wyślij", "composer.replying_to": "Odpowiadanie na %1", @@ -89,8 +91,9 @@ "more_users": "%1 więcej użytkownik(ów)", "more_guests": "%1 więcej gośc(i)", "users_and_others": "%1 i %2 innych", - "sort_by": "Sortuj po", + "sort_by": "Sortuj według", "oldest_to_newest": "Najpierw najstarsze", "newest_to_oldest": "Najpierw najnowsze", - "most_votes": "Najwięcej głosów" + "most_votes": "Najwięcej głosów", + "most_posts": "Najwięcej postów" } \ No newline at end of file diff --git a/public/language/pl/user.json b/public/language/pl/user.json index 8c11d5e145..e28e3f637f 100644 --- a/public/language/pl/user.json +++ b/public/language/pl/user.json @@ -2,6 +2,8 @@ "banned": "Zbanowany", "offline": "Offline", "username": "Nazwa użytkownika", + "joindate": "Data rejestracji", + "postcount": "Liczba postów", "email": "Adres e-mail", "confirm_email": "Potwierdź e-mail", "delete_account": "Skasuj konto", @@ -16,6 +18,7 @@ "profile_views": "wyświetleń", "reputation": "reputacji", "favourites": "Ulubione", + "watched": "Obserwowane", "followers": "Obserwujących", "following": "Obserwowanych", "signature": "Sygnatura", @@ -48,18 +51,20 @@ "settings": "Ustawienia", "show_email": "Wyświetlaj mój adres e-mail", "show_fullname": "Wyświetlaj moją pełną nazwę", - "restrict_chats": "Pozwalaj tylko na czaty od użytkowników, których śledzę", + "restrict_chats": "Pozwalaj tylko na rozmowy z użytkownikami, których śledzę", "digest_label": "Przysyłaj okresowe podsumowanie wiadomości na forum", "digest_description": "Subskrybuj by dostawać maile z tego forum (nowe powiadomienia i tematy) zgodnie z ustalonym harmonogramem.", "digest_off": "Wyłączone", "digest_daily": "Codziennie", "digest_weekly": "Co tydzień", "digest_monthly": "Co miesiąc", - "send_chat_notifications": "Wyślij e-maila, jeśli dostanę nową wiadomość z chatu, a nie jestem on-line", + "send_chat_notifications": "Wyślij e-maila, jeśli dostanę nową wiadomość, a nie jestem on-line", + "send_post_notifications": "Wyślij e-maila, kiedy wątki, które subskrybuję otrzymają odpowiedź", "has_no_follower": "Ten użytkownik nie ma jeszcze żadnych obserwujących", "follows_no_one": "Użytkownik jeszcze nikogo nie obsweruje.", "has_no_posts": "Użytkownik nie napisał jeszcze żadnych postów.", "has_no_topics": "Ten użytkownik nie napisał jeszcze żadnego wątku.", + "has_no_watched_topics": "Ten użytkownik nie obserwował jeszcze żadnego wątku.", "email_hidden": "Adres e-mail ukryty", "hidden": "ukryty", "paginate_description": "Użyj klasycznego trybu paginacji zamiast nieskończonego przewijania.", @@ -68,8 +73,8 @@ "notification_sounds": "Odtwórz dźwięk po otrzymaniu powiadomienia.", "browsing": "Ustawienia szukania", "open_links_in_new_tab": "Otwierać linki zewnętrzne w nowych kartach?", - "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.", + "enable_topic_searching": "Odblokuj szukanie w wątku", + "topic_search_help": "Jeśli odblokowane, szukanie w wątku zastąpi domyślną funkcję szukania przeglądarki, pozwalając na wyszukiwanie fraz tylko w wątku, a nie na całej stronie.", "follow_topics_you_reply_to": "Śledź tematy, w których piszesz.", "follow_topics_you_create": "Śledź swoje tematy." } \ No newline at end of file diff --git a/public/language/pl/users.json b/public/language/pl/users.json index cd1d22696b..b41b99309a 100644 --- a/public/language/pl/users.json +++ b/public/language/pl/users.json @@ -5,5 +5,8 @@ "search": "Szukaj", "enter_username": "Wpisz nazwę użytkownika", "load_more": "Więcej", - "users-found-search-took": "Znaleziono %1 użytkowników. Szukanie zajęło %2 ms." + "users-found-search-took": "Znaleziono %1 użytkownik(ów). Szukanie zajęło %2 sek.", + "filter-by": "Filtruj", + "online-only": "Tylko dostępny", + "picture-only": "Tylko ze zdjęciem" } \ No newline at end of file diff --git a/public/language/pt_BR/category.json b/public/language/pt_BR/category.json index 42b2b4017f..a781984e16 100644 --- a/public/language/pt_BR/category.json +++ b/public/language/pt_BR/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Novo Tópico", + "guest-login-post": "Log in to post", "no_topics": "Não tem nenhum tópico nesta categoria.
Por que você não tenta postar o algum?", "browsing": "navegando", "no_replies": "Ninguém respondeu", diff --git a/public/language/pt_BR/email.json b/public/language/pt_BR/email.json index f42a4b4987..cca995c0a5 100644 --- a/public/language/pt_BR/email.json +++ b/public/language/pt_BR/email.json @@ -9,6 +9,9 @@ "reset.text1": "Nós recebemos um pedido para reconfigurar sua senha, possivelmente porque você a esqueceu. Se este não é o caso, por favor ignore este email.", "reset.text2": "Para continuar com a reconfiguração de senha, por favor clique no seguinte link:", "reset.cta": "Clique aqui para reconfigurar sua senha", + "reset.notify.subject": "Senha alterada com sucesso", + "reset.notify.text1": "Nós estamos notificando você que em %1, sua senha foi alterada com sucesso.", + "reset.notify.text2": "Se você não autorizou isso, por favor notifique um administrador imediatamente.", "digest.notifications": "Você tem notificações não lidas de %1:", "digest.latest_topics": "Últimos tópicos de %1", "digest.cta": "Clique aqui para visitar %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "Nova mensagem de chat recebida de %1", "notif.chat.cta": "Clique aqui para continuar a conversa", "notif.chat.unsub.info": "Esta notificação de chat foi enviada a você devido às suas configurações de assinatura.", + "notif.post.cta": "Clique aqui para ler o tópico completo", + "notif.post.unsub.info": "Esta notificação de postagem foi enviada para você devido as suas configurações de assinatura.", "test.text1": "Este é um e-mail de teste, para verificar que o enviador de emails está corretamente configurado no seu NodeBB.", "unsub.cta": "Clique aqui para alterar estas configurações", "closing": "Obrigado!" diff --git a/public/language/pt_BR/error.json b/public/language/pt_BR/error.json index e5b637d321..359f3c654a 100644 --- a/public/language/pt_BR/error.json +++ b/public/language/pt_BR/error.json @@ -18,6 +18,9 @@ "username-taken": "Nome de usuário já existe", "email-taken": "Email já cadastrado", "email-not-confirmed": "O seu email ainda não foi confirmado, por favor clique aqui para confirmar seu email.", + "email-not-confirmed-chat": "Você não pode usar o chat até que seu email seja confirmado", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Nome de usuário muito curto", "username-too-long": "Nome de usuário muito longo", "user-banned": "Usuário banido", @@ -32,21 +35,29 @@ "no-emailers-configured": "Nenhum plugin de email foi carregado, por isso um email de teste não pôde ser enviado", "category-disabled": "Categoria desativada", "topic-locked": "Tópico Trancado", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Aguarde a conclusão dos uploads.", "content-too-short": "Por favor digite um post mais longo. Posts devem conter no mínimo %1 caracteres.", + "content-too-long": "Por favor entre com um post mais curto. Posts não podem ser maiores do que %1 caracteres.", "title-too-short": "Por favor digite um título mais longo. Títulos devem conter no mínimo %1 caracteres.", "title-too-long": "Por favor entre com um título mais curto; Títulos não podem ser maiores que %1 caracteres.", "too-many-posts": "Você pode postar apenas uma vez a cada %1 segundos - por favor aguarde antes de postar novamente", "too-many-posts-newbie": "Como novo usuário, você pode postar apenas uma vez a cada %1 segundos até que você tenha recebido reputação de %2 - por favor aguarde antes de postar novamente", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "O tamanho máximo permitido de arquivo é %1 kbs - por favor faça upload de um arquivo menor", "cant-vote-self-post": "Você não pode votar no seu próprio post", "already-favourited": "Você já adicionou este post aos favoritos", "already-unfavourited": "Você já removeu este post dos favoritos", "cant-ban-other-admins": "Você não pode banir outros administradores!", - "invalid-image-type": "Formato inválido de imagem", + "invalid-image-type": "Tipo inválido de imagem. Os tipos permitidos são: %1", + "invalid-image-extension": "Extensão de imagem inválida", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Nome do grupo é muito curto", "group-already-exists": "O grupo já existe", "group-name-change-not-allowed": "Sem permissão para alterar nome do grupo", + "group-already-member": "Você já faz parte deste grupo", + "group-needs-owner": "Este grupo requer ao menos um dono", "post-already-deleted": "Este post já foi deletado", "post-already-restored": "Este post já foi restaurado", "topic-already-deleted": "Esté tópico já foi deletado", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Thumbnails para tópico estão desativados.", "invalid-file": "Arquivo Inválido", "uploads-are-disabled": "Uploads estão desativados", - "upload-error": "Erro de Upload : %1", "signature-too-long": "Desculpe, sua assinatura não pode ser maior que %1 caracteres.", "cant-chat-with-yourself": "Você não pode iniciar um chat consigo mesmo!", "chat-restricted": "Este usuário restringiu suas mensagens de chat. Eles devem seguir você antes que você possa conversar com eles", + "too-many-messages": "Você enviou muitas mensagens, por favor aguarde um momento.", "reputation-system-disabled": "O sistema de reputação está desabilitado.", "downvoting-disabled": "Negativação está desabilitada", "not-enough-reputation-to-downvote": "Você não possui reputação suficiente para negativar este post", "not-enough-reputation-to-flag": "Você não possui reputação suficiente para sinalizar este post", "reload-failed": "O NodeBB encontrou um problema ao recarregar: \"%1\". O NodeBB continuará a servir os assets existentes no lado do cliente, apesar de que você deve desfazer o que você fez antes de recarregar.", - "registration-error": "Erro de Cadastro" + "registration-error": "Erro de Cadastro", + "parse-error": "Algo deu errado ao conseguir resposta do servidor", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/pt_BR/global.json b/public/language/pt_BR/global.json index 898092d10e..d9bb14a846 100644 --- a/public/language/pt_BR/global.json +++ b/public/language/pt_BR/global.json @@ -3,9 +3,10 @@ "search": "Procurar", "buttons.close": "Fechar", "403.title": "Acesso Negado", - "403.message": "Parece que você chegou à uma página que você não pode acessar. Talvez você devesse tentar logar?", + "403.message": "Parece que você chegou à uma página à qual você não tem acesso.", + "403.login": "Talvez você deveria tentar logar?", "404.title": "Não Encontrado", - "404.message": "Parece que você chegou à uma página que não existe. Retorne para a página principal.", + "404.message": "Parece que você chegou à uma página que não existe. Voltar para a página inicial.", "500.title": "Erro interno.", "500.message": "Oops! Parece que algo deu errado!", "register": "Cadastrar", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "Popular", "header.users": "Usuários", + "header.groups": "Grupos", "header.chats": "Chats", "header.notifications": "Notificações", "header.search": "Procurar", @@ -73,5 +75,7 @@ "updated.title": "Fórum Atualizado", "updated.message": "Este fórum foi atualizado para sua última versão. Clique aqui para atualizar a página.", "privacy": "Privacidade", + "follow": "Seguir", + "unfollow": "Deixar de seguir", "delete_all": "Deletar Tudo" } \ No newline at end of file diff --git a/public/language/pt_BR/groups.json b/public/language/pt_BR/groups.json index 21f637560b..a9e9efa321 100644 --- a/public/language/pt_BR/groups.json +++ b/public/language/pt_BR/groups.json @@ -1,8 +1,34 @@ { "groups": "Grupos", "view_group": "Ver Grupo", + "owner": "Dono do Grupo", + "new_group": "Criar Novo Grupo", + "no_groups_found": "Não há grupos para ver", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Arraste uma foto, arraste para a posição correta e clique em Salvar", + "cover-change": "Alterar", + "cover-save": "Salvar", + "cover-saving": "Salvando", "details.title": "Detalhes do Grupo", "details.members": "Lista de Membros", + "details.pending": "Membros Pendentes", "details.has_no_posts": "Os membros deste grupo não fizeram quaisquer posts.", - "details.latest_posts": "Últimos Posts" + "details.latest_posts": "Últimos Posts", + "details.private": "Private", + "details.grant": "Conceder/Retomar a Posse", + "details.kick": "Chutar", + "details.owner_options": "Administração do Grupo", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Os detalhes do grupo foram atualizados", + "event.deleted": "O grupo \"%1\" foi deletado" } \ No newline at end of file diff --git a/public/language/pt_BR/login.json b/public/language/pt_BR/login.json index 210ff01ef7..9b267d8d9c 100644 --- a/public/language/pt_BR/login.json +++ b/public/language/pt_BR/login.json @@ -1,5 +1,7 @@ { - "username": "Nome de Usuário / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Lembrar de Mim?", "forgot_password": "Esqueceu a Senha?", "alternative_logins": "Logins Alternativos", diff --git a/public/language/pt_BR/notifications.json b/public/language/pt_BR/notifications.json index 48220327e2..72b406d47b 100644 --- a/public/language/pt_BR/notifications.json +++ b/public/language/pt_BR/notifications.json @@ -2,6 +2,7 @@ "title": "Notificações", "no_notifs": "Você não tem nenhuma notificação nova", "see_all": "Ver todas as Notificações", + "mark_all_read": "Mark all notifications read", "back_to_home": "Voltar para %1", "outgoing_link": "Link Externo", "outgoing_link_message": "Você deixou de seguir %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 começou a seguir você.", "email-confirmed": "Email Confirmado", "email-confirmed-message": "Obrigado por validar o seu email. Agora sua conta está plenamente ativada.", - "email-confirm-error": "Ocorreu um erro...", "email-confirm-error-message": "Houve um problema ao validar o seu endereço de email. Talvez o código era invalido ou tenha expirado.", "email-confirm-sent": "Email de confirmação enviado." } \ No newline at end of file diff --git a/public/language/pt_BR/pages.json b/public/language/pt_BR/pages.json index a65c95781b..415f50c0fd 100644 --- a/public/language/pt_BR/pages.json +++ b/public/language/pt_BR/pages.json @@ -11,6 +11,7 @@ "user.followers": "Pessoas que Seguem %1", "user.posts": "Posts feitos por %1", "user.topics": "Tópicos criados por %1", + "user.groups": "%1's Grupos", "user.favourites": "Posts Favoritos de %1", "user.settings": "Configurações de Usuário", "maintenance.text": "%1 está atualmente sob manutenção. Por favor retorne em outro momento.", diff --git a/public/language/pt_BR/recent.json b/public/language/pt_BR/recent.json index 3a90838f01..2af16e248a 100644 --- a/public/language/pt_BR/recent.json +++ b/public/language/pt_BR/recent.json @@ -5,5 +5,15 @@ "month": "Mês", "year": "Ano", "alltime": "Todos os Tempos", - "no_recent_topics": "Não há tópicos recentes." + "no_recent_topics": "Não há tópicos recentes.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "Há um novo tópico.", + "there-is-a-new-topic-and-a-new-post": "Há um novo tópico e um novo post.", + "there-is-a-new-topic-and-new-posts": "Há um novo tópico e %1 novos posts.", + "there-are-new-topics": "Há %1 novos tópicos.", + "there-are-new-topics-and-a-new-post": "Há %1 novos tópicos e um novo post.", + "there-are-new-topics-and-new-posts": "Há %1 novos tópicos e %2 novos posts.", + "there-is-a-new-post": "Há um novo post.", + "there-are-new-posts": "Há %1 novos posts.", + "click-here-to-reload": "Clique aqui para recarregar." } \ No newline at end of file diff --git a/public/language/pt_BR/reset_password.json b/public/language/pt_BR/reset_password.json index 7646899cd1..3aa6f341b4 100644 --- a/public/language/pt_BR/reset_password.json +++ b/public/language/pt_BR/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Por favor digite seu endereço de email e nós iremos lhe enviar em email com instruções de como reconfigurar a sua conta.", "enter_email_address": "Digite seu Email", "password_reset_sent": "Reconfiguração de Senha Enviada", - "invalid_email": "Email Inválido / Email não existe!" + "invalid_email": "Email Inválido / Email não existe!", + "password_too_short": "A senha entrada é muito curta, por favor escolha uma senha diferente.", + "passwords_do_not_match": "As duas senhas que você digitou não combinam." } \ No newline at end of file diff --git a/public/language/pt_BR/search.json b/public/language/pt_BR/search.json index 1b36858f11..695d7795ce 100644 --- a/public/language/pt_BR/search.json +++ b/public/language/pt_BR/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 resultado(s) contendo \"%2\", (%3 segundos)", - "no-matches": "Nenhum post encontrado" + "no-matches": "Nenhum resultado encontrado", + "in": "Em", + "by": "Por", + "titles": "Títulos", + "titles-posts": "Títulos e Posts", + "posted-by": "Postado por", + "in-categories": "Nas Categorias", + "search-child-categories": "Buscar categorias filhas", + "reply-count": "Contagem de Respostas", + "at-least": "No mínimo", + "at-most": "No máximo", + "post-time": "Hora da Postagem", + "newer-than": "Mais novo que", + "older-than": "Mais velho que", + "any-date": "Qualquer data", + "yesterday": "Ontem", + "one-week": "Uma semana", + "two-weeks": "Duas semanas", + "one-month": "Um mês", + "three-months": "Três meses", + "six-months": "Seis meses", + "one-year": "Um ano", + "sort-by": "Ordenar por", + "last-reply-time": "Tempo da última resposta", + "topic-title": "Título do tópico", + "number-of-replies": "Número de respostas", + "number-of-views": "Número de visualizações", + "topic-start-date": "Data do início do tópico", + "username": "Nome de usuário", + "category": "Categoria", + "descending": "Em ordem descendente", + "ascending": "Em ordem ascendente", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/pt_BR/tags.json b/public/language/pt_BR/tags.json index 4d598667b8..267888cbfa 100644 --- a/public/language/pt_BR/tags.json +++ b/public/language/pt_BR/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Não há tópicos com esta tag.", "tags": "Tags", - "enter_tags_here": "Digite as tags aqui. Pressione enter após cada tag.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Digite tags...", "no_tags": "Ainda não há tags." } \ No newline at end of file diff --git a/public/language/pt_BR/topic.json b/public/language/pt_BR/topic.json index 967836a09f..a99468a79f 100644 --- a/public/language/pt_BR/topic.json +++ b/public/language/pt_BR/topic.json @@ -12,6 +12,7 @@ "notify_me": "Seja notificado de novas respostas nesse tópico", "quote": "Citar", "reply": "Responder", + "guest-login-reply": "Log in to reply", "edit": "Editar", "delete": "Deletar", "purge": "Expurgar", @@ -74,6 +75,7 @@ "fork_no_pids": "Nenhum post selecionado!", "fork_success": "Tópico clonado com sucesso! Clique aqui para ir ao tópico clonado.", "composer.title_placeholder": "Digite aqui o título para o seu tópico...", + "composer.handle_placeholder": "Nome", "composer.discard": "Descartar", "composer.submit": "Enviar", "composer.replying_to": "Respondendo para %1", @@ -92,5 +94,6 @@ "sort_by": "Ordenar por", "oldest_to_newest": "Mais Antigo para Mais Recente", "newest_to_oldest": "Mais Recente para Mais Antigo", - "most_votes": "Mais votados" + "most_votes": "Mais votados", + "most_posts": "Mais posts" } \ No newline at end of file diff --git a/public/language/pt_BR/user.json b/public/language/pt_BR/user.json index 7fc6f2fa22..86412afd5c 100644 --- a/public/language/pt_BR/user.json +++ b/public/language/pt_BR/user.json @@ -2,6 +2,8 @@ "banned": "Banido", "offline": "Offline", "username": "Nome de Usuário", + "joindate": "Data de Entrada", + "postcount": "Número de Posts", "email": "Email", "confirm_email": "Confirmar Email", "delete_account": "Deletar Conta", @@ -16,6 +18,7 @@ "profile_views": "Visualizações de perfil", "reputation": "Reputação", "favourites": "Favoritos", + "watched": "Acompanhado", "followers": "Seguidores", "following": "Seguindo", "signature": "Assinatura", @@ -56,10 +59,12 @@ "digest_weekly": "Semanalmente", "digest_monthly": "Mensalmente", "send_chat_notifications": "Enviar-me um email se uma nova mensagem de chat chegar quando eu não estiver online.", + "send_post_notifications": "Enviar um email quando respostas forem dadas à tópicos que eu assino", "has_no_follower": "Este usuário não possui seguidores :(", "follows_no_one": "Este usuário não está seguindo ninguém :(", "has_no_posts": "Este usuário não postou nada ainda.", "has_no_topics": "Este usuário ainda não criou nenhum tópico.", + "has_no_watched_topics": "Este usuário ainda não acompanhou quaisquer tópicos.", "email_hidden": "Email Escondido", "hidden": "escondido", "paginate_description": "Paginação de tópicos e posts ao invés de usar \"rolagem infinita\".", diff --git a/public/language/pt_BR/users.json b/public/language/pt_BR/users.json index fc4058d07c..cc49b0fe57 100644 --- a/public/language/pt_BR/users.json +++ b/public/language/pt_BR/users.json @@ -5,5 +5,8 @@ "search": "Procurar", "enter_username": "Digite um nome de usuário para procurar", "load_more": "Carregar Mais", - "users-found-search-took": "%1 usuário(s) encontrado(s)! A pesquisa demorou %2 ms." + "users-found-search-took": "%1 usuário(s) encontrado(s)! A busca levou %2 segundos.", + "filter-by": "Filtrar Por", + "online-only": "Apenas Online", + "picture-only": "Apenas foto" } \ No newline at end of file diff --git a/public/language/ro/category.json b/public/language/ro/category.json index 7ff3d49fe6..733f5de0d7 100644 --- a/public/language/ro/category.json +++ b/public/language/ro/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Subiect Nou", + "guest-login-post": "Log in to post", "no_topics": "Nu există nici un subiect de discuție în această categorie.
De ce nu încerci să postezi tu unul?", "browsing": "navighează", "no_replies": "Nu a răspuns nimeni", diff --git a/public/language/ro/email.json b/public/language/ro/email.json index 568d987407..25f9723466 100644 --- a/public/language/ro/email.json +++ b/public/language/ro/email.json @@ -9,6 +9,9 @@ "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "Pentru a continua cu resetarea parolei, te rugăm sa apeși pe următorul link:", "reset.cta": "Apasă aici pentru a-ți reseta parola", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Ultimele mesaje de la %1", "digest.cta": "Apasă aici pentru a vizita %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "Ai primit un mesaj de la %1", "notif.chat.cta": "Apasă aici pentru a continua conversația", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "Acesta este un email de test pentru a verica dacă mailul este setat corect pentru NodeBB-ul tău.", "unsub.cta": "Apasă aici pentru a modifica acele setări", "closing": "Mulțumesc!" diff --git a/public/language/ro/error.json b/public/language/ro/error.json index e99d5e5b68..51ad7c7cbc 100644 --- a/public/language/ro/error.json +++ b/public/language/ro/error.json @@ -18,6 +18,9 @@ "username-taken": "Numele de utilizator este deja folosit", "email-taken": "Adresa de email este deja folostă", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Numele de utilizator este prea scurt", "username-too-long": "Numele de utilizator este prea lung", "user-banned": "Utilizator banat", @@ -32,21 +35,29 @@ "no-emailers-configured": "Nici un plugin pentru email nu a fost încărcat, așa că un email de test nu a fost trimis.", "category-disabled": "Categorie dezactivată", "topic-locked": "Subiect Închis", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Te rugăm să aștepți până se termină uploadul.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Te rugăm să introduci un titlu mai scurt. Titlurile nu pot fi mai lungi de %1 caractere.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "Nu poți vota propriul tău mesaj", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "Nu poți bana alți administratori!", - "invalid-image-type": "Tip de imagine invalid", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Numele grupului este prea scurt", "group-already-exists": "Grupul deja există", "group-name-change-not-allowed": "Schimbarea numelui grupului este interzisă", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Pictogramele pentru subiect sunt interzise.", "invalid-file": "Fișier invalid", "uploads-are-disabled": "Uploadurile sunt dezactivate", - "upload-error": "Eroare Upload : %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "Nu poți conversa cu tine!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Sistemul de reputație este dezactivat.", "downvoting-disabled": "Votarea negativă este dezactivată", "not-enough-reputation-to-downvote": "Nu ai destulă reputație pentru a vota negativ acest post.", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB a întâmpinat o problemă la reîncarcare: \"%1\". NodeBB va continua să servească fișierele existente pentru partea-client, dar tu va trebuie să refaci modificările pe care le-ai facut înainte de reîncarcare.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/ro/global.json b/public/language/ro/global.json index 1a2b9382e7..45939015de 100644 --- a/public/language/ro/global.json +++ b/public/language/ro/global.json @@ -3,9 +3,10 @@ "search": "Căutare", "buttons.close": "Închide", "403.title": "Acces Interzis", - "403.message": "Se pare că ai ajuns pe o pagină la care nu ai acces. Poate ar trebui să te autentifici?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Nu a fost găsit", - "404.message": "Se pare că ai ajuns pe o pagină care nu există. Întoarce-te la prima pagină.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Eroare internă.", "500.message": "Oops! Se pare că ceva a mers greșit!", "register": "Înregistrare", @@ -26,6 +27,7 @@ "header.tags": "Taguri", "header.popular": "Populare", "header.users": "Utilizatori", + "header.groups": "Groups", "header.chats": "Conversații", "header.notifications": "Notificări", "header.search": "Căutare", @@ -73,5 +75,7 @@ "updated.title": "Forumul a fost actualizat", "updated.message": "Acest forum a fost actualizat la ultima version. Apasă aici pentru a reîmprospăta pagina.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/ro/groups.json b/public/language/ro/groups.json index cd8cba493f..c41b17a0c5 100644 --- a/public/language/ro/groups.json +++ b/public/language/ro/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "Vezi Grup", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Detalii Grup", "details.members": "Listă Membrii", + "details.pending": "Pending Members", "details.has_no_posts": "Membrii acestui grup nu au facut nici o postare.", - "details.latest_posts": "Ultimele Mesaje" + "details.latest_posts": "Ultimele Mesaje", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/ro/login.json b/public/language/ro/login.json index 806a40d81b..31504eb1c1 100644 --- a/public/language/ro/login.json +++ b/public/language/ro/login.json @@ -1,5 +1,7 @@ { - "username": "Utilizator / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Autentifică-mă automat la fiecare vizită", "forgot_password": "Ai uitat parola?", "alternative_logins": "Autentificare Alternativă", diff --git a/public/language/ro/notifications.json b/public/language/ro/notifications.json index bf0fba8426..46bdd5fa7a 100644 --- a/public/language/ro/notifications.json +++ b/public/language/ro/notifications.json @@ -2,6 +2,7 @@ "title": "Notificări", "no_notifs": "Nu ai nici o notificare recentă", "see_all": "Vezi toate notificările", + "mark_all_read": "Mark all notifications read", "back_to_home": "Înapoi la %1", "outgoing_link": "Link Extern", "outgoing_link_message": "Acum părăsești %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 a început să te urmărească.", "email-confirmed": "Email confirmat", "email-confirmed-message": "Îți mulțumim pentru validarea emailului. Contul tău este acuma activat.", - "email-confirm-error": "S-a produs o eroare ...", "email-confirm-error-message": "A fost o problemă cu activarea adresei tale de email. Poate codul de activare a fost invalid sau expirat.", "email-confirm-sent": "Un email de confirmare a fost trimis." } \ No newline at end of file diff --git a/public/language/ro/pages.json b/public/language/ro/pages.json index c3b65dfd23..141c5fb1df 100644 --- a/public/language/ro/pages.json +++ b/public/language/ro/pages.json @@ -11,6 +11,7 @@ "user.followers": "Utilizatori care îl urmăresc pe %1", "user.posts": "Mesaje postate de %1", "user.topics": "Subiecte create de %1", + "user.groups": "%1's Groups", "user.favourites": "Mesajele favorite ale lui %1", "user.settings": "Setări Utilizator", "maintenance.text": "%1 este momentan în mentenanță. Întoarce-te în curând!", diff --git a/public/language/ro/recent.json b/public/language/ro/recent.json index 7c50bdd546..5b657f39b1 100644 --- a/public/language/ro/recent.json +++ b/public/language/ro/recent.json @@ -5,5 +5,15 @@ "month": "Lună", "year": "An", "alltime": "Tot Timpul", - "no_recent_topics": "Nu există subiecte recente." + "no_recent_topics": "Nu există subiecte recente.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/ro/reset_password.json b/public/language/ro/reset_password.json index b4ae4564f8..d9edc5c856 100644 --- a/public/language/ro/reset_password.json +++ b/public/language/ro/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Te rugăm sa introduci adresa ta de email și îți vom trimite un email cu instrucțiuni pentru a îți reseta contul tău de utilizator.", "enter_email_address": "Introdu adresă de email", "password_reset_sent": "Emailul pentru resetarea parolei a fost trimis", - "invalid_email": "Adresă de email invalidă / Adresa de email nu există!" + "invalid_email": "Adresă de email invalidă / Adresa de email nu există!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/ro/search.json b/public/language/ro/search.json index ad586a1662..54328cf585 100644 --- a/public/language/ro/search.json +++ b/public/language/ro/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 rezultat(e) pentru \"%2\", (%3 secunde)", - "no-matches": "Nu a fost găsit nici un mesaj!" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/ro/tags.json b/public/language/ro/tags.json index d5e5b040a2..483efa66f6 100644 --- a/public/language/ro/tags.json +++ b/public/language/ro/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Nu există nici un subiect cu acest tag.", "tags": "Taguri", - "enter_tags_here": "Introdu tagurile aici. Apasă enter după fiecare tag.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Introdu taguri...", "no_tags": "În acest moment nu există nici un tag." } \ No newline at end of file diff --git a/public/language/ro/topic.json b/public/language/ro/topic.json index 65e1b8e2cb..590dfed6d5 100644 --- a/public/language/ro/topic.json +++ b/public/language/ro/topic.json @@ -12,6 +12,7 @@ "notify_me": "Notică-mă de noi răspunsuri în acest subiect", "quote": "Citează", "reply": "Răspunde", + "guest-login-reply": "Log in to reply", "edit": "Editează", "delete": "Șterge", "purge": "Curăță", @@ -74,6 +75,7 @@ "fork_no_pids": "Nu a fost selectat nici un mesaj!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Introdu numele subiectului aici ...", + "composer.handle_placeholder": "Name", "composer.discard": "Renunță", "composer.submit": "Trimite", "composer.replying_to": "Îi raspunde lui %1", @@ -92,5 +94,6 @@ "sort_by": "Sortează de la", "oldest_to_newest": "Vechi la Noi", "newest_to_oldest": "Noi la Vechi", - "most_votes": "Cele mai votate" + "most_votes": "Cele mai votate", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/ro/user.json b/public/language/ro/user.json index 46c7873a7c..3fa30f4836 100644 --- a/public/language/ro/user.json +++ b/public/language/ro/user.json @@ -2,6 +2,8 @@ "banned": "Banat", "offline": "Deconectat", "username": "Nume utilizator", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Adresă Email", "confirm_email": "Confirmă Email", "delete_account": "Șterge Cont", @@ -16,6 +18,7 @@ "profile_views": "Vizualizări", "reputation": "Reputație", "favourites": "Favorite", + "watched": "Watched", "followers": "Urmărit de", "following": "Îi urmărește pe", "signature": "Semnătură", @@ -56,10 +59,12 @@ "digest_weekly": "Săptămânal", "digest_monthly": "Lunar", "send_chat_notifications": "Trimite-mi un email dacă primesc un mesaj în chat si eu nu sunt online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Pe acest utilizator nu îl urmărește nimeni :(", "follows_no_one": "Acest utilizator nu urmărește pe nimeni :(", "has_no_posts": "Acest utilizator nu a postat nici un mesaj până acuma.", "has_no_topics": "Acest utilizator nu a postat nici un subiect.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Adresă de email ascunsă", "hidden": "ascuns", "paginate_description": "Paginează subiectele și mesajele în loc să folosești scrollul interminabil.", diff --git a/public/language/ro/users.json b/public/language/ro/users.json index add3cf8873..4ef70026a8 100644 --- a/public/language/ro/users.json +++ b/public/language/ro/users.json @@ -5,5 +5,8 @@ "search": "Căutare", "enter_username": "Introdu un nume de utilizator pentru a căuta", "load_more": "Încarcă mai multe", - "users-found-search-took": "%1 utilizator(i) găsit! Căutarea a durat %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/ru/category.json b/public/language/ru/category.json index f80eccd5ba..4d70a82236 100644 --- a/public/language/ru/category.json +++ b/public/language/ru/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Создать тему", + "guest-login-post": "Войдите чтобы создавать сообщения", "no_topics": "В этой категории еще нет тем.
Почему бы вам не создать первую?", "browsing": "просматривают", "no_replies": "Нет ответов", diff --git a/public/language/ru/email.json b/public/language/ru/email.json index 055a9ffe37..4353d9101e 100644 --- a/public/language/ru/email.json +++ b/public/language/ru/email.json @@ -9,6 +9,9 @@ "reset.text1": "Мы получили запрос на сброс Вашего пароля. Если Вы не подавали запрос, пожалуйста, проигнорируйте это сообщение.", "reset.text2": "Для продолжения процедуры изменения пароля, пожалуйста, перейдите по ссылке:", "reset.cta": "Кликните здесь для изменения пароля", + "reset.notify.subject": "Пароль был успешно изменен", + "reset.notify.text1": "Мы уведомляем вас о том, что %1 ваш пароль был успешно изменен. ", + "reset.notify.text2": "Если вы не совершали этого действия, пожалуйста, незамедлительно свяжитесь с администратором.", "digest.notifications": "У Вас непрочитанные уведомления от %1:", "digest.latest_topics": "Последние темы %1", "digest.cta": "Кликните здесь для просмотра %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "Новое сообщение от %1", "notif.chat.cta": "Нажмите для продолжения диалога", "notif.chat.unsub.info": "Вы получили это уведомление в соответствии с настройками подписок.", + "notif.post.cta": "Кликните для просмотра всей темы.", + "notif.post.unsub.info": "Вы получили это уведомление согласно вашим настройкам подписки.", "test.text1": "Это тестовое сообщение для проверки почтового сервиса NodeBB.", "unsub.cta": "Изменить настройки", "closing": "Спасибо!" diff --git a/public/language/ru/error.json b/public/language/ru/error.json index cf83cf9c38..bca2535d19 100644 --- a/public/language/ru/error.json +++ b/public/language/ru/error.json @@ -1,23 +1,26 @@ { - "invalid-data": "Неверные Данные", + "invalid-data": "Неверные данные", "not-logged-in": "Вы не вошли в свой аккаунт.", "account-locked": "Ваш аккаунт временно заблокирован", "search-requires-login": "Поиск доступен зарегистрированным пользователям! Пожалуйста, войдите или зарегистрируйтесь!", - "invalid-cid": "Неверный ID Категории", - "invalid-tid": "Неверный ID Темы", - "invalid-pid": "Неверный ID Поста", - "invalid-uid": "Неверный ID Пользователя", - "invalid-username": "Неверное Имя пользователя", + "invalid-cid": "Неверный ID категории", + "invalid-tid": "Неверный ID темы", + "invalid-pid": "Неверный ID поста", + "invalid-uid": "Неверный ID пользователя", + "invalid-username": "Неверное имя пользователя", "invalid-email": "Неверный Email", - "invalid-title": "Неверный заголовок!", - "invalid-user-data": "Неверные Пользовательские Данные", - "invalid-password": "Неверный Пароль", + "invalid-title": "Неверный заголовок", + "invalid-user-data": "Неверные пользовательские данные", + "invalid-password": "Неверный пароль", "invalid-username-or-password": "Пожалуйста, укажите и имя пользователя и пароль", "invalid-search-term": "Неверный поисковой запрос", "invalid-pagination-value": "Неверное значение пагинации", "username-taken": "Имя пользователя занято", "email-taken": "Email занят", "email-not-confirmed": "Ваш email не подтвержден, нажмите для подтверждения.", + "email-not-confirmed-chat": "Вы не можете оставлять сообщения, пока Ваш email не подтверждён", + "no-email-to-confirm": "Этот форум требует подтверждения по E-mail. Нажмите здесь для ввода E-mail.", + "email-confirm-failed": "Мы не можем подтвердить Ваш E-mail, попробуйте позже.", "username-too-short": "Слишком короткое имя пользователя", "username-too-long": "Имя пользователя слишком длинное", "user-banned": "Пользователь заблокирован", @@ -32,21 +35,29 @@ "no-emailers-configured": "Не подключен ни один плагин для отправки почты, поэтому тестовый email не может быть отправлен", "category-disabled": "Категория отключена", "topic-locked": "Тема закрыта", + "post-edit-duration-expired": "Вы можете редактировать сообщение в течении %1 секунд(ы) после написания.", "still-uploading": "Пожалуйста, подождите завершения загрузки.", "content-too-short": "Пост должен содержать минимум %1 симв.", + "content-too-long": "Размер поста не должен превышать %1 символов. Пожалуйста, сделайте его короче.", "title-too-short": "Заголовок должен содержать минимум %1 симв.", "title-too-long": "Заголовок не может быть длиннее %1 символов.", "too-many-posts": "Вы можете делать пост один раз в %1 сек.", "too-many-posts-newbie": "Вы новый пользователь, поэтому можете делать пост раз в %1 сек., пока не заработаете %2 п. репутации.", + "tag-too-short": "Введите более длинный тэг. Тэги должны содержать как минимум %1 символа(ов).", + "tag-too-long": "Введите тэг покороче. Тэги должны быть короче %1 символов.", "file-too-big": "Максимальный разрешенный размер файла - %1 Кбайт. Пожалуйста, загрузите файл меньшего размера.", "cant-vote-self-post": "Вы не можете проголосовать за Ваш пост", "already-favourited": "Вы уже добавили этот пост в избранное", "already-unfavourited": "Вы уже удалили этот пост из избранного", "cant-ban-other-admins": "Вы не можете забанить других администраторов!", - "invalid-image-type": "Неверный формат изображения", + "invalid-image-type": "Неверный формат изображения. Поддерживаемые форматы: %1", + "invalid-image-extension": "Недопустимое расширение файла", + "invalid-file-type": "Неверный формат фаила. Поддерживаемые форматы : %1", "group-name-too-short": "Название группы слишком короткое", "group-already-exists": "Группа уже существует", "group-name-change-not-allowed": "Изменение названия группы запрещено", + "group-already-member": "Вы уже состоите в этой группе", + "group-needs-owner": "У группы должен быть как минимум один владелец", "post-already-deleted": "Этот пост уже удалён", "post-already-restored": "Этот пост уже восстановлен.", "topic-already-deleted": "Тема уже удалена", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Иконки для темы запрещены", "invalid-file": "Файл испорчен", "uploads-are-disabled": "Загрузка запрещена", - "upload-error": "Ошибка загрузки : %1", "signature-too-long": "Ваша подпись не может быть длиннее %1 симв.", "cant-chat-with-yourself": "Вы не можете общаться с самим собой", "chat-restricted": "Пользователь ограничил прием сообщений. Он должен подписаться на Вас, чтобы Вы могли вести переписку с ним.", + "too-many-messages": "Вы отправили слишком много сообщений, подождите немного.", "reputation-system-disabled": "Система репутации отключена.", "downvoting-disabled": "Понижение оценки отключено", "not-enough-reputation-to-downvote": "У Вас недостаточно репутации для понижения оценки поста", "not-enough-reputation-to-flag": "У Вас недостаточно репутации, чтобы пометить этот пост.", "reload-failed": "NodeBB обнаружил проблему при перезагрузке: \"%1\". NodeBB продолжит работать с существующими ресурсами клиента, но Вы должны отменить то, что сделали перед перезагрузкой.", - "registration-error": "Ошибка при регистрации" + "registration-error": "Ошибка при регистрации", + "parse-error": "Похоже, что-то пошло не так в процессе обработки ответа сервера.", + "wrong-login-type-email": "Пожалуйста, используйте свой E-mail для входа.", + "wrong-login-type-username": "Пожалуйста, используйте своё имя пользователя для входа." } \ No newline at end of file diff --git a/public/language/ru/global.json b/public/language/ru/global.json index df74718dae..700ed17127 100644 --- a/public/language/ru/global.json +++ b/public/language/ru/global.json @@ -3,9 +3,10 @@ "search": "Поиск", "buttons.close": "Закрыть", "403.title": "Доступ запрещен", - "403.message": "Похоже, вы наткнулись на страницу, к которой у вас нет доступа. Возможно, вам стоит попробовать войти?", + "403.message": "Вы пытаетесь перейти на страницу, к которой у вас нет прав доступа.", + "403.login": "Возможно Вам следует войти под своим аккаунтом?", "404.title": "Страница не найдена", - "404.message": "Похоже, вы наткнулись на несуществующую страницу. Вернитесь на главную.", + "404.message": "Вы пытаетесь перейти на страницу, которой не существует. Вам стоит вернутся на главную страницу.", "500.title": "Внутренняя ошибка.", "500.message": "Упс! Похоже, что-то пошло не так!", "register": "Зарегистрироваться", @@ -26,6 +27,7 @@ "header.tags": "Тэги", "header.popular": "Популярные", "header.users": "Пользователи", + "header.groups": "Группы", "header.chats": "Чаты", "header.notifications": "Уведомления", "header.search": "Поиск", @@ -73,5 +75,7 @@ "updated.title": "Форум обновлен", "updated.message": "Форум был обновлен до последней версии. Нажмите здесь, чтобы обновить страницу.", "privacy": "Безопасность", + "follow": "Подписаться", + "unfollow": "Отписаться", "delete_all": "Удалить все" } \ No newline at end of file diff --git a/public/language/ru/groups.json b/public/language/ru/groups.json index c60c0574a8..8ef4e59089 100644 --- a/public/language/ru/groups.json +++ b/public/language/ru/groups.json @@ -1,8 +1,34 @@ { "groups": "Группы", "view_group": "Просмотр группы", + "owner": "Администратор группы", + "new_group": "Создать группу", + "no_groups_found": "Нет групп для отображения", + "pending.accept": "Принять", + "pending.reject": "Отклонить", + "cover-instructions": "Перетяните сюда изображение, переместите на нужную позицию и нажмите Сохранить", + "cover-change": "Изменить", + "cover-save": "Сохранить", + "cover-saving": "Сохраняем", "details.title": "Информация о группе", "details.members": "Список пользователей", + "details.pending": "Заявки в группу", "details.has_no_posts": "Пользователями этой группы не публиковали никаких записей", - "details.latest_posts": "Последние записи" + "details.latest_posts": "Последние записи", + "details.private": "Частный (ая)", + "details.grant": "Выдать/забрать администратора", + "details.kick": "Исключить", + "details.owner_options": "Настройки группы", + "details.group_name": "Имя группы", + "details.description": "Описание", + "details.badge_preview": "Предпросмотр Бейджа", + "details.change_icon": "Сменить иконку", + "details.change_colour": "Изменить цвет", + "details.badge_text": "Текст на Бейдже", + "details.userTitleEnabled": "Показать Бейдж", + "details.private_help": "Если включено, вступление в группы будет подтверждаться владельцем группы", + "details.hidden": "Скрыто", + "details.hidden_help": "Если включено, группа не будет показываться в списках, а пользователи должны приглашаться вручную", + "event.updated": "Настройки группы обновлены", + "event.deleted": "Группа \"%1\" удалена" } \ No newline at end of file diff --git a/public/language/ru/login.json b/public/language/ru/login.json index e3c85ddeac..b0a5793412 100644 --- a/public/language/ru/login.json +++ b/public/language/ru/login.json @@ -1,5 +1,7 @@ { - "username": "Имя пользователя / Email", + "username-email": "Имя пользователя / E-mail", + "username": "Имя пользователя", + "email": "Email", "remember_me": "Запомнить меня", "forgot_password": "Забыли пароль?", "alternative_logins": "Войти через", diff --git a/public/language/ru/notifications.json b/public/language/ru/notifications.json index 73a6dfb38b..c3d1fa2bfc 100644 --- a/public/language/ru/notifications.json +++ b/public/language/ru/notifications.json @@ -2,6 +2,7 @@ "title": "Уведомления", "no_notifs": "Для Вас нет новых уведомлений", "see_all": "Просмотреть все уведомления", + "mark_all_read": "Отметить все уведомления как прочитанные", "back_to_home": "Назад к %1", "outgoing_link": "Внешняя ссылка", "outgoing_link_message": "Вы покидаете %1.", @@ -19,9 +20,8 @@ "user_posted_topic": "%1 открыл новую тему: %2", "user_mentioned_you_in": "%1 упомянул Вас в %2", "user_started_following_you": "%1 подписался на Вас.", - "email-confirmed": "Email Подтвержден", + "email-confirmed": "Email подтвержден", "email-confirmed-message": "Спасибо за подтверждение Вашего Email-адреса. Ваш аккаунт активирован.", - "email-confirm-error": "Произошла ошибка...", "email-confirm-error-message": "Ошибка проверки Email-адреса. Возможно, код неверен, либо у него истек срок действия.", "email-confirm-sent": "Письмо с проверочным кодом отправлено" } \ No newline at end of file diff --git a/public/language/ru/pages.json b/public/language/ru/pages.json index 85348af836..9ad5cae0c2 100644 --- a/public/language/ru/pages.json +++ b/public/language/ru/pages.json @@ -11,6 +11,7 @@ "user.followers": "Читают %1", "user.posts": "Пост написан %1", "user.topics": "Темы созданы %1", + "user.groups": "Группы %1", "user.favourites": "Избранные сообщения %1", "user.settings": "Настройки", "maintenance.text": "%1 в настоящее время на обслуживании. Пожалуйста, возвращайтесь позже.", diff --git a/public/language/ru/recent.json b/public/language/ru/recent.json index 0843d90a23..bddea6644e 100644 --- a/public/language/ru/recent.json +++ b/public/language/ru/recent.json @@ -5,5 +5,15 @@ "month": "Месяц", "year": "Год", "alltime": "За всё время", - "no_recent_topics": "Нет свежих тем." + "no_recent_topics": "Нет свежих тем.", + "no_popular_topics": "Популярные темы отсутствуют.", + "there-is-a-new-topic": "Опубликована новая тема.", + "there-is-a-new-topic-and-a-new-post": "Опубликована новая тема и новое сообщение.", + "there-is-a-new-topic-and-new-posts": "Опубликована новая тема и %1 новых сообщений.", + "there-are-new-topics": "Опубликованы %1 новых тем.", + "there-are-new-topics-and-a-new-post": "Опубликованы %1 новых тем и новое сообщение.", + "there-are-new-topics-and-new-posts": "Опубликованы %1 новых тем и %2 новых сообщений.", + "there-is-a-new-post": "Опубликовано новое сообщение.", + "there-are-new-posts": "Опубликовано %1 новых сообщений.", + "click-here-to-reload": "Нажмите здесь, чтобы перезагрузить список." } \ No newline at end of file diff --git a/public/language/ru/register.json b/public/language/ru/register.json index 419a808877..eae56a5403 100644 --- a/public/language/ru/register.json +++ b/public/language/ru/register.json @@ -3,16 +3,16 @@ "help.email": "По умолчанию, ваш email будет скрыт.", "help.username_restrictions": "Уникальное Имя между %1 и %2 символов. Другие пользователи смогут упоминать вас по @Имени.", "help.minimum_password_length": "Длина вашего пароля должна быть минимум %1 символов.", - "email_address": "Email Адрес", + "email_address": "Email адрес", "email_address_placeholder": "Введите Email адрес", "username": "Имя пользователя", - "username_placeholder": "Введите Имя пользователя", + "username_placeholder": "Введите имя пользователя", "password": "Пароль", - "password_placeholder": "Введите Пароль", - "confirm_password": "Подтвердите Пароль", - "confirm_password_placeholder": "Подтвердите Пароль", + "password_placeholder": "Введите пароль", + "confirm_password": "Подтвердите пароль", + "confirm_password_placeholder": "Подтвердите пароль", "register_now_button": "Зарегистрироваться", - "alternative_registration": "Альтернативная Регистрация", + "alternative_registration": "Альтернативная регистрация", "terms_of_use": "Условия использования", "agree_to_terms_of_use": "Я согласен с условиями" } \ No newline at end of file diff --git a/public/language/ru/reset_password.json b/public/language/ru/reset_password.json index fdcb497d10..a2226d5e60 100644 --- a/public/language/ru/reset_password.json +++ b/public/language/ru/reset_password.json @@ -1,14 +1,16 @@ { - "reset_password": "Восстановить Пароль", - "update_password": "Изменить Пароль", - "password_changed.title": "Пароль Изменен", + "reset_password": "Восстановить пароль", + "update_password": "Изменить пароль", + "password_changed.title": "Пароль изменен", "password_changed.message": "

Пароль успешно восстановлен, пожалуйста войдите еще раз.", "wrong_reset_code.title": "Неверный код восстановления", "wrong_reset_code.message": "Неправильный код восстановления пароля. Попробуйте еще раз, или запросите новый код восстановления.", - "new_password": "Новый Пароль", - "repeat_password": "Подтвердите Пароль", + "new_password": "Новый пароль", + "repeat_password": "Подтвердите пароль", "enter_email": "Пожалуйста введите ваш email адрес и мы отправим Вам письмо с инструкцией восстановления пароля.", "enter_email_address": "Введите Email адрес", - "password_reset_sent": "Пароль Отправлен", - "invalid_email": "Неверный Email / Email не существует!" + "password_reset_sent": "Пароль отправлен", + "invalid_email": "Неверный Email / Email не существует!", + "password_too_short": "Введенный пароль слишком короткий, пожалуйста, введите более длинный пароль.", + "passwords_do_not_match": "Введенные пароли не совпадают." } \ No newline at end of file diff --git a/public/language/ru/search.json b/public/language/ru/search.json index c8c67c246b..8fa2f31ebd 100644 --- a/public/language/ru/search.json +++ b/public/language/ru/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 результатов по фразе \"%2\", (%3 секунды) ", - "no-matches": "Ничего не найдено" + "no-matches": "Совпадений не найдено", + "in": "В", + "by": "От", + "titles": "Названия", + "titles-posts": "Названия и сообщения", + "posted-by": "Написано ", + "in-categories": "В разделах", + "search-child-categories": "Искать во вложенных разделах", + "reply-count": "Количество ответов", + "at-least": "Минимум", + "at-most": "Максимум", + "post-time": "Время публикации", + "newer-than": "Ранее чем", + "older-than": "Позже чем", + "any-date": "Любая дата", + "yesterday": "Вчера", + "one-week": "Одна неделя", + "two-weeks": "Две недели", + "one-month": "Один месяц", + "three-months": "Три месяца", + "six-months": "Шесть месяцев", + "one-year": "Год", + "sort-by": "Сортировать по", + "last-reply-time": "Время последнего ответа", + "topic-title": "Название темы", + "number-of-replies": "Количество ответов", + "number-of-views": "Количество просмотров", + "topic-start-date": "Время создания темы", + "username": "Имя пользователя", + "category": "Категория", + "descending": "В порядке возрастания", + "ascending": "В порядке убывания", + "save-preferences": "Сохранить настройки", + "clear-preferences": "Очистить настройки", + "search-preferences-saved": "Искать сохраненные настройки", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Показать результаты как" } \ No newline at end of file diff --git a/public/language/ru/tags.json b/public/language/ru/tags.json index 0ec34e5741..8b78464be4 100644 --- a/public/language/ru/tags.json +++ b/public/language/ru/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Нет топиков с таким тегом.", "tags": "Теги", - "enter_tags_here": "Укажите теги здесь. Нажимайте Enter после каждого тега.", + "enter_tags_here": "Укажите тэги здесь. %1-%2 символов(а). Нажимайте Enter после каждого тэга.", "enter_tags_here_short": "Введите теги...", "no_tags": "Здесь еще нет тегов." } \ No newline at end of file diff --git a/public/language/ru/topic.json b/public/language/ru/topic.json index 4a4361ec62..635e31a765 100644 --- a/public/language/ru/topic.json +++ b/public/language/ru/topic.json @@ -7,11 +7,12 @@ "post_is_deleted": "Этот пост удален!", "profile": "Профиль", "posted_by": "Создано %1", - "posted_by_guest": "Опубликовано Гостем", + "posted_by_guest": "Опубликовано гостем", "chat": "Чат", "notify_me": "Сообщать мне об ответах в этой теме", "quote": "Цитировать", "reply": "Ответить", + "guest-login-reply": "Войдите чтобы оставить сообщение", "edit": "Редактировать", "delete": "Удалить", "purge": "Очистить", @@ -39,58 +40,60 @@ "share_this_post": "Поделиться этим Постом", "thread_tools.title": "Опции темы", "thread_tools.markAsUnreadForAll": "Отметить как непрочитанные", - "thread_tools.pin": "Прикрепить Тему", - "thread_tools.unpin": "Открепить Тему", - "thread_tools.lock": "Закрыть Тему", - "thread_tools.unlock": "Открыть Тему", - "thread_tools.move": "Переместить Тему", - "thread_tools.move_all": "Переместить Все", - "thread_tools.fork": "Ответвить Тему", - "thread_tools.delete": "Удалить Тему", + "thread_tools.pin": "Прикрепить тему", + "thread_tools.unpin": "Открепить тему", + "thread_tools.lock": "Закрыть тему", + "thread_tools.unlock": "Открыть тему", + "thread_tools.move": "Переместить тему", + "thread_tools.move_all": "Переместить все", + "thread_tools.fork": "Ответвить тему", + "thread_tools.delete": "Удалить тему", "thread_tools.delete_confirm": "Вы уверены, что хотите удалить тему?", - "thread_tools.restore": "Восстановить Тему", + "thread_tools.restore": "Восстановить тему", "thread_tools.restore_confirm": "Вы уверены, что хотите восстановить тему?", - "thread_tools.purge": "Очистить Тему", + "thread_tools.purge": "Очистить тему", "thread_tools.purge_confirm": "Вы уверены, что хотите очистить эту тему?", "topic_move_success": "Эта тема успешно перемещена в %1", "post_delete_confirm": "Вы уверены, что хотите удалить этот пост?", "post_restore_confirm": "Вы уверены, что хотите восстановить этот пост?", "post_purge_confirm": "Вы уверены, что хотите очистить эту запись?", - "load_categories": "Загружаем Категории", - "disabled_categories_note": "Отключенные категории затемненны", + "load_categories": "Загружаем категории", + "disabled_categories_note": "Отключенные категории затемнены", "confirm_move": "Перенести", "confirm_fork": "Ответвление", "favourite": "Избранное", "favourites": "Избранные", - "favourites.has_no_favourites": "У вас нет избранного, добавьте несколько сообщений в избранное чтобы увидеть их здесь!", + "favourites.has_no_favourites": "У вас нет избранного, добавьте несколько сообщений в избранное, чтобы увидеть их здесь", "loading_more_posts": "Загружаем еще сообщения", "move_topic": "Перенести тему", - "move_topics": "Больше Тем", + "move_topics": "Перенести темы", "move_post": "Перенести сообщение", - "post_moved": "Пост перемещен!", - "fork_topic": "Ответвить Тему", + "post_moved": "Пост перенесен", + "fork_topic": "Ответвить тему", "topic_will_be_moved_to": "Эта тема будет перенесена в категорию", "fork_topic_instruction": "Отметьте сообщения для ответвления", "fork_no_pids": "Сообщения не отмечены!", "fork_success": "Готово! Нажмите для перехода в отделённую тему.", "composer.title_placeholder": "Введите название темы...", + "composer.handle_placeholder": "Название", "composer.discard": "Отменить", "composer.submit": "Подтвердить", "composer.replying_to": "Ответ %1", - "composer.new_topic": "Создать Тему", + "composer.new_topic": "Создать тему", "composer.uploading": "загрузка...", "composer.thumb_url_label": "Вставьте URL картинки с иконкой темы.", "composer.thumb_title": "Добавить иконку к этой теме", "composer.thumb_url_placeholder": "http://example.com/thumb.png", "composer.thumb_file_label": "Или загрузите файл", "composer.thumb_remove": "Очистить поля", - "composer.drag_and_drop_images": "Перетащите Изображения Сюда", + "composer.drag_and_drop_images": "Перетащите изображения сюда", "more_users_and_guests": "еще %1 пользователя(ей) и %2 гостя(ей)", "more_users": "еще %1 пользователя(ей)", "more_guests": "еще %1 гостя(ей)", "users_and_others": "%1 и %2 других", "sort_by": "Сортировать", - "oldest_to_newest": "От Старых к Новым", - "newest_to_oldest": "От Новых к Старым", - "most_votes": "По голосам" + "oldest_to_newest": "От старых к новым", + "newest_to_oldest": "От новых к старым", + "most_votes": "По голосам", + "most_posts": "По количеству ответов" } \ No newline at end of file diff --git a/public/language/ru/unread.json b/public/language/ru/unread.json index 325a793d59..0bdf6c4933 100644 --- a/public/language/ru/unread.json +++ b/public/language/ru/unread.json @@ -2,7 +2,7 @@ "title": "Непрочитанные темы", "no_unread_topics": "Нет непрочитанных тем.", "load_more": "Загрузить еще", - "mark_as_read": "Пометить Прочитанным", + "mark_as_read": "Пометить прочитанным", "selected": "Выбраны", "all": "Все", "topics_marked_as_read.success": "Темы помечены как прочитанные!" diff --git a/public/language/ru/user.json b/public/language/ru/user.json index 5568f00464..99be44abd6 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -2,9 +2,11 @@ "banned": "Заблокирован", "offline": "Не в сети", "username": "Имя пользователя", + "joindate": "Дата регистрации", + "postcount": "Сообщений", "email": "Email", "confirm_email": "Подтвердить Email", - "delete_account": "Удалить Аккаунт", + "delete_account": "Удалить аккаунт", "delete_account_confirm": "Вы уверены, что хотите удалить аккаунт?
Это действие необратимо, Вы не сможете восстановить свои данные

Введите имя пользователя для подтверждения уничтожения аккаунта.", "fullname": "Полное имя", "website": "Сайт", @@ -16,6 +18,7 @@ "profile_views": "Просмотров профиля", "reputation": "Репутация", "favourites": "Избранное", + "watched": "Просмотров", "followers": "Читателей", "following": "Читаемых", "signature": "Подпись", @@ -27,18 +30,18 @@ "profile_update_success": "Профиль обновлен!", "change_picture": "Изменить фотографию", "edit": "Редактировать", - "uploaded_picture": "Загруженные Фотографии", + "uploaded_picture": "Загруженные фотографии", "upload_new_picture": "Загрузить новую фотографию", "upload_new_picture_from_url": "Загрузить новое изображение с адреса URL", - "current_password": "Текущий Пароль", - "change_password": "Изменить Пароль", - "change_password_error": "Неверный Пароль!", + "current_password": "Текущий пароль", + "change_password": "Изменить пароль", + "change_password_error": "Неверный пароль!", "change_password_error_wrong_current": "Текущий пароль неверен!", "change_password_error_length": "Пароль слишком короткий!", "change_password_error_match": "Пароли должны совпадать!", "change_password_error_privileges": "Вы не можете сменить этот пароль.", "change_password_success": "Ваш пароль изменен!", - "confirm_password": "Подтвердите Пароль", + "confirm_password": "Подтвердите пароль", "password": "Пароль", "username_taken_workaround": "Логин, который Вы запросили, уже занят. Мы его немного изменили. Теперь Ваш логин %1", "upload_picture": "Загрузить фотографию", @@ -49,18 +52,20 @@ "show_email": "Показывать мой Email", "show_fullname": "Показывать Полное Имя", "restrict_chats": "Разрешить чат только с теми, на кого я подписан", - "digest_label": "Подписаться на Дайджест", + "digest_label": "Подписаться на дайджест", "digest_description": "Подписаться на Email обновления этого форума (новые уведомления и топики) согласно расписанию", "digest_off": "Выключить", - "digest_daily": "За День", - "digest_weekly": "За Неделю", - "digest_monthly": "За Месяц", + "digest_daily": "За день", + "digest_weekly": "За неделю", + "digest_monthly": "За месяц", "send_chat_notifications": "Уведомлять на E-mail при поступлении нового сообщения чата, когда я оффлайн", + "send_post_notifications": "Отправлять email, когда отвечают в темы, на которые я подписан(а)", "has_no_follower": "Этого пользователя никто не читает :(", "follows_no_one": "Этот пользователь никого не читает :(", - "has_no_posts": "Это пользователь еще ничего не написал.", + "has_no_posts": "Этот пользователь еще ничего не написал.", "has_no_topics": "Этот пользователь еще не создал ни одной темы", - "email_hidden": "Email Скрыт", + "has_no_watched_topics": "Этот пользователь еще не просмотрел ни одной темы", + "email_hidden": "Email скрыт", "hidden": "скрыто", "paginate_description": "Использовать пагинацию тем и постов вместо бесконечной прокрутки", "topics_per_page": "Тем на Странице", @@ -68,7 +73,7 @@ "notification_sounds": "Звук при получении уведомления", "browsing": "Настройки просмотра", "open_links_in_new_tab": "Открывать ссылки, ведущие на другие сайты, в новой вкладке?", - "enable_topic_searching": "Включить Поиск по всей теме", + "enable_topic_searching": "Активировать поиск внутри тем", "topic_search_help": "Если включено, то стандартный \"Поиск на странице\" Вашего браузера будет осуществлять поиск по всей теме вместо одной её страницы.", "follow_topics_you_reply_to": "Следить за темами, в которых Вы отвечали.", "follow_topics_you_create": "Следить за темами, которые Вы создали." diff --git a/public/language/ru/users.json b/public/language/ru/users.json index dd06ac4e97..ffc028bcf3 100644 --- a/public/language/ru/users.json +++ b/public/language/ru/users.json @@ -5,5 +5,8 @@ "search": "Поиск", "enter_username": "Введите имя пользователя для поиска", "load_more": "Загрузить еще", - "users-found-search-took": "Нашел %1 пользователя(ей)! Поиск занял %2 мс." + "users-found-search-took": "Найдено %1 пользователя(ей). Поиск занял %2 секунд. ", + "filter-by": "Сортировать по", + "online-only": "Только онлайн", + "picture-only": "Только с аватаром" } \ No newline at end of file diff --git a/public/language/sc/category.json b/public/language/sc/category.json index 35e7f7b522..306f0e2d04 100644 --- a/public/language/sc/category.json +++ b/public/language/sc/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Arresonada Noa", + "guest-login-post": "Log in to post", "no_topics": "Non bi sunt arresonadas in custa creze.
Pro ite non nde pones una?", "browsing": "navighende", "no_replies": "Perunu at rispostu", diff --git a/public/language/sc/email.json b/public/language/sc/email.json index fdbfb006c6..f290435e75 100644 --- a/public/language/sc/email.json +++ b/public/language/sc/email.json @@ -9,6 +9,9 @@ "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", "reset.cta": "Click here to reset your password", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", "digest.cta": "Click here to visit %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "New chat message received from %1", "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", "unsub.cta": "Click here to alter those settings", "closing": "Thanks!" diff --git a/public/language/sc/error.json b/public/language/sc/error.json index 27de09631f..e0700f76c4 100644 --- a/public/language/sc/error.json +++ b/public/language/sc/error.json @@ -18,6 +18,9 @@ "username-taken": "Username taken", "email-taken": "Email taken", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", "username-too-long": "Username too long", "user-banned": "User banned", @@ -32,21 +35,29 @@ "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "Category disabled", "topic-locked": "Topic Locked", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Please wait for uploads to complete.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 characters.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "You cannot vote for your own post", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "You can't ban other admins!", - "invalid-image-type": "Invalid image type", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Group name too short", "group-already-exists": "Group already exists", "group-name-change-not-allowed": "Group name change not allowed", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Topic thumbnails are disabled.", "invalid-file": "Invalid File", "uploads-are-disabled": "Uploads are disabled", - "upload-error": "Upload Error : %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "You can't chat with yourself!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/sc/global.json b/public/language/sc/global.json index 784d271e34..6fa43c2623 100644 --- a/public/language/sc/global.json +++ b/public/language/sc/global.json @@ -3,9 +3,10 @@ "search": "Chirca", "buttons.close": "Serra", "403.title": "Intrada Blocada", - "403.message": "Paret chi ses incapitadu in una pàgina in ue tue non podes intrare. Forsis dias a dèpere provare a intrare?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "No Agatadu", - "404.message": "Paret chi ses imbruchinadu in una pàgina chi non s'agatat. Torra a sa domo.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Faddina interna.", "500.message": "Oops! Paret chi carchi cosa est andada male!", "register": "Registra·ti", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "Populare", "header.users": "Impitadores", + "header.groups": "Groups", "header.chats": "Tzarras", "header.notifications": "Notìficas", "header.search": "Chirca", @@ -73,5 +75,7 @@ "updated.title": "Forum Updated", "updated.message": "This forum has just been updated to the latest version. Click here to refresh the page.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/sc/groups.json b/public/language/sc/groups.json index bf69c732b0..d2314fdc29 100644 --- a/public/language/sc/groups.json +++ b/public/language/sc/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "View Group", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Group Details", "details.members": "Member List", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Latest Posts", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/sc/login.json b/public/language/sc/login.json index 13c8f5cae9..83a84e0ad1 100644 --- a/public/language/sc/login.json +++ b/public/language/sc/login.json @@ -1,5 +1,7 @@ { - "username": "Username / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Regorda·mi?", "forgot_password": "Password Iscarèssida?", "alternative_logins": "Intradas Alternativas", diff --git a/public/language/sc/notifications.json b/public/language/sc/notifications.json index 70ce1dd022..a3a210afe8 100644 --- a/public/language/sc/notifications.json +++ b/public/language/sc/notifications.json @@ -2,6 +2,7 @@ "title": "Notìficas", "no_notifs": "Non tenes notìficas noas", "see_all": "Càstia totus is Notìficas", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "Acàpiu a Foras", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Email Confirmed", "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", "email-confirm-sent": "Confirmation email sent." } \ No newline at end of file diff --git a/public/language/sc/pages.json b/public/language/sc/pages.json index 4ccd57cfd2..0f846179c3 100644 --- a/public/language/sc/pages.json +++ b/public/language/sc/pages.json @@ -11,6 +11,7 @@ "user.followers": "Gente chi Sighit %1", "user.posts": "Arresonos fatos dae %1", "user.topics": "Topics created by %1", + "user.groups": "%1's Groups", "user.favourites": "Arresonos Preferidos de %1", "user.settings": "Sèberos de Impitadore", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/sc/recent.json b/public/language/sc/recent.json index 2e2d9401c7..ea0c3c0752 100644 --- a/public/language/sc/recent.json +++ b/public/language/sc/recent.json @@ -5,5 +5,15 @@ "month": "Mese", "year": "Year", "alltime": "All Time", - "no_recent_topics": "Non bi sunt ùrtimas arresonadas." + "no_recent_topics": "Non bi sunt ùrtimas arresonadas.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/sc/reset_password.json b/public/language/sc/reset_password.json index 877f9c716e..d86b716c31 100644 --- a/public/language/sc/reset_password.json +++ b/public/language/sc/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Pro praghere pone s'indiritzu email tuo e t'amus a imbiare un'email cun is istrutziones pro torrare a assentare s'intrada tua.", "enter_email_address": "Pone s'Indiritzu Email", "password_reset_sent": "Còdighe pro Torrare a Assentare sa Password Imbiadu", - "invalid_email": "Email Non Bàlida / Email chi no esistit!" + "invalid_email": "Email Non Bàlida / Email chi no esistit!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/sc/search.json b/public/language/sc/search.json index e9eef4632a..9dad8b6eab 100644 --- a/public/language/sc/search.json +++ b/public/language/sc/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/sc/tags.json b/public/language/sc/tags.json index d2e9a213ac..aa9f14c70c 100644 --- a/public/language/sc/tags.json +++ b/public/language/sc/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. Press enter after each tag.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/sc/topic.json b/public/language/sc/topic.json index 719c1e43d5..c0ce4121ff 100644 --- a/public/language/sc/topic.json +++ b/public/language/sc/topic.json @@ -12,6 +12,7 @@ "notify_me": "Imbia·mi notìficas pro is rispostas noas a custa arresonada", "quote": "Mèntova", "reply": "Risponde", + "guest-login-reply": "Log in to reply", "edit": "Acontza", "delete": "Contzella", "purge": "Purge", @@ -74,6 +75,7 @@ "fork_no_pids": "Perunu arresonu seberadu!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Pone su tìtulu de s'arresonada inoghe...", + "composer.handle_placeholder": "Name", "composer.discard": "Lassa a Pèrdere", "composer.submit": "Imbia", "composer.replying_to": "Replying to %1", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/sc/user.json b/public/language/sc/user.json index 0ba6da8ed1..b083df5e52 100644 --- a/public/language/sc/user.json +++ b/public/language/sc/user.json @@ -2,6 +2,8 @@ "banned": "Blocadu", "offline": "Non in lìnia", "username": "Nùmene de Impitadore", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Email", "confirm_email": "Confirm Email", "delete_account": "Delete Account", @@ -16,6 +18,7 @@ "profile_views": "Bìsitas a su perfilu", "reputation": "Nodidos", "favourites": "Preferidos", + "watched": "Watched", "followers": "Sighidores", "following": "Sighende", "signature": "Firma", @@ -56,10 +59,12 @@ "digest_weekly": "Weekly", "digest_monthly": "Monthly", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Custu impitadore non tenet perunu sighidore :(", "follows_no_one": "Custu impitadore no est sighende nissunu :(", "has_no_posts": "Custu impitadore no at ancora publicadu nudda.", "has_no_topics": "This user didn't post any topics yet.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Email Cuada", "hidden": "cuadu", "paginate_description": "Partzi is arresonadas e arresonos in pàginas a su postu de impreare su iscorrimentu infinidu.", diff --git a/public/language/sc/users.json b/public/language/sc/users.json index bae4caa237..19e6cfe95f 100644 --- a/public/language/sc/users.json +++ b/public/language/sc/users.json @@ -5,5 +5,8 @@ "search": "Chirca", "enter_username": "Pone unu nùmene de impitadore de chircare", "load_more": "Càrriga de prus", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/sk/category.json b/public/language/sk/category.json index 9ce9439a2e..62ef9414d6 100644 --- a/public/language/sk/category.json +++ b/public/language/sk/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "Nová téma", + "guest-login-post": "Log in to post", "no_topics": "V tejto kategórií zatiaľ nie sú žiadne príspevky.
Môžeš byť prvý!", "browsing": "prehliada", "no_replies": "Nikdo ešte neodpovedal", diff --git a/public/language/sk/email.json b/public/language/sk/email.json index fdbfb006c6..f290435e75 100644 --- a/public/language/sk/email.json +++ b/public/language/sk/email.json @@ -9,6 +9,9 @@ "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "To continue with the password reset, please click on the following link:", "reset.cta": "Click here to reset your password", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "You have unread notifications from %1:", "digest.latest_topics": "Latest topics from %1", "digest.cta": "Click here to visit %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "New chat message received from %1", "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", "unsub.cta": "Click here to alter those settings", "closing": "Thanks!" diff --git a/public/language/sk/error.json b/public/language/sk/error.json index 40c04517ed..069d7b8deb 100644 --- a/public/language/sk/error.json +++ b/public/language/sk/error.json @@ -18,6 +18,9 @@ "username-taken": "Užívateľske meno je obsadené", "email-taken": "Email je obsadený", "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Username too short", "username-too-long": "Username too long", "user-banned": "Užívateľ je zakázaný", @@ -32,21 +35,29 @@ "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", "category-disabled": "Kategória je znefunkčená.", "topic-locked": "Uzamknutá téma", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Prosím čakajte na dokončenie nahrávania", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Prosím uvedťe kratší názov. Názov nesmie byť dlhší ako 1 % znakov", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "Nedá sa hlasovať za vlastný príspevok", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "Nemožte zakázať druhých adminov.", - "invalid-image-type": "Neplatný typ obrázku ", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Názov skupiny je príliš krátky", "group-already-exists": "Skupina už existuje", "group-name-change-not-allowed": "Nepovolená zmena mena skupiny", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Nahľady tém sú znefunkčnené.", "invalid-file": "Neplatný súbor", "uploads-are-disabled": "Nahrávanie je znefunkčnené", - "upload-error": "Upload chyba: %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "Nemôžete chatovat so samým sebou.", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/sk/global.json b/public/language/sk/global.json index 7f42bd6694..d8d8a87509 100644 --- a/public/language/sk/global.json +++ b/public/language/sk/global.json @@ -3,9 +3,10 @@ "search": "Hľadať", "buttons.close": "Zavrieť", "403.title": "Prístup zamietnutý", - "403.message": "K tejto stránke nemáte prístup. Zkuste sa prihlásiť?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Stránka nenájdená", - "404.message": "Táto stránka bohužiaľ neexistuje. Vráťte sa na domovskú stránku.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Neznámá chyba", "500.message": "Jejda, vyzerá, že sa niečo pokazilo.", "register": "Registrovať", @@ -26,6 +27,7 @@ "header.tags": "tagy", "header.popular": "Populárne", "header.users": "Užívatelia", + "header.groups": "Groups", "header.chats": "Chaty", "header.notifications": "Notifikácie", "header.search": "Hľadať", @@ -73,5 +75,7 @@ "updated.title": "fórum bolo aktualizované", "updated.message": "Toto fórum bolo práve aktualizované k najnovšej verzii. Tu kliknite na aktualizáciu tejto stránky.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/sk/groups.json b/public/language/sk/groups.json index bf69c732b0..d2314fdc29 100644 --- a/public/language/sk/groups.json +++ b/public/language/sk/groups.json @@ -1,8 +1,34 @@ { "groups": "Groups", "view_group": "View Group", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Group Details", "details.members": "Member List", + "details.pending": "Pending Members", "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "details.latest_posts": "Latest Posts", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/sk/login.json b/public/language/sk/login.json index a7c029ab74..bc2f675ff2 100644 --- a/public/language/sk/login.json +++ b/public/language/sk/login.json @@ -1,5 +1,7 @@ { - "username": "Prihlasovacie meno / email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Zapamätať si ma?", "forgot_password": "Zabudol si heslo?", "alternative_logins": "Ďalšie spôsoby prihlásenia", diff --git a/public/language/sk/notifications.json b/public/language/sk/notifications.json index be2f47b646..31f981cbee 100644 --- a/public/language/sk/notifications.json +++ b/public/language/sk/notifications.json @@ -2,6 +2,7 @@ "title": "Notifikácie", "no_notifs": "Nemáte žiadne nové notifikácie", "see_all": "Pozri všetky notifikácie", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "Odkaz mimo fórum", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Email bol potvrdený", "email-confirmed-message": "Ďakujeme za potvrdenie tvojho emailu. Účet je plne aktivovaný.", - "email-confirm-error": "Vyskytla sa chyba...", "email-confirm-error-message": "Vyskytla sa chyba pri overení tvojej emailovej adresy. ", "email-confirm-sent": "Práve sme poslali potvrdzujúci email." } \ No newline at end of file diff --git a/public/language/sk/pages.json b/public/language/sk/pages.json index bcc524ed0d..c54ac7e71f 100644 --- a/public/language/sk/pages.json +++ b/public/language/sk/pages.json @@ -11,6 +11,7 @@ "user.followers": "Užívatelia následujúci %1", "user.posts": "Príspevky od %1", "user.topics": "Téma vytvorená %1\n", + "user.groups": "%1's Groups", "user.favourites": "%1's obľubených príspevkov", "user.settings": "Užívatelské nadstavenie", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", diff --git a/public/language/sk/recent.json b/public/language/sk/recent.json index 963740ba54..123d7f43ed 100644 --- a/public/language/sk/recent.json +++ b/public/language/sk/recent.json @@ -5,5 +5,15 @@ "month": "Mesiac", "year": "Year", "alltime": "All Time", - "no_recent_topics": "Nie sú žiadne posledné témy" + "no_recent_topics": "Nie sú žiadne posledné témy", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/sk/reset_password.json b/public/language/sk/reset_password.json index bceaea8148..2391c09cae 100644 --- a/public/language/sk/reset_password.json +++ b/public/language/sk/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Zadajte svoju emailovú adresu a my Vám pošleme informácie, ako môžete obnoviť svoje heslo.", "enter_email_address": "Zadajte e-mail", "password_reset_sent": "Obnova hesla odoslaná", - "invalid_email": "Zlý email / Email neexistuje!" + "invalid_email": "Zlý email / Email neexistuje!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/sk/search.json b/public/language/sk/search.json index e9eef4632a..9dad8b6eab 100644 --- a/public/language/sk/search.json +++ b/public/language/sk/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/sk/tags.json b/public/language/sk/tags.json index d2e9a213ac..aa9f14c70c 100644 --- a/public/language/sk/tags.json +++ b/public/language/sk/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "There are no topics with this tag.", "tags": "Tags", - "enter_tags_here": "Enter tags here. Press enter after each tag.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet." } \ No newline at end of file diff --git a/public/language/sk/topic.json b/public/language/sk/topic.json index a645271b1c..007cf0f22a 100644 --- a/public/language/sk/topic.json +++ b/public/language/sk/topic.json @@ -12,6 +12,7 @@ "notify_me": "Sledovať túto tému", "quote": "Citovať", "reply": "Odpovedať", + "guest-login-reply": "Log in to reply", "edit": "Upraviť", "delete": "Zmazať", "purge": "Purge", @@ -74,6 +75,7 @@ "fork_no_pids": "Žiadne príspevky neboli vybrané!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "Vlož nadpis témy sem...", + "composer.handle_placeholder": "Name", "composer.discard": "Zahodiť", "composer.submit": "Poslať", "composer.replying_to": "Odpovedám užívateľovi %1", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/sk/user.json b/public/language/sk/user.json index 3606c01233..48aa4ec144 100644 --- a/public/language/sk/user.json +++ b/public/language/sk/user.json @@ -2,6 +2,8 @@ "banned": "Zakázaný", "offline": "Offline", "username": "Uživateľské meno", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Email", "confirm_email": "Confirm Email", "delete_account": "Delete Account", @@ -16,6 +18,7 @@ "profile_views": "Zobrazenie profilu", "reputation": "Reputácia", "favourites": "Obľúbené", + "watched": "Watched", "followers": "Nasledujú ho", "following": "Nasleduje", "signature": "Podpis", @@ -56,10 +59,12 @@ "digest_weekly": "Týždenne", "digest_monthly": "Mesačne", "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Tohoto užívatela nikto nesleduje :(", "follows_no_one": "Tento užívateľ nikoho nesleduje :(", "has_no_posts": "Tento používateľ ešte nespravil príspevok", "has_no_topics": "Tento užívateľ ešte nepublikoval žiadnu tému.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Skrytý email", "hidden": "skrytý", "paginate_description": "Stránkuj témy a príspevky miesto používania nekonečného posúvania.", diff --git a/public/language/sk/users.json b/public/language/sk/users.json index 64e8ea6860..819f861de7 100644 --- a/public/language/sk/users.json +++ b/public/language/sk/users.json @@ -5,5 +5,8 @@ "search": "Vyhľadávať", "enter_username": "Zadaj užívateľské meno k hľadaniu", "load_more": "Načítať dalšie", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/sv/category.json b/public/language/sv/category.json index ff00a051b5..41b49a95db 100644 --- a/public/language/sv/category.json +++ b/public/language/sv/category.json @@ -1,6 +1,7 @@ { "new_topic_button": "Nytt ämne", - "no_topics": "Det finns inga ämnen i denna kategori.
Varför inte skapa ett?", + "guest-login-post": "Log in to post", + "no_topics": "Det finns inga ämnen i denna kategori.
Varför skapar inte du ett ämne?", "browsing": "läser", "no_replies": "Ingen har svarat", "share_this_category": "Dela den här kategorin", diff --git a/public/language/sv/email.json b/public/language/sv/email.json index 7fb193ba98..808c73caa8 100644 --- a/public/language/sv/email.json +++ b/public/language/sv/email.json @@ -4,20 +4,25 @@ "greeting_no_name": "Hej", "greeting_with_name": "Hej %1", "welcome.text1": "Tack för att du registerar dig på %1!", - "welcome.text2": "För att slutföra aktivering av ditt konto, behöver vi verifiera att du har tillgång till epostadressen du registererade.", + "welcome.text2": "För att slutföra aktiveringen av ditt konto, behöver vi verifiera att du har tillgång till den epostadress du registrerade dig med.", "welcome.cta": "Klicka här för att bekräfta din epostadress ", - "reset.text1": "Vi fick en förfrågan att återställa ditt lösenord, kanske för att du glömt det. Om det inte är så, så kan du ignorera det här epostmeddelandet. ", + "reset.text1": "Vi fick en förfrågan om att återställa ditt lösenord, möjligen för att du har glömt det. Om detta inte är fallet, så kan du bortse från det här epostmeddelandet. ", "reset.text2": "För att fortsätta med återställning av lösenordet så kan du klicka på följande länk:", "reset.cta": "Klicka här för att återställa ditt lösenord", - "digest.notifications": "You have unread notifications from %1:", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "digest.notifications": "Du har olästa notiser från %1:", "digest.latest_topics": "Senaste ämnen från %1", "digest.cta": "Klicka här för att besöka %1", "digest.unsub.info": "Det här meddelandet fick du på grund av dina inställningar för prenumeration. ", - "digest.no_topics": "There have been no active topics in the past %1", - "notif.chat.subject": "New chat message received from %1", - "notif.chat.cta": "Click here to continue the conversation", - "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "digest.no_topics": "Inga aktiva ämnen dom senaste %1", + "notif.chat.subject": "Nytt chatt-meddelande från %1", + "notif.chat.cta": "Klicka här för att fortsätta konversationen", + "notif.chat.unsub.info": "Denna chatt-notifikation skickades till dig på grund av dina inställningar för prenumerationer.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "\nDet här är ett textmeddelande som verifierar att eposten är korrekt installerat för din NodeBB. ", - "unsub.cta": "Click here to alter those settings", + "unsub.cta": "Klicka här för att ändra dom inställningarna", "closing": "Tack!" } \ No newline at end of file diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 8fb6b54577..8f8c577d0d 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -13,55 +13,69 @@ "invalid-user-data": "Ogiltig användardata", "invalid-password": "Ogiltigt lösenord", "invalid-username-or-password": "Specificera både användarnamn och lösenord", - "invalid-search-term": "Invalid search term", + "invalid-search-term": "Ogiltig sökterm", "invalid-pagination-value": "Ogiltigt sidnummer", "username-taken": "Användarnamn upptaget", "email-taken": "Epostadress upptagen", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed": "Din epostadress är ännu inte bekräftad. Klicka här för att bekräfta din epostadress.", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Användarnamnet är för kort", "username-too-long": "Användarnamnet är för långt", - "user-banned": "Användare bannad", - "user-too-new": "Sorry, you are required to wait %1 seconds before making your first post", - "no-category": "Category does not exist", - "no-topic": "Topic does not exist", - "no-post": "Post does not exist", - "no-group": "Group does not exist", - "no-user": "User does not exist", - "no-teaser": "Teaser does not exist", - "no-privileges": "You do not have enough privileges for this action.", + "user-banned": "Användare bannlyst", + "user-too-new": "Tyvärr, du måste vänta %1 sekunder innan du kan skapa ditt första inlägg", + "no-category": "Kategorin hittades inte", + "no-topic": "Ämnet hittades inte", + "no-post": "Inlägget hittades inte", + "no-group": "Gruppen hittades inte", + "no-user": "Användaren hittades inte", + "no-teaser": "Förhandsvisningen hittades inte", + "no-privileges": "Du har inte tillräckliga rättigheter för den här åtgärden", "no-emailers-configured": "Inga tillägg för epostadress har laddats, så något textmeddelande kunde inte skickas", "category-disabled": "Kategorin inaktiverad", "topic-locked": "Ämnet låst", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Vänta medan uppladdningen slutförs.", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", + "content-too-short": "Skriv ett längre inlägg. Inlägget måste ha minst %1 tecken.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", + "title-too-short": "Skriv en längre rubrik. Rubriken måste ha minst %1 tecken.", "title-too-long": "Skriv in en kortare rubrik. Rubriker får inte vara längre än %1 tecken.", - "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", - "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", - "cant-vote-self-post": "Du kan in rösta på ditt eget inlägg.", - "already-favourited": "You have already favourited this post", - "already-unfavourited": "You have already unfavourited this post", - "cant-ban-other-admins": "Du kan inte banna andra administratörer.", - "invalid-image-type": "Ogiltigt bildformat", + "too-many-posts": "Du kan endast skapa inlägg var %1:e sekund - vänta ett tag innan du försöker skapa ett nytt inlägg", + "too-many-posts-newbie": "Som en ny användare kan du endast skapa nya inlägg var %1:e sekund tills du har %2 förtroende - vänta ett tag innan du försöker skapa ett nytt inlägg", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", + "file-too-big": "Maximal filstorlek är %1 kbs - var god ladda upp en mindre fil", + "cant-vote-self-post": "Du kan inte rösta på ditt eget inlägg.", + "already-favourited": "Du har redan favoriserat det här inlägget", + "already-unfavourited": "Du har redan avfavoriserat det här inlägget", + "cant-ban-other-admins": "Du kan inte bannlysa andra administratörer.", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Gruppnamnet är för kort", "group-already-exists": "Gruppen existerar redan", "group-name-change-not-allowed": "Gruppnamnet får inte ändras", - "post-already-deleted": "This post has already been deleted", - "post-already-restored": "This post has already been restored", - "topic-already-deleted": "This topic has already been deleted", - "topic-already-restored": "This topic has already been restored", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", + "post-already-deleted": "Inlägget är redan raderat", + "post-already-restored": "Inlägget är redan återställt", + "topic-already-deleted": "Ämnet är redan raderat", + "topic-already-restored": "Ämnet är redan återställt", "topic-thumbnails-are-disabled": "Miniatyrbilder för ämnen är inaktiverat", "invalid-file": "Ogiltig fil", "uploads-are-disabled": "Uppladdningar är inaktiverat", - "upload-error": "Fel vid uppladdning: %1", - "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", + "signature-too-long": "Signaturer kan tyvärr inte vara längre än %1 tecken.", "cant-chat-with-yourself": "Du kan inte chatta med dig själv.", - "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "chat-restricted": "Denna användaren har begränsat sina chatt-meddelanden. Användaren måste följa dig innan ni kan chatta med varann", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Ryktessystemet är inaktiverat.", "downvoting-disabled": "Nedröstning är inaktiverat", "not-enough-reputation-to-downvote": "Du har inte tillräckligt förtroende för att rösta ner det här meddelandet", - "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", + "not-enough-reputation-to-flag": "Du har inte tillräckligt förtroende för att flagga det här inlägget.", "reload-failed": "NodeBB stötte på problem med att ladda om: \"%1\". NodeBB kommer fortsätta servera den befintliga resurser till klienten, men du borde återställa det du gjorde alldeles innan du försökte ladda om.", - "registration-error": "Registration Error" + "registration-error": "Registreringsfel", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/sv/global.json b/public/language/sv/global.json index 408cbc0f0b..ca623c2dbb 100644 --- a/public/language/sv/global.json +++ b/public/language/sv/global.json @@ -3,9 +3,10 @@ "search": "Sök", "buttons.close": "Stäng", "403.title": "Tillgång Nekad", - "403.message": "Du verkar ha hittat till en sida du inte har tillgång till. Kanske du ska testa att logga in?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Sidan saknas", - "404.message": "Du verkar ha hamnat på en sida som inte finns. Återgå till första sidan.", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Internt fel.", "500.message": "Hoppsan! Verkar som att något gått snett!", "register": "Registrera", @@ -26,6 +27,7 @@ "header.tags": "Märkningar", "header.popular": "Populära", "header.users": "Användare", + "header.groups": "Groups", "header.chats": "Chattar", "header.notifications": "Notiser", "header.search": "Sök", @@ -38,7 +40,7 @@ "alert.success": "success", "alert.error": "Fel", "alert.banned": "Bannad", - "alert.banned.message": "Du har nu blivit bannad och kommer att loggas ut. ", + "alert.banned.message": "Du har blivit bannlyst och kommer nu att loggas ut. ", "alert.unfollow": "Du följer inte längre %1!", "alert.follow": "Du följer nu %1!", "online": "Online", @@ -71,7 +73,9 @@ "guest": "Anonym", "guests": "Anonyma", "updated.title": "Forum uppdaterades", - "updated.message": "Det här forumet har nu uppdaterats till senaste versionen. Klicka här för att åter hämta sidan.", - "privacy": "Privacy", - "delete_all": "Delete All" + "updated.message": "Det här forumet har nu uppdaterats till senaste versionen. Klicka här för att ladda om sidan.", + "privacy": "Integritet", + "follow": "Follow", + "unfollow": "Unfollow", + "delete_all": "Ta bort Alla" } \ No newline at end of file diff --git a/public/language/sv/groups.json b/public/language/sv/groups.json index b333b857a4..8474322fa4 100644 --- a/public/language/sv/groups.json +++ b/public/language/sv/groups.json @@ -1,8 +1,34 @@ { - "groups": "Groups", + "groups": "Grupper", "view_group": "Visa grupp ", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Detaljer för gruppen ", "details.members": "Medlemmar", + "details.pending": "Pending Members", "details.has_no_posts": "Den här gruppens medlemmar har inte skrivit några inlägg.", - "details.latest_posts": "Senaste inlägg" + "details.latest_posts": "Senaste inlägg", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/sv/login.json b/public/language/sv/login.json index 51f4e33296..c96dd64485 100644 --- a/public/language/sv/login.json +++ b/public/language/sv/login.json @@ -1,5 +1,7 @@ { - "username": "Användarnamn eller epostadress", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Kom ihåg mig?", "forgot_password": "Glömt lösenord?", "alternative_logins": "Alternativa inloggningssätt", diff --git a/public/language/sv/modules.json b/public/language/sv/modules.json index 89a6cdc618..cb61fddae5 100644 --- a/public/language/sv/modules.json +++ b/public/language/sv/modules.json @@ -12,9 +12,9 @@ "chat.message-history": "Historik för meddelande", "chat.pop-out": "Utskjutande chatt", "chat.maximize": "Maximera", - "chat.seven_days": "7 Days", - "chat.thirty_days": "30 Days", - "chat.three_months": "3 Months", + "chat.seven_days": "7 Dagar", + "chat.thirty_days": "30 Dagar", + "chat.three_months": "3 Månader", "composer.user_said_in": "%1 sa i %2:", "composer.user_said": "%1 sa:", "composer.discard": "Är du säker på att du vill förkasta det här inlägget?" diff --git a/public/language/sv/notifications.json b/public/language/sv/notifications.json index 364f40188d..1be16f89db 100644 --- a/public/language/sv/notifications.json +++ b/public/language/sv/notifications.json @@ -2,6 +2,7 @@ "title": "Notiser", "no_notifs": "Du har inga nya notiser", "see_all": "Visa alla notiser", + "mark_all_read": "Mark all notifications read", "back_to_home": "Tillbaka till %1", "outgoing_link": "Utgående länk", "outgoing_link_message": "Du lämnar nu %1. ", @@ -11,17 +12,16 @@ "you_have_unread_notifications": "Du har olästa notiser.", "new_message_from": "Nytt medelande från %1", "upvoted_your_post_in": "%1 har röstat upp ditt inlägg i %2", - "moved_your_post": "%1 has moved your post.", - "moved_your_topic": "%1 has moved your topic.", + "moved_your_post": "%1 har flyttat ditt inlägg.", + "moved_your_topic": "%1 har flyttat ditt ämne.", "favourited_your_post_in": "%1 har favoriserat ditt inlägg i %2.", "user_flagged_post_in": "%1 flaggade ett inlägg i %2", "user_posted_to": "%1 har skrivit ett svar på: %2", - "user_posted_topic": "%1 has posted a new topic: %2", + "user_posted_topic": "%1 har skapat ett nytt ämne: %2", "user_mentioned_you_in": "%1 nämnde dig i %2", "user_started_following_you": "%1 började följa dig.", "email-confirmed": "Epost bekräftad", "email-confirmed-message": "Tack för att du bekräftat din epostadress. Ditt konto är nu fullt ut aktiverat.", - "email-confirm-error": "Ett fel uppstod...", "email-confirm-error-message": "Det uppstod ett fel med att bekräfta din epostadress. Kanske var koden ogiltig eller har gått ut.", "email-confirm-sent": "Bekräftelseepost skickat." } \ No newline at end of file diff --git a/public/language/sv/pages.json b/public/language/sv/pages.json index cf041ca1bc..f7a4904a84 100644 --- a/public/language/sv/pages.json +++ b/public/language/sv/pages.json @@ -11,8 +11,9 @@ "user.followers": "Personer som följer %1", "user.posts": "Inlägg skapat av %1", "user.topics": "Ämnen skapade av %1", + "user.groups": "%1's Groups", "user.favourites": "%1's favorit-inlägg", "user.settings": "Avnändarinställningar", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", - "maintenance.messageIntro": "Additionally, the administrator has left this message:" + "maintenance.text": "%1 genomgår underhåll just nu. Vänligen kom tillbaka lite senare.", + "maintenance.messageIntro": "Ytterligare så lämnade administratören detta meddelande:" } \ No newline at end of file diff --git a/public/language/sv/recent.json b/public/language/sv/recent.json index dc59877cf6..28a0d6f599 100644 --- a/public/language/sv/recent.json +++ b/public/language/sv/recent.json @@ -5,5 +5,15 @@ "month": "Månad", "year": "År", "alltime": "Alltid", - "no_recent_topics": "Det finns inga olästa ämnen." + "no_recent_topics": "Det finns inga olästa ämnen.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/sv/reset_password.json b/public/language/sv/reset_password.json index 03682d812e..a3771a31b4 100644 --- a/public/language/sv/reset_password.json +++ b/public/language/sv/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Var god fyll i din epost-adress så får du snart en epost med instruktioner hur du återsätller ditt konto.", "enter_email_address": "Skriv in epostadress", "password_reset_sent": "Lösenordsåterställning skickad", - "invalid_email": "Felaktig epost / Epost finns inte!" + "invalid_email": "Felaktig epost / Epost finns inte!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/sv/search.json b/public/language/sv/search.json index 49e8bde9a0..4418f62e13 100644 --- a/public/language/sv/search.json +++ b/public/language/sv/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 resultat matchar \"%2\", (%3 sekunder)", - "no-matches": "Inga inlägg hittades" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/sv/tags.json b/public/language/sv/tags.json index e2e8199384..fffe39ea0a 100644 --- a/public/language/sv/tags.json +++ b/public/language/sv/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Det finns inga ämnen med detta märkord.", "tags": "Märkord", - "enter_tags_here": "Skriv in märkord här. Tryck på enter efter varje märkord.", - "enter_tags_here_short": "Enter tags...", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", + "enter_tags_here_short": "Ange taggar...", "no_tags": "Det finns inga märkord ännu." } \ No newline at end of file diff --git a/public/language/sv/topic.json b/public/language/sv/topic.json index 21cda10ea5..40b81f0ec4 100644 --- a/public/language/sv/topic.json +++ b/public/language/sv/topic.json @@ -12,6 +12,7 @@ "notify_me": "Få notiser om nya svar i detta ämne", "quote": "Citera", "reply": "Svara", + "guest-login-reply": "Log in to reply", "edit": "Ändra", "delete": "Ta bort", "purge": "Rensa", @@ -27,17 +28,17 @@ "flag_title": "Rapportera detta inlägg för granskning", "flag_confirm": "Är du säker på att du vill flagga det här inlägget?", "flag_success": "Det här inlägget har flaggats för moderering.", - "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", + "deleted_message": "Det här ämnet har raderats. Endast användare med ämneshanterings-privilegier kan se det.", "following_topic.message": "Du kommer nu få notiser när någon gör inlägg i detta ämne.", "not_following_topic.message": "Du kommer inte längre få notiser från detta ämne.", "login_to_subscribe": "Var god registrera eller logga in för att kunna prenumerera på detta ämne.", "markAsUnreadForAll.success": "Ämne markerat som oläst av alla.", "watch": "Följ", - "unwatch": "Unwatch", + "unwatch": "Sluta bevaka", "watch.title": "Få notis om nya svar till det här ämnet", - "unwatch.title": "Stop watching this topic", + "unwatch.title": "Sluta bevaka detta ämne", "share_this_post": "Dela detta inlägg", - "thread_tools.title": "Topic Tools", + "thread_tools.title": "Ämnesverktyg", "thread_tools.markAsUnreadForAll": "Markera som oläst", "thread_tools.pin": "Fäst ämne", "thread_tools.unpin": "Lösgör ämne", @@ -47,11 +48,11 @@ "thread_tools.move_all": "Flytta alla.", "thread_tools.fork": "Grena ämne", "thread_tools.delete": "Ta bort ämne", - "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", + "thread_tools.delete_confirm": "Är du säker på att du vill ta bort det här ämnet?", "thread_tools.restore": "Återställ ämne", - "thread_tools.restore_confirm": "Are you sure you want to restore this topic?", + "thread_tools.restore_confirm": "Är du säker på att du vill återställa det här ämnet?", "thread_tools.purge": "Rensa ämne", - "thread_tools.purge_confirm": "Are you sure you want to purge this topic?", + "thread_tools.purge_confirm": "Är du säker att du vill rensa ut det här ämnet?", "topic_move_success": "Det här ämnet har flyttats till %1", "post_delete_confirm": "Är du säker på att du vill ta bort det här inlägget?", "post_restore_confirm": "Är du säker på att du vill återställa det här inlägget?", @@ -72,8 +73,9 @@ "topic_will_be_moved_to": "Detta ämne kommer bli flytta till kategori", "fork_topic_instruction": "Klicka på de inlägg du vill grena", "fork_no_pids": "Inga inlägg valda!", - "fork_success": "Successfully forked topic! Click here to go to the forked topic.", + "fork_success": "Ämnet har blivit förgrenat. Klicka här för att gå till det förgrenade ämnet.", "composer.title_placeholder": "Skriv in ämnets titel här...", + "composer.handle_placeholder": "Name", "composer.discard": "Avbryt", "composer.submit": "Spara", "composer.replying_to": "Svarar till %1", @@ -92,5 +94,6 @@ "sort_by": "Sortera på", "oldest_to_newest": "Äldst till nyaste", "newest_to_oldest": "Nyaste till äldst", - "most_votes": "Mest röster" + "most_votes": "Mest röster", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/sv/user.json b/public/language/sv/user.json index b019d5fc04..6a773c45b4 100644 --- a/public/language/sv/user.json +++ b/public/language/sv/user.json @@ -2,10 +2,12 @@ "banned": "Bannad", "offline": "Offline", "username": "Användarnamn", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Epost", "confirm_email": "Bekräfta epostadress ", "delete_account": "Ta bort ämne", - "delete_account_confirm": "Are you sure you want to delete your account?
This action is irreversible and you will not be able to recover any of your data

Enter your username to confirm that you wish to destroy this account.", + "delete_account_confirm": "Är du säker på att du vill radera ditt konto?
Denna åtgärd går inte att ångra och du kommer inte kunna återställa ditt konto

Skriv in ditt användarnamn för att bekräfta att du vill radera ditt konto.", "fullname": "Hela namnet", "website": "Webbsida", "location": "Plats", @@ -16,6 +18,7 @@ "profile_views": "Profil-visningar", "reputation": "Rykte", "favourites": "Favoriter", + "watched": "Watched", "followers": "Följare", "following": "Följer", "signature": "Signatur", @@ -29,7 +32,7 @@ "edit": "Ändra", "uploaded_picture": "Uppladdad bild", "upload_new_picture": "Ladda upp ny bild", - "upload_new_picture_from_url": "Upload New Picture From URL", + "upload_new_picture_from_url": "Ladda Upp Ny Bild Från Länk", "current_password": "Nuvarande lösenord", "change_password": "Ändra lösenord", "change_password_error": "Ogiltigt lösenord.", @@ -47,19 +50,21 @@ "max": "max", "settings": "Inställningar", "show_email": "Visa min epost", - "show_fullname": "Show My Full Name", - "restrict_chats": "Only allow chat messages from users I follow", + "show_fullname": "Visa Fullständigt Namn", + "restrict_chats": "Tillåt endast chatt-meddelanden från användare som jag följer", "digest_label": "Prenumerera på sammanställt flöde", "digest_description": "Prenumerera på epostuppdateringar för det här forumet (notiser och ämnen) med en viss regelbundenhet", "digest_off": "Avslagen", "digest_daily": "Daligen", "digest_weekly": "Veckovis", "digest_monthly": "Månadsvis", - "send_chat_notifications": "Send an email if a new chat message arrives and I am not online", + "send_chat_notifications": "Skicka ett epostmeddelande om nya chatt-meddelanden tas emot när jag inte är online.", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Denna användare har inga följare :(", "follows_no_one": "Denna användare följer ingen :(", "has_no_posts": "Denna användare har inte gjort några inlägg än.", "has_no_topics": "Den här användaren har inte skrivit något inlägg ännu.", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Epost dold", "hidden": "dold", "paginate_description": "Gör så att ämnen och inlägg visas som sidor istället för oändlig scroll.", @@ -68,8 +73,8 @@ "notification_sounds": "Spela ett ljud när du får en notis.", "browsing": "Inställning för bläddring", "open_links_in_new_tab": "Öppna utgående länkar på ny flik?", - "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.", + "enable_topic_searching": "Aktivera Sökning Inom Ämne", + "topic_search_help": "Om aktiverat kommer sökning inom ämne överskrida webbläsarens vanliga sid-sökfunktion och tillåta dig att söka genom hela ämnet istället för det som endast visas på skärmen.", "follow_topics_you_reply_to": "Följ ämnen so du svarat på.", "follow_topics_you_create": "Följ ämnen du skapat." } \ No newline at end of file diff --git a/public/language/sv/users.json b/public/language/sv/users.json index cc3a1f3c36..591a32c344 100644 --- a/public/language/sv/users.json +++ b/public/language/sv/users.json @@ -5,5 +5,8 @@ "search": "Sök", "enter_username": "Ange ett användarnamn för att söka", "load_more": "Ladda fler", - "users-found-search-took": "%1 användare hittades! Sökningen tog %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/th/category.json b/public/language/th/category.json index 31246e2a05..e5d6b1e0fc 100644 --- a/public/language/th/category.json +++ b/public/language/th/category.json @@ -1,8 +1,9 @@ { "new_topic_button": "กระทู้", + "guest-login-post": "เข้าสู่ระบบเพื่อโพส", "no_topics": "ยังไม่มีกระทู้ในหมวดนี้
โพสต์กระทู้แรก?", "browsing": "เรียกดู", "no_replies": "ยังไม่มีใครตอบ", - "share_this_category": "Share this category", - "ignore": "Ignore" + "share_this_category": "แชร์ Category นี้", + "ignore": "ไม่ต้องสนใจอีก" } \ No newline at end of file diff --git a/public/language/th/email.json b/public/language/th/email.json index b211b5d00c..d91ba43963 100644 --- a/public/language/th/email.json +++ b/public/language/th/email.json @@ -9,6 +9,9 @@ "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", "reset.text2": "เพื่อดำเนินการตั้งรหัสผ่านใหม่ต่อไป, โปรดกดที่ลิ้งค์นี้:", "reset.cta": "กดตรงนี้เพื่อตั้งรหัสผ่านใหม่", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "คุณมีข้อความแจ้งเตือนที่ยังไม่ได้อ่านจาก %1:", "digest.latest_topics": "หัวข้อสนทนาล่าสุดจาก %1", "digest.cta": "กดตรงนี้เพื่อเข้าดู %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "New chat message received from %1", "notif.chat.cta": "กดตรงนี้เพื่อกลับไปยังบทสนทนา", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "นี่คืออีเมลทดสอบเพื่อยืนยันว่าระบบอีเมลมีการตั้งค่าที่ถูกต้องสำหรับ NodeBB ของคุณ", "unsub.cta": "กดตรงนี้เพื่อเปลี่ยนแปลงการตั้งค่า", "closing": "ขอบคุณ!" diff --git a/public/language/th/error.json b/public/language/th/error.json index f40e475c39..e265b9cb24 100644 --- a/public/language/th/error.json +++ b/public/language/th/error.json @@ -3,50 +3,61 @@ "not-logged-in": "คุณยังไม่ได้ลงชื่อเข้าระบบ", "account-locked": "บัญชีของคุณถูกระงับการใช้งานชั่วคราว", "search-requires-login": "ต้องลงทะเบียนบัญชีผู้ใช้สำหรับการค้นหา! โปรดลงชื่อเข้าระบบ หรือ ลงทะเบียน!", - "invalid-cid": "Invalid Category ID", - "invalid-tid": "Invalid Topic ID", - "invalid-pid": "Invalid Post ID", - "invalid-uid": "Invalid User ID", - "invalid-username": "Invalid Username", - "invalid-email": "Invalid Email", - "invalid-title": "Invalid title!", - "invalid-user-data": "Invalid User Data", - "invalid-password": "Invalid Password", - "invalid-username-or-password": "Please specify both a username and password", - "invalid-search-term": "Invalid search term", + "invalid-cid": "Category ID ไม่ถูกต้อง", + "invalid-tid": "Topic ID ไม่ถูกต้อง", + "invalid-pid": "Post ID ไม่ถูกต้อง", + "invalid-uid": "User ID ไม่ถูกต้อง", + "invalid-username": "ชื่อผู้ใช้ไม่ถูกต้อง", + "invalid-email": "อีเมลไม่ถูกต้อง", + "invalid-title": "คำนำหน้าชื่อไม่ถูกต้อง", + "invalid-user-data": "User Data ไม่ถูกต้อง", + "invalid-password": "รหัสผ่านไม่ถูกต้อง", + "invalid-username-or-password": "กรุณาระบุชื่อผู้ใช้และรหัสผ่าน", + "invalid-search-term": "ข้อความค้นหาไม่ถูกต้อง", "invalid-pagination-value": "Invalid pagination value", "username-taken": "ชื่อผู้ใช้นี้มีการใช้แล้ว", "email-taken": "อีเมลนี้มีการใช้แล้ว", "email-not-confirmed": "ยังไม่มีการยืนยันอีเมลของคุณ, โปรดกดยืนยันอีเมลของคุณตรงนี้", + "email-not-confirmed-chat": "คุณไม่สามารถแชทได้ จนกว่าจะได้รับการยืนยันอีเมล", + "no-email-to-confirm": "Forum นี้ต้องการการยืนยันอีเมล กรุณากดที่นี่เพื่อระบุอีเมล", + "email-confirm-failed": "เราไม่สามารถยืนยันอีเมลของคุณ ณ ขณะนี้ กรุณาลองใหม่อีกครั้งภายหลัง", "username-too-short": "ชื่อบัญชีผู้ใช้ สั้นเกินไป", "username-too-long": "ชื่อบัญชีผู้ใช้ ยาวเกินไป", "user-banned": "User banned", "user-too-new": "Sorry, you are required to wait %1 seconds before making your first post", - "no-category": "Category does not exist", - "no-topic": "Topic does not exist", - "no-post": "Post does not exist", - "no-group": "Group does not exist", - "no-user": "User does not exist", + "no-category": "ยังไม่มี Category นี้", + "no-topic": "ยังไม่มี Topic นี้", + "no-post": "ยังไม่มี Post นี้", + "no-group": "ยังไม่มี Group นี้", + "no-user": "ยังไม่มีผู้ใช้งานนี้", "no-teaser": "Teaser does not exist", - "no-privileges": "You do not have enough privileges for this action.", + "no-privileges": "คุณมีสิทธิ์ไม่เพียงพอที่จะทำรายการนี้", "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", - "category-disabled": "Category disabled", + "category-disabled": "Category นี้ถูกปิดการใช้งานแล้ว", "topic-locked": "Topic Locked", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Please wait for uploads to complete.", "content-too-short": "Please enter a longer post. Posts should contain at least %1 characters.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 characters.", "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 characters.", "too-many-posts": "You can only post once every %1 seconds - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 seconds until you have earned %2 reputation - please wait before posting again", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Maximum allowed file size is %1 kbs - please upload a smaller file", "cant-vote-self-post": "You cannot vote for your own post", "already-favourited": "You have already favourited this post", "already-unfavourited": "You have already unfavourited this post", "cant-ban-other-admins": "You can't ban other admins!", - "invalid-image-type": "Invalid image type", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Group name too short", "group-already-exists": "Group already exists", "group-name-change-not-allowed": "Group name change not allowed", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", "topic-already-deleted": "This topic has already been deleted", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Topic thumbnails are disabled.", "invalid-file": "Invalid File", "uploads-are-disabled": "Uploads are disabled", - "upload-error": "Upload Error : %1", "signature-too-long": "Sorry, your signature cannot be longer than %1 characters.", "cant-chat-with-yourself": "You can't chat with yourself!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", "not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post", "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error" + "registration-error": "Registration Error", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/th/global.json b/public/language/th/global.json index 1700c170b7..d81b58b8eb 100644 --- a/public/language/th/global.json +++ b/public/language/th/global.json @@ -3,9 +3,10 @@ "search": "ค้นหา", "buttons.close": "ปิด", "403.title": "คุณถูกปฏิเสธการเข้าใช้", - "403.message": "ดูเหมือนว่าคุณจะสะดุดเข้ากับหน้าเว็บที่คุณไม่ได้มีสิทธิการเข้าถึง เข้าสู่ระบบ ?", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "ไม่พบ", - "404.message": "ดูเหมือนว่าคุณจะสะดุดเข้ากับหน้าเว็บที่ไม่มีอยู่ กลับไปที่หน้าแรก", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "มีข้อผิดพลาดภายในระบบ", "500.message": "อุ่ย! มีสิ่งที่ไม่ถูกต้องเกิดขึ้น!", "register": "ลงทะเบียน", @@ -13,19 +14,20 @@ "please_log_in": "กรุณาเข้าสู่ระบบ", "logout": "ออกจากระบบ", "posting_restriction_info": "คุณต้องต้องเป็นสมาชิกเพื่อทำการโพสต์ คลิกที่นี่เพื่อเข้าสู่ระบบ", - "welcome_back": "Welcome Back", + "welcome_back": "ยินดีต้อนรับ", "you_have_successfully_logged_in": "คุณได้เข้าสู่ระบบแล้ว", "save_changes": "บันทึกการเปลี่ยนแปลง", "close": "ปิด", "pagination": "ให้เลขหน้า", - "pagination.out_of": "%1 out of %2", + "pagination.out_of": "%1 จาก %2", "pagination.enter_index": "Enter index", "header.admin": "ผู้ดูแลระบบ", "header.recent": "ล่าสุด", "header.unread": "ไม่ได้อ่าน", - "header.tags": "Tags", + "header.tags": "Tag", "header.popular": "ฮิต", "header.users": "ผู้ใช้", + "header.groups": "Group", "header.chats": "สนทนา", "header.notifications": "แจ้งเตือน", "header.search": "ค้นหา", @@ -73,5 +75,7 @@ "updated.title": "Forum Updated", "updated.message": "This forum has just been updated to the latest version. Click here to refresh the page.", "privacy": "Privacy", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Delete All" } \ No newline at end of file diff --git a/public/language/th/groups.json b/public/language/th/groups.json index bf69c732b0..be94efdf0b 100644 --- a/public/language/th/groups.json +++ b/public/language/th/groups.json @@ -1,8 +1,34 @@ { - "groups": "Groups", - "view_group": "View Group", - "details.title": "Group Details", - "details.members": "Member List", - "details.has_no_posts": "This group's members have not made any posts.", - "details.latest_posts": "Latest Posts" + "groups": "Group", + "view_group": "ดู Group", + "owner": "เจ้าของ Group", + "new_group": "สร้าง Group ใหม่", + "no_groups_found": "ยังไม่มี Group", + "pending.accept": "ยอมรับ", + "pending.reject": "ไม่ยอมรับ", + "cover-instructions": "ลากรูปภาพไปวางยังตำแหน่งที่ต้องการแล้วกดที่ปุ่ม บันทึก", + "cover-change": "ปรับปรุง", + "cover-save": "บันทึก", + "cover-saving": "กำลังบันทึก", + "details.title": "ข้อมูล Group", + "details.members": "รายชื่อสมาชิก", + "details.pending": "สมาชิกที่กำลังรอการตอบรับ", + "details.has_no_posts": "Group นี้ยังไม่มีโพสจากสมาชิก", + "details.latest_posts": "โพสล่าสุด", + "details.private": "ส่วนตัว", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "เตะออก", + "details.owner_options": "การจัดการ Group", + "details.group_name": "ชื่อ Group", + "details.description": "คำอธิบาย", + "details.badge_preview": "Badge Preview", + "details.change_icon": "เปลี่ยนไอคอน", + "details.change_colour": "เปลี่ยนสี", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "แสดง Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "ซ่อน", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "ข้อมูล Group ได้รับการบันทึกแล้ว", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/th/login.json b/public/language/th/login.json index bb93152904..5eba336a39 100644 --- a/public/language/th/login.json +++ b/public/language/th/login.json @@ -1,5 +1,7 @@ { - "username": "ชื่อบัญชีส่วนตัว / อีเมล", + "username-email": "ชื่อผู้ใช้ / อีเมล", + "username": "ชื่อผู้ใช้", + "email": "อีเมล", "remember_me": "จำไว้ในระบบ?", "forgot_password": "ลืมรหัสผ่าน?", "alternative_logins": "เข้าสู่ระบบโดยทางอื่น", diff --git a/public/language/th/notifications.json b/public/language/th/notifications.json index d8f0875a8f..53d7dc8ea7 100644 --- a/public/language/th/notifications.json +++ b/public/language/th/notifications.json @@ -2,6 +2,7 @@ "title": "แจ้งเตือน", "no_notifs": "คุณไม่มีข้อแจ้งเตือนใหม่", "see_all": "ดูข้อแจ้งเตือนทั้งหมด", + "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", "outgoing_link": "ลิงค์ออก", "outgoing_link_message": "You are now leaving %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 started following you.", "email-confirmed": "Email Confirmed", "email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.", - "email-confirm-error": "An error occurred...", "email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.", "email-confirm-sent": "Confirmation email sent." } \ No newline at end of file diff --git a/public/language/th/pages.json b/public/language/th/pages.json index a227f62340..4b4998d3bd 100644 --- a/public/language/th/pages.json +++ b/public/language/th/pages.json @@ -5,14 +5,15 @@ "recent": "กระทู้ล่าสุด", "users": "ผู้ใช้ที่ลงทะเบียน", "notifications": "แจ้งเตือน", - "tags": "Topics tagged under \"%1\"", + "tags": "หัวข้อที่ถูก Tag อยู่ภายใต้ \"%1\"", "user.edit": "แก้ไข \"%1\"", "user.following": "ผู้ใช้ที่ %1 ติดตาม", "user.followers": "ผู้ใช้ที่ติดตาม %1", "user.posts": "กระทู้โดย %1", - "user.topics": "Topics created by %1", + "user.topics": "หัวข้อที่ถูกสร้างโดย %1", + "user.groups": "กลุ่มของ %1", "user.favourites": "กระทู้ที่ %1 ชอบ", "user.settings": "ตั้งค่าผู้ใช้", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", - "maintenance.messageIntro": "Additionally, the administrator has left this message:" + "maintenance.text": "%1 กำลังอยู่ระหว่างการปิดปรับปรุงชั่วคราว กรุณาลองใหม่อีกครั้งในภายหลัง", + "maintenance.messageIntro": "ผู้ดูแลระบบได้ฝากข้อความต่อไปนี้เอาไว้" } \ No newline at end of file diff --git a/public/language/th/recent.json b/public/language/th/recent.json index 05eec4d503..2a6beb73f4 100644 --- a/public/language/th/recent.json +++ b/public/language/th/recent.json @@ -5,5 +5,15 @@ "month": "เดือน", "year": "Year", "alltime": "All Time", - "no_recent_topics": "ไม่มีกระทู้ล่าสุด" + "no_recent_topics": "ไม่มีกระทู้ล่าสุด", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/th/reset_password.json b/public/language/th/reset_password.json index 2b12834604..1b66d7dd33 100644 --- a/public/language/th/reset_password.json +++ b/public/language/th/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "กรุณาใส่อีเมลของคุณ เราจะส่งอีเมลให้คุณพร้อมคำแนะนำเกี่ยวกับวิธีการรีเซ็ตบัญชีของคุณ", "enter_email_address": "ใส่อีเมล์", "password_reset_sent": "รหัสรีเซ็ตถูกส่งออกไปแล้ว", - "invalid_email": "อีเมล์ไม่ถูกต้อง / อีเมล์ไม่มีอยู่!" + "invalid_email": "อีเมล์ไม่ถูกต้อง / อีเมล์ไม่มีอยู่!", + "password_too_short": "รหัสผ่านที่คุณกำหนดยังสั้นเกินไป กรุณากำหนดรหัสผ่านของคุณใหม่", + "passwords_do_not_match": "รหัสผ่านทั้ง 2 ที่ใส่ไม่ตรงกัน" } \ No newline at end of file diff --git a/public/language/th/search.json b/public/language/th/search.json index 965b5b59bf..167d50d0de 100644 --- a/public/language/th/search.json +++ b/public/language/th/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 ผลลัพธ์ ตรงตามที่ระบุ \"%2\", (%3 วินาที)", - "no-matches": "No posts found" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/th/tags.json b/public/language/th/tags.json index 0dc699ef23..bdb45d5eef 100644 --- a/public/language/th/tags.json +++ b/public/language/th/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "ไม่มีหัวข้อสนทนาที่เกี่ยวข้องกับป้ายคำศัพท์นี้", "tags": "ป้ายคำศัพท์", - "enter_tags_here": "ใส่ป้ายคำศัพท์ตรงนี้. โปรดกด 'Enter' หลังทุกป้ายคำศัพท์", + "enter_tags_here": "ใส่ Tags ตรงนี้ได้ทั้งหมด %1-%2 ตัวอักษร และกรุณากดปุ่ม Enter ทุกครั้งเมื่อต้องการเพิ่ม Tag ใหม่", "enter_tags_here_short": "ใส่ป้ายคำศัพท์ ...", "no_tags": "ยังไม่มีป้ายคำศัพท์" } \ No newline at end of file diff --git a/public/language/th/topic.json b/public/language/th/topic.json index 4113fba9af..ea6a1a8998 100644 --- a/public/language/th/topic.json +++ b/public/language/th/topic.json @@ -4,14 +4,15 @@ "topic_id_placeholder": "Enter topic ID", "no_topics_found": "ไม่พบกระทู้", "no_posts_found": "ไม่พบโพส", - "post_is_deleted": "This post is deleted!", + "post_is_deleted": "ลบ Post นี้เรียบร้อยแล้ว!", "profile": "รายละเอียด", - "posted_by": "Posted by %1", - "posted_by_guest": "Posted by Guest", + "posted_by": "โพสโดย %1", + "posted_by_guest": "โพสโดย Guest", "chat": "แชท", "notify_me": "แจ้งเตือนเมื่อการตอบใหม่ในกระทู้นี้", "quote": "คำอ้างอิง", "reply": "ตอบ", + "guest-login-reply": "เข้าสู่ระบบเพื่อตอบกลับ", "edit": "แก้ไข", "delete": "ลบ", "purge": "Purge", @@ -25,31 +26,31 @@ "locked": "Locked", "bookmark_instructions": "คลิกที่นี่เพื่อกลับคืนสู่ฐานะสุดท้าย หรือ คลิกปิดเพื่อยกเลิก", "flag_title": "ปักธงโพสต์นี้เพื่อดำเนินการ", - "flag_confirm": "Are you sure you want to flag this post?", + "flag_confirm": "มั่นใจแล้วหรือไม่ที่จะ Flag Post นี้?", "flag_success": "This post has been flagged for moderation.", - "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", + "deleted_message": "Topic นี้ถูกลบไปแล้ว เฉพาะผู้ใช้งานที่มีสิทธิ์ในการจัดการ Topic เท่านั้นที่จะมีสิทธิ์ในการเข้าชม", "following_topic.message": "คุณจะได้รับการแจ้งเตือนเมื่อมีคนโพสต์ในกระทู้นี้", "not_following_topic.message": "คุณจะไม่รับการแจ้งเตือนจากกระทู้นี้", "login_to_subscribe": "กรุณาลงทะเบียนหรือเข้าสู่ระบบเพื่อที่จะติดตามกระทู้นี้", "markAsUnreadForAll.success": "ทำเครื่องหมายว่ายังไม่ได้อ่านทั้งหมด", "watch": "ติดตาม", - "unwatch": "Unwatch", - "watch.title": "Be notified of new replies in this topic", - "unwatch.title": "Stop watching this topic", + "unwatch": "ยังไม่ได้ติดตาม", + "watch.title": "ให้แจ้งเตือนเมื่อมีการตอบกลับ Topic นี้", + "unwatch.title": "ยกเลิกการติดตาม Topic นี้", "share_this_post": "แชร์โพสต์นี้", - "thread_tools.title": "Topic Tools", + "thread_tools.title": "เครื่องมือช่วยจัดการ Topic", "thread_tools.markAsUnreadForAll": "ทำหมายว่ายังไม่ได้อ่าน", "thread_tools.pin": "ปักหมุดกระทู้", "thread_tools.unpin": "เลิกปักหมุดกระทู้", "thread_tools.lock": "ล็อคกระทู้", "thread_tools.unlock": "ปลดล็อคกระทู้", "thread_tools.move": "ย้ายกระทู้", - "thread_tools.move_all": "Move All", + "thread_tools.move_all": "ย้ายทั้งหมด", "thread_tools.fork": "แยกกระทู้", "thread_tools.delete": "ลบกระทู้", - "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", + "thread_tools.delete_confirm": "มั่นใจแล้วหรือไม่ที่จะลบ Topic นี้?", "thread_tools.restore": "กู้กระทู้", - "thread_tools.restore_confirm": "Are you sure you want to restore this topic?", + "thread_tools.restore_confirm": "มั่นใจแล้วหรือไม่ที่จะกู้คืน Topic นี้?", "thread_tools.purge": "Purge Topic", "thread_tools.purge_confirm": "Are you sure you want to purge this topic?", "topic_move_success": "This topic has been successfully moved to %1", @@ -74,6 +75,7 @@ "fork_no_pids": "ไม่มีโพสต์ที่เลือก!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", "composer.title_placeholder": "ป้อนชื่อกระทู้ของคุณที่นี่ ...", + "composer.handle_placeholder": "Name", "composer.discard": "ยกเลิก", "composer.submit": "ส่ง", "composer.replying_to": "Replying to %1", @@ -92,5 +94,6 @@ "sort_by": "Sort by", "oldest_to_newest": "Oldest to Newest", "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most votes" + "most_votes": "Most votes", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/th/unread.json b/public/language/th/unread.json index 37451a65ba..2595955dc7 100644 --- a/public/language/th/unread.json +++ b/public/language/th/unread.json @@ -2,8 +2,8 @@ "title": "ไม่ได้อ่าน", "no_unread_topics": "ไม่มีกระทู้ที่ยังไม่ได้อ่านเป็น", "load_more": "โหลดเพิ่มเติม", - "mark_as_read": "Mark as Read", - "selected": "Selected", - "all": "All", - "topics_marked_as_read.success": "Topics marked as read!" + "mark_as_read": "ทำเครื่องหมายว่าอ่านแล้ว", + "selected": "เลือก", + "all": "ทั้งหมด", + "topics_marked_as_read.success": "Topic ถูกทำเครื่องหมายว่าอ่านแล้วเรียบร้อย" } \ No newline at end of file diff --git a/public/language/th/user.json b/public/language/th/user.json index c408af39be..0e8de83da7 100644 --- a/public/language/th/user.json +++ b/public/language/th/user.json @@ -2,6 +2,8 @@ "banned": "เเบน", "offline": "ออฟไลน์", "username": "ชื่อผู้ใช้", + "joindate": "วันที่เข้าร่วม", + "postcount": "จำนวนโพส", "email": "อีเมล์", "confirm_email": "ยืนยันอีเมล", "delete_account": "ลบบัญชี", @@ -16,6 +18,7 @@ "profile_views": "ดูข้อมูลส่วนตัว", "reputation": "ชื่อเสียง", "favourites": "ชอบ", + "watched": "ดูแล้ว", "followers": "คนติดตาม", "following": "ติดตาม", "signature": "ลายเซ็น", @@ -56,10 +59,12 @@ "digest_weekly": "รายสัปดาห์", "digest_monthly": "รายเดือน", "send_chat_notifications": "ส่งอีเมลเมื่อมีข้อความใหม่เข้ามาขณะที่ฉันไม่ได้ออนไลน์", + "send_post_notifications": "ส่งอีเมลให้ฉันเมื่อมีการตอบกลับในหัวข้อที่ฉันเคยบอกรับเป็นสมาชิกไว้", "has_no_follower": "ผู้ใช้รายนี้ไม่มีใครติดตาม :(", "follows_no_one": "ผู้ใช้รายนี้ไม่ติดตามใคร :(", "has_no_posts": "ผู้ใช้รายนี้ไม่ได้โพสต์อะไรเลย", "has_no_topics": "สมาชิกรายนี้ยังไม่ได้มีการโพสต์ข้อความ", + "has_no_watched_topics": "ผู้ใช้นี้ยังไม่เคยเข้าชมในหัวข้อใดๆ", "email_hidden": "ซ่อนอีเมล์", "hidden": "ซ่อน", "paginate_description": "ให้เลขหน้ากระทู้และโพสต์แทนการใช้สกรอลล์ที่ไม่สิ้นสุด", @@ -68,8 +73,8 @@ "notification_sounds": "เตือนด้วยเสียงเมื่อมีข้อความแจ้งเตือน", "browsing": "เปิดดูการตั้งค่า", "open_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.", + "enable_topic_searching": "เปิดใช้การค้นหาแบบ In-Topic", + "topic_search_help": "เมื่อการค้นหาแบบ In-Topic ถูกเปิดใช้งาน การค้นหาแบบ In-Topic จะทำงานแทนการค้นหาในรูปแบบเดิม ซึ่งช่วยให้คุณสามารถทำการค้นหาจาก Topic ทั้งหมด เพิ่มเติมจากที่คุณกำลังเห็นอยู่บนหน้าจอ", "follow_topics_you_reply_to": "ติดตามกระทู้ที่คุณตอบ", "follow_topics_you_create": "ติดตามกระทู้ที่คุณตั้ง" } \ No newline at end of file diff --git a/public/language/th/users.json b/public/language/th/users.json index a45aa14516..542689e182 100644 --- a/public/language/th/users.json +++ b/public/language/th/users.json @@ -5,5 +5,8 @@ "search": "ค้นหา", "enter_username": "ใส่ชื่อผู้ใช้เพื่อค้นหา", "load_more": "โหลดเพิ่มเติม", - "users-found-search-took": "%1 user(s) found! Search took %2 ms." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/tr/category.json b/public/language/tr/category.json index f29f0c81d0..518bd9dcb0 100644 --- a/public/language/tr/category.json +++ b/public/language/tr/category.json @@ -1,7 +1,8 @@ { "new_topic_button": "Yeni Başlık", + "guest-login-post": "Göndermek için giriş yapın", "no_topics": " Bu kategoride hiç konu yok.
Yeni bir konu açmak istemez misiniz?", - "browsing": "dolaşıyor", + "browsing": "gözden geçiriliyor", "no_replies": "Kimse yanıtlamadı", "share_this_category": "Bu kategoriyi paylaş", "ignore": "Yoksay" diff --git a/public/language/tr/email.json b/public/language/tr/email.json index d5242db872..350df09f81 100644 --- a/public/language/tr/email.json +++ b/public/language/tr/email.json @@ -9,6 +9,9 @@ "reset.text1": "Şifrenizi değiştirmek istediğinize dair bir ileti aldık. Eğer böyle bir istek göndermediyseniz, lütfen bu e-postayı görmezden gelin.", "reset.text2": "Parola değiştirme işlemine devam etmek için aşağıdaki bağlantıya tıklayın:", "reset.cta": "Parolanızı değiştirmek için buraya tıklayın", + "reset.notify.subject": "Şifre başarıyla değiştirildi", + "reset.notify.text1": "Şifrenizin %1 zamanında başarı ile değiştirildiğini bildirmek isteriz.", + "reset.notify.text2": "Bunu siz yetkilendirmediyseniz, lütfen hiç vakit kaybetmeden site yöneticisine bu durumu bildiriniz.", "digest.notifications": "Okunmamış bazı bildirimleriniz var", "digest.latest_topics": "En güncel konular", "digest.cta": "Ziyaret etmek için buraya tıklayın", @@ -17,6 +20,8 @@ "notif.chat.subject": "Okunmamış bazı iletileriniz var", "notif.chat.cta": "Sohbete devam etmek için buraya tıklayın", "notif.chat.unsub.info": "Bu bildirim şectiğiniz ayarlar yüzünden gönderildi.", + "notif.post.cta": "Konunun tamamını okumak için buraya tıklayın", + "notif.post.unsub.info": "Bu yazı bildirimi size abonelik ayarlarınız nedeni ile gönderilmiştir.", "test.text1": "Bu ileti NodeBB e-posta ayarlarınızın doğru çalışıp çalışmadığını kontrol etmek için gönderildi.", "unsub.cta": "Buraya tıklayarak ayarlarınızı değiştirebilirsiniz.", "closing": "Teşekkürler!" diff --git a/public/language/tr/error.json b/public/language/tr/error.json index bd8a727725..d54bbce50a 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -18,6 +18,9 @@ "username-taken": "Kullanıcı İsmi Alınmış", "email-taken": "E-posta Alınmış", "email-not-confirmed": "E-postanız onaylanmamış, onaylamak için lütfen buraya tıklayın.", + "email-not-confirmed-chat": "Email adresiniz doğrulanmadan sohbet edemezsiniz.", + "no-email-to-confirm": "Bu forum e-posta doğrulaması gerektirir, lütfen buraya bir e-posta adresi girin", + "email-confirm-failed": "E-posta adresinizi doğrulayamıyoruz. Lütfen daha sonra tekrar deneyin.", "username-too-short": "Kullanıcı ismi çok kısa", "username-too-long": "Kullanıcı ismi çok uzun.", "user-banned": "Kullanıcı Yasaklı", @@ -32,21 +35,29 @@ "no-emailers-configured": "E-posta eklentisi kurulu değil bu yüzden test e-postası gönderilemedi", "category-disabled": "Kategori aktif değil", "topic-locked": "Başlık Kilitli", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Lütfen yüklemelerin bitmesini bekleyin.", "content-too-short": "Lütfen daha uzun bir ileti girin. En az %1 karakter.", + "content-too-long": "Lütfen daha kısa bir yayın girin. Yayınlar %1 karakterden uzun olamaz.", "title-too-short": "Lütfen daha uzun bir başlık girin. En az %1 karakter.", "title-too-long": "Lütfen daha kısa bir başlık girin. Başlıklar %1 karakterden uzun olamaz.", "too-many-posts": "Sadece %1 saniyede bir ileti gönderebilirsiniz.", "too-many-posts-newbie": "Yeni bir kullanıcı olarak, %2 saygınlığınız olana kadar sadece %1 saniyede bir mesaj gönderebilirsiniz. Lütfen tekrar ileti göndermeden önce bekleyin.", + "tag-too-short": "Lütfen daha uzun bir etiket giriniz. Etiketler en az %1 karakter uzunluğunda olmalı", + "tag-too-long": "Lütfen daha kısa bir etiket girin. Etiketler %1 karakterden daha uzun olamaz", "file-too-big": "İzin verilen en büyük dosya boyutu %1 kbs.", "cant-vote-self-post": "Kendi iletinize oy veremezsiniz", "already-favourited": "Bu iletiyi zaten favorilerinize eklediniz", "already-unfavourited": "Bu iletiyi zaten favorilerinizden çıkardınız", "cant-ban-other-admins": "Başka yöneticileri yasaklayamazsınız!", - "invalid-image-type": "Geçersiz resim türü", + "invalid-image-type": "Geçersiz resim uzantısı. Izin verilen uzantılar: %1", + "invalid-image-extension": "Geçersiz resim uzantısı", + "invalid-file-type": "Geçersiz dosya türü. İzin verilenler şunlar : %1", "group-name-too-short": "Grup ismi çok kısa", "group-already-exists": "Grup zaten var", "group-name-change-not-allowed": "Grup ismini değiştiremezsiniz", + "group-already-member": "Bu grubun zaten bir parçasısınız.", + "group-needs-owner": "Bu grubu en az bir kişi sahiplenmesi gerekiyor", "post-already-deleted": "İleti zaten silinmiş", "post-already-restored": "İleti zaten geri getirilmiş", "topic-already-deleted": "Başlık zaten silinmiş", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Başlık resimleri kapalı.", "invalid-file": "Geçersiz Dosya", "uploads-are-disabled": "Yüklemeler kapalı", - "upload-error": "Yükleme Hatası : %1", "signature-too-long": "İmza en fazla %1 karakter olabilir!", "cant-chat-with-yourself": "Kendinizle sohbet edemezsiniz!", "chat-restricted": "Bu kullanıcı sohbet ayarlarını kısıtlamış. Bu kişiye mesaj gönderebilmeniz için sizi takip etmeleri gerekiyor", + "too-many-messages": "Ardı ardına çok fazla mesaj yolladınız, lütfen biraz bekleyiniz.", "reputation-system-disabled": "Saygınlık sistemi kapatılmış.", "downvoting-disabled": "Aşagı oylama kapatılmış", "not-enough-reputation-to-downvote": "Bu iletiyi aşagı oylamak için yeterince saygınlığınız yok.", "not-enough-reputation-to-flag": "Bu iletiyi bayraklamak için yeterince saygınlığınız yok", "reload-failed": "NodeBB tekrar yüklenirken bir sorunla karşılaştı: “%1“. NodeBB varolan dosyaları servis etmeye devam edecek.", - "registration-error": "Kayıt Hatası" + "registration-error": "Kayıt Hatası", + "parse-error": "Sunucu yanıtı çözümlemesi sırasında bir şeyler ters gitti", + "wrong-login-type-email": "Lütfen giriş için e-posta adresinizi kullanın", + "wrong-login-type-username": "Lütfen giriş için kullanıcı adınızı kullanın" } \ No newline at end of file diff --git a/public/language/tr/global.json b/public/language/tr/global.json index bf13ffb581..cd2e8e18c9 100644 --- a/public/language/tr/global.json +++ b/public/language/tr/global.json @@ -3,9 +3,10 @@ "search": "Arama", "buttons.close": "Kapat", "403.title": "Erişim Engellendi", - "403.message": "Erişiminiz olmayan bir sayfaya ulaşmaya çalıştınız. Belki de href='/login'> < giriş yapmayı denemelisiniz ?", + "403.message": "Erişim izniniz olmayan bir sayfaya denk gelmiş gibisiniz.", + "403.login": "Belki de tekrar giriş yapmayı denersiniz?", "404.title": "Bulunamadı", - "404.message": "Olmayan bir sayfayı ziyaret etmeye çalıştınız. Ana sayfa .", + "404.message": "Erişim izniniz olmayan bir sayfaya denk gelmiş gibisiniz.Anasayfaya geri dönün.", "500.title": "Dahili hata.", "500.message": "Ups! Bir şeyler ters gitti sanki!", "register": "Kayıt Ol", @@ -26,6 +27,7 @@ "header.tags": "Etiketler", "header.popular": "Popüler", "header.users": "Kullanıcılar", + "header.groups": "Gruplar", "header.chats": "Sohbetler", "header.notifications": "Bildirimler", "header.search": "Arama", @@ -73,5 +75,7 @@ "updated.title": "Forum güncellendi", "updated.message": "Bu forum şu anda güncellendi. Sayfayı tekrar yüklemek için buraya tıklayın.", "privacy": "Gizlilik", + "follow": "Takip et", + "unfollow": "Takip etmeyi bırak", "delete_all": "Hepsini Sil" } \ No newline at end of file diff --git a/public/language/tr/groups.json b/public/language/tr/groups.json index 664fb52509..536921e7e5 100644 --- a/public/language/tr/groups.json +++ b/public/language/tr/groups.json @@ -1,8 +1,34 @@ { "groups": "Guruplar", "view_group": "Grubu Gör", + "owner": "Grup Kurucusu", + "new_group": "Yeni Grup Oluştur", + "no_groups_found": "Henüz hiç grup yok", + "pending.accept": "Onayla", + "pending.reject": "Reddet", + "cover-instructions": "Bir fotoğrafı Sürükleyin ve Bırakın, uygun yere sürükleyip Kaydet'e tıklayın.", + "cover-change": "Değiştir", + "cover-save": "Kaydet", + "cover-saving": "Kaydediliyor", "details.title": "Grup Detayları", "details.members": "Üye Listesi", + "details.pending": "Üyeler bekleniyor", "details.has_no_posts": "Bu grubun üyeleri henüz bir ileti göndermedi.", - "details.latest_posts": "En son iletiler" + "details.latest_posts": "En son iletiler", + "details.private": "Özel", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Dışarı at", + "details.owner_options": "Grup Yöneticisi", + "details.group_name": "Grup ismi", + "details.description": "Tanımlama", + "details.badge_preview": "Rozet Önizlemesi", + "details.change_icon": "İkonu Değiştir", + "details.change_colour": "Rengi Değiştir", + "details.badge_text": "Rozet Yazısı", + "details.userTitleEnabled": "Rozeti Göster", + "details.private_help": "Gruba katılmak için eğer etkinse grup sahibini onayı gerekir, ", + "details.hidden": "Gizli", + "details.hidden_help": "Bu grup eğer etkinse grup listelerinde bulunmaz, ve kullanıcılar bizzat davet eder", + "event.updated": "Grup detayları güncellenmiştir", + "event.deleted": "\"%1\" grubu silinmiş" } \ No newline at end of file diff --git a/public/language/tr/login.json b/public/language/tr/login.json index 1cc526d5c2..bd13e81d46 100644 --- a/public/language/tr/login.json +++ b/public/language/tr/login.json @@ -1,5 +1,7 @@ { - "username": "Kullanıcı İsmi / E-posta", + "username-email": "Kullancı Adı / E posta adresi", + "username": "Kullanıcı Adı", + "email": "E posta Adresi", "remember_me": "Beni Hatırla!", "forgot_password": "Şifrenizi mi unuttunuz?", "alternative_logins": "Alternatif Girişler", diff --git a/public/language/tr/notifications.json b/public/language/tr/notifications.json index 006f9f70e2..64ca790352 100644 --- a/public/language/tr/notifications.json +++ b/public/language/tr/notifications.json @@ -2,6 +2,7 @@ "title": "Bildirimler", "no_notifs": "Yeni bildirimleriniz yok", "see_all": "Bütün bildirimleri gör", + "mark_all_read": "Okunmuş bütün bildirimleri işaretle", "back_to_home": "Geri dön %1", "outgoing_link": "Harici Link", "outgoing_link_message": "Bu forumdan ayrılıyorsunuz", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 sizi takip etmeye başladı.", "email-confirmed": "E-posta onaylandı", "email-confirmed-message": "E-postanızı onaylandığınız için teşekkürler. Hesabınız tamamen aktive edildi.", - "email-confirm-error": "Bir hata oluştu...", "email-confirm-error-message": "E-posta adresinizi onaylarken bir hata oluştu. Kodunuz geçersiz ya da eski olabilir.", "email-confirm-sent": "Onay e-postası gönderildi." } \ No newline at end of file diff --git a/public/language/tr/pages.json b/public/language/tr/pages.json index e3d1cf9cf8..5171f4232f 100644 --- a/public/language/tr/pages.json +++ b/public/language/tr/pages.json @@ -11,6 +11,7 @@ "user.followers": "%1 takip edenler", "user.posts": "%1 tarafından gönderilen iletiler", "user.topics": "%1 tarafından gönderilen başlıklar", + "user.groups": "%1 Kişisine Ait Gruplar", "user.favourites": "%1'in Favori İletileri", "user.settings": "Kullanıcı Ayarları", "maintenance.text": "%1 şu anda bakımda. Lütfen bir süre sonra tekrar deneyin.", diff --git a/public/language/tr/recent.json b/public/language/tr/recent.json index 6ed65f7ae7..f91231966c 100644 --- a/public/language/tr/recent.json +++ b/public/language/tr/recent.json @@ -5,5 +5,15 @@ "month": "Ay", "year": "Yıl", "alltime": "Hepsi", - "no_recent_topics": "Güncel konular yok." + "no_recent_topics": "Güncel konular yok.", + "no_popular_topics": "Popüler konu yok", + "there-is-a-new-topic": "Yeni bir konu mevcut.", + "there-is-a-new-topic-and-a-new-post": "Yeni bir konu ve yayın mevcut.", + "there-is-a-new-topic-and-new-posts": "Bir adet yeni konu ve %1 adet yeni yayın var.", + "there-are-new-topics": "%1 adet yeni konu mevcut.", + "there-are-new-topics-and-a-new-post": "%1 adet yeni konu ve bir adet yeni yayın mevcut.", + "there-are-new-topics-and-new-posts": "%1 adet yeni konu %2 adet yeni yayın mevcut.", + "there-is-a-new-post": "Yeni bir yayın mevcut.", + "there-are-new-posts": "%1 adet yeni yayın mevcut.", + "click-here-to-reload": "Yenilemek için buraya tıklayın." } \ No newline at end of file diff --git a/public/language/tr/reset_password.json b/public/language/tr/reset_password.json index 0eb0497ee3..60f0346516 100644 --- a/public/language/tr/reset_password.json +++ b/public/language/tr/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Lütfen e-posta adresinizi girin , size hesabınızı nasıl sıfırlayacağınızı anlatan bir e-posta gönderelim", "enter_email_address": "E-posta Adresinizi girin", "password_reset_sent": "Şifre Yenilemesi Gönderildi", - "invalid_email": "Geçersiz E-posta / E-posta mevcut değil!" + "invalid_email": "Geçersiz E-posta / E-posta mevcut değil!", + "password_too_short": "Girdiğiniz şifre çok kısa, lütfen farklı bir şifre seçiniz.", + "passwords_do_not_match": "Girdiğiniz iki şifre birbirine uymuyor." } \ No newline at end of file diff --git a/public/language/tr/search.json b/public/language/tr/search.json index 330ae541d7..2ffbbfe36e 100644 --- a/public/language/tr/search.json +++ b/public/language/tr/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 tane “%2“ bulundu (%3 saniye)", - "no-matches": "İleti bulunamadı" + "no-matches": "Hiç eşleşme bulunamadı", + "in": "Konum:", + "by": "Kim Tarafından :", + "titles": "Başlıklar", + "titles-posts": "Başlıklar ve Yayınlar", + "posted-by": "Gönderen", + "in-categories": "Kategorilerde", + "search-child-categories": "Alt kategorilerde arat", + "reply-count": "Cevap Sayısı", + "at-least": "En az", + "at-most": "En fazla", + "post-time": "Yayınlama zamanı", + "newer-than": "Daha yeni", + "older-than": "Daha eski", + "any-date": "Herhangi bir tarih", + "yesterday": "Dün", + "one-week": "Bir hafta", + "two-weeks": "İki hafta", + "one-month": "Bir ay", + "three-months": "Üç ay", + "six-months": "Altı ay", + "one-year": "Bir yıl", + "sort-by": "Şuna göre filtrele", + "last-reply-time": "En son cevaplama süresi", + "topic-title": "Konu başlığı", + "number-of-replies": "Cevap sayısı", + "number-of-views": "Görüntüleme sayısı", + "topic-start-date": "Başlık açılma tarihi", + "username": "Kullanıcı Adı", + "category": "Kategori", + "descending": "Azalan düzene göre", + "ascending": "Artan düzene göre", + "save-preferences": "Tercihleri Kaydet", + "clear-preferences": "Tercihleri Sil", + "search-preferences-saved": "Kaydedilmiş Arama tercihleri", + "search-preferences-cleared": "Silinmiş Arama Tercihleri", + "show-results-as": "Sonuçları göster : " } \ No newline at end of file diff --git a/public/language/tr/tags.json b/public/language/tr/tags.json index 4ef4669f63..344a4bfff6 100644 --- a/public/language/tr/tags.json +++ b/public/language/tr/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Bu etiketli başlık yok.", "tags": "Etiketler", - "enter_tags_here": "Etiketleri buraya girin.", + "enter_tags_here": "Etiketleri buraya girin. %1-%2 karakter. Her etiketten sonra enter tuşuna basın.", "enter_tags_here_short": "Etiketleri gir...", "no_tags": "Henüz etiket yok." } \ No newline at end of file diff --git a/public/language/tr/topic.json b/public/language/tr/topic.json index a18769ce96..ef6276ca31 100644 --- a/public/language/tr/topic.json +++ b/public/language/tr/topic.json @@ -12,6 +12,7 @@ "notify_me": "Bu konudaki cevaplardan haberdar ol", "quote": "Alıntı", "reply": "Cevap", + "guest-login-reply": "Cevaplamak için giriş yapın", "edit": "Düzenle", "delete": "Sil", "purge": "Temizle", @@ -74,6 +75,7 @@ "fork_no_pids": "Hiç bir ileti seçilmedi!", "fork_success": "Başlık başarıyla ayrıldı!", "composer.title_placeholder": "Başlık ismini buraya girin...", + "composer.handle_placeholder": "İsim", "composer.discard": "Vazgeç", "composer.submit": "Gönder", "composer.replying_to": "Yanıtlanan Konu %1", @@ -92,5 +94,6 @@ "sort_by": "Sırala", "oldest_to_newest": "En eskiden en yeniye", "newest_to_oldest": "En yeniden en eskiye", - "most_votes": "En çok oy" + "most_votes": "En çok oy", + "most_posts": "En sık yayın" } \ No newline at end of file diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 9feaac81f8..8fa7b4c5c9 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -2,6 +2,8 @@ "banned": "Yasaklı", "offline": "Çevrimdışı", "username": "Kullanıcı Adı", + "joindate": "Katılım Tarihi", + "postcount": "Yayın Sayısı", "email": "E-posta", "confirm_email": "E-posta onayla", "delete_account": "Hesabı Sil", @@ -16,6 +18,7 @@ "profile_views": "Profil Görüntülemeleri", "reputation": "Saygınlık", "favourites": "Favoriler", + "watched": "İzlendi", "followers": "Takipçiler", "following": "Takip Ediyor", "signature": "İmza", @@ -56,10 +59,12 @@ "digest_weekly": "Haftalık", "digest_monthly": "Aylık", "send_chat_notifications": "Çevrimiçi değilken gelen iletileri e-posta olarak gönder", + "send_post_notifications": "Abone olduğum konulara cevap gelince bana eposta yolla", "has_no_follower": "Bu kullanıcının hiç takipçisi yok :(", "follows_no_one": "Bu kullanıcı kimseyi takip etmiyor :(", "has_no_posts": "Bu kullanıcı henüz birşey göndermedi.", "has_no_topics": "Bu kullanıcı henüz bir konu yaratmadı.", + "has_no_watched_topics": "Bu kullanıcı henüz hiçbir konuyu izlemedi.", "email_hidden": "E-posta gizli", "hidden": "gizli", "paginate_description": "Sonsuz yükleme yerine konu ve iletileri sayfalara böl.", diff --git a/public/language/tr/users.json b/public/language/tr/users.json index 74624e0551..ed6fd922fe 100644 --- a/public/language/tr/users.json +++ b/public/language/tr/users.json @@ -5,5 +5,8 @@ "search": "Ara", "enter_username": "Aramak için bir kullanıcı adı girin", "load_more": "Daha Fazla Yükle", - "users-found-search-took": "%1 kullanıcı bulundu! Arama %2 ms sürdü." + "users-found-search-took": "%1 kullanıcı(lar) bulundu! Arama %2 saniye sürdü.", + "filter-by": "Şu şekilde filtrele", + "online-only": "Sadece çevrimiçi", + "picture-only": "Sadece resim" } \ No newline at end of file diff --git a/public/language/vi/category.json b/public/language/vi/category.json index 36bb00d89b..be80ee1583 100644 --- a/public/language/vi/category.json +++ b/public/language/vi/category.json @@ -1,6 +1,7 @@ { "new_topic_button": "Chủ đề mới", - "no_topics": "Không có bài viết trong danh mục.
Hãy đăng một bài viết mới?", + "guest-login-post": "Đăng nhập để viết bài", + "no_topics": "Không có bài viết trong danh mục này.
Hãy đăng một bài viết mới.", "browsing": "đang xem", "no_replies": "Chưa có bình luận nào", "share_this_category": "Chia sẻ thư mục này", diff --git a/public/language/vi/email.json b/public/language/vi/email.json index 555e20e87e..c7f5fd5b54 100644 --- a/public/language/vi/email.json +++ b/public/language/vi/email.json @@ -3,12 +3,15 @@ "welcome-to": "Chào mừng đến với %1", "greeting_no_name": "Xin chào", "greeting_with_name": "Xin chào %1", - "welcome.text1": "Cảm ơn bạn đã đăng ký tài khoản tại %1!", + "welcome.text1": "Cảm ơn bạn đã đăng ký tại %1!", "welcome.text2": "Để kích hoạt đầy đủ tính năng của tài khoản, chúng tôi cần xác định bạn là chủ của địa chỉ email mà bạn đã đăng ký.", "welcome.cta": "Nhấn vào đây để xác nhận địa chỉ email", "reset.text1": "Chúng tôi nhận được yêu cầu khởi tạo lại mật khẩu của bạn, rất có thể vì bạn đã quên mất nó. Nếu bạn không gởi yêu cầu, hãy bỏ qua email này.", - "reset.text2": "Để khởi tạo lại mật khẩu, hãy click vào liên kết sau:", + "reset.text2": "Để đặt lại mật khẩu, hãy click vào liên kết sau:", "reset.cta": "Click vào đây để khởi tạo lại mật khẩu", + "reset.notify.subject": "Thay đổi mật khẩu thành công", + "reset.notify.text1": "Chúng tôi thông báo với bạn trên %1, mật khẩu của bạn đã thay đổi thành công", + "reset.notify.text2": "Nếu bạn không cho phép điều này, vui lòng thông báo cho quản trị viên ngay lập tức", "digest.notifications": "Bạn có thông báo chưa đọc từ %1", "digest.latest_topics": "Chủ đề mới nhất từ %1", "digest.cta": "Click vào đây để truy cập %1", @@ -17,7 +20,9 @@ "notif.chat.subject": "Bạn có tin nhắn mới từ %1", "notif.chat.cta": "Nhấn vào đây để tiếp tục cuộc hội thoại", "notif.chat.unsub.info": "Thông báo tin nhắn này được gửi tới dựa theo cài đặt theo dõi của bạn.", - "test.text1": "Đây là email kiểm tra để xác nhận rằng trình gửi email đã được cài đặt một cách chính xác cho NodeBB của bạn.", + "notif.post.cta": "Nhấn vào đây để đọc toàn bộ chủ đề", + "notif.post.unsub.info": "Thông báo bài viết này được gửi cho bạn dựa tên thiết lập nhận thông báo của bạn", + "test.text1": "Đây là email kiểm tra xem chức năng gửi mail trên hệ thống NodeBB của bạn có hoạt động tốt hay không.", "unsub.cta": "Nhấn vào đây để thay đổi cài đặt.", "closing": "Xin cảm ơn!" } \ No newline at end of file diff --git a/public/language/vi/error.json b/public/language/vi/error.json index 7c91fcfb85..56d5a49788 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -18,6 +18,9 @@ "username-taken": "Tên đăng nhập đã tồn tại", "email-taken": "Email đã được đăng kí", "email-not-confirmed": "Email của bạn chưa được xác nhận, xin hãy nhấn vào đây để xác nhận địa chỉ này là của bạn", + "email-not-confirmed-chat": "Bạn không thể trò chuyện cho đến khi thư điện tử của bạn được xác nhận", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "Tên đăng nhập quá ngắn", "username-too-long": "Tên đăng nhập quá dài", "user-banned": "Tài khoản bị ban", @@ -32,21 +35,29 @@ "no-emailers-configured": "Không có trình cắm email nào được tải, vì vậy email kiểm tra không thể gửi được", "category-disabled": "Danh mục bị khóa", "topic-locked": "Chủ đề bị khóa", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "Vui lòng chờ upload", "content-too-short": "Vui lòng tạo bài viết dài hơn. Bài viết phải có ít nhất %1 ký tự.", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "Vui lòng nhập tiêu đề dài hơn. Tiêu đề phải có ít nhất %1 ký tự", "title-too-long": "Yêu cầu tiêu đề ngắn hơn. Không dài quá %1 ký tự", "too-many-posts": "Bạn chỉ có thể gửi một bài viết mỗi %1 giây - Xin chờ trong giây lát trước khi gửi lại.", "too-many-posts-newbie": "Tài khoản mới chỉ có thể gởi 1 bài mỗi %1 giây cho đến khi bạn có được %2 điểm tín nhiệm - Xin vui lòng chờ giây lát trước khi thử lại", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "Kích thước tối đa cho phép là %1 kb - xin lựa chọn tập tin nhỏ hơn", "cant-vote-self-post": "Bạn không thể vote cho chính bài viết của bạn", "already-favourited": "Bạn đã bấm yêu thích cho bài viết này rồi", "already-unfavourited": "Bạn đã bỏ thích bài này rồi", "cant-ban-other-admins": "Bạn không thể ban được các admin khác", - "invalid-image-type": "Kiểu hình ảnh không hợp lệ", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "Tên nhóm quá ngắn", "group-already-exists": "Nhóm đã tồn tại", "group-name-change-not-allowed": "Không cho phép đổi tên nhóm", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "Bài viết này đã bị xóa", "post-already-restored": "Bài viết này đã được phục hồi", "topic-already-deleted": "Chủ đề này đã bị xóa", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "Thumbnails cho chủ đề đã bị tắt", "invalid-file": "File không hợp lệ", "uploads-are-disabled": "Đã khóa lựa chọn tải lên", - "upload-error": "Lỗi tải lên : %1", "signature-too-long": "Chứ ký không được dài quá %1 ký tự", "cant-chat-with-yourself": "Bạn không thể chat với chính bạn!", "chat-restricted": "Người dùng này đã bật chế độ hạn chế tin nhắn chat. Bạn phải được anh/cô ta follow thì mới có thể gởi tin nhắn đến họ được.", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "Hệ thống tín nhiệm đã bị vô hiệu hóa.", "downvoting-disabled": "Downvote đã bị tắt", "not-enough-reputation-to-downvote": "Bạn không có đủ phiếu tín nhiệm để downvote bài này", "not-enough-reputation-to-flag": "Bạn không đủ tín nhiệm để đánh dấu bài viết này", "reload-failed": "NodeBB gặp lỗi trong khi tải lại: \"%1\". NodeBB sẽ tiếp tục hoạt động với dữ liệu trước đó, tuy nhiên bạn nên tháo gỡ những gì bạn vừa thực hiện trước khi tải lại.", - "registration-error": "Quá trình đăng kí bị lỗi" + "registration-error": "Lỗi đăng kí", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/vi/global.json b/public/language/vi/global.json index 1943d6c722..a7dc6ce134 100644 --- a/public/language/vi/global.json +++ b/public/language/vi/global.json @@ -3,9 +3,10 @@ "search": "Tìm kiếm", "buttons.close": "Đóng lại", "403.title": "Từ chối truy cập", - "403.message": "Có vẻ như bạn đang cố vào một trang mà bạn không có quyền truy cập. Bạn nên thử đăng nhập để truy cập ", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "Không tìm thấy", - "404.message": "Có vẻ bạn đang cố vào một trang không tồn tại. Hãy trở lại trang chủ", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "Lỗi nội bộ", "500.message": "Úi chà! Có vẻ như có trục trặc rồi!", "register": "Đăng ký", @@ -26,6 +27,7 @@ "header.tags": "Tags", "header.popular": "Nổi bật", "header.users": "Số người dùng", + "header.groups": "Groups", "header.chats": "Phần Chat", "header.notifications": "Thông báo", "header.search": "Tìm kiếm", @@ -73,5 +75,7 @@ "updated.title": "Cập nhật diễn đàn", "updated.message": "Diễn đàn đã được cập nhật bản mới nhất. Click vào đây để tải lại trang.", "privacy": "Quyền riêng tư", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "Xóa hết" } \ No newline at end of file diff --git a/public/language/vi/groups.json b/public/language/vi/groups.json index fcead5ed63..511c942133 100644 --- a/public/language/vi/groups.json +++ b/public/language/vi/groups.json @@ -1,8 +1,34 @@ { "groups": "Nhóm", "view_group": "Xem nhóm", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "Thông tin nhóm", "details.members": "Danh sách thành viên", + "details.pending": "Pending Members", "details.has_no_posts": "Nhóm thành viên này chưa viết bài viết nào.", - "details.latest_posts": "Bài mới nhất" + "details.latest_posts": "Bài mới nhất", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/vi/login.json b/public/language/vi/login.json index 0190bd059e..4ae9230b8a 100644 --- a/public/language/vi/login.json +++ b/public/language/vi/login.json @@ -1,5 +1,7 @@ { - "username": "Tên người dùng / Email", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "Ghi nhớ tôi?", "forgot_password": "Quên mật khẩu?", "alternative_logins": "Đăng nhập bằng tên khác", diff --git a/public/language/vi/notifications.json b/public/language/vi/notifications.json index 2c3be42609..d218247ba7 100644 --- a/public/language/vi/notifications.json +++ b/public/language/vi/notifications.json @@ -2,6 +2,7 @@ "title": "Thông báo", "no_notifs": "Bạn không có thông báo nào mới", "see_all": "Xem tất cả thông báo", + "mark_all_read": "Đánh dấu đã xem tất cả thông báo", "back_to_home": "Quay lại %1", "outgoing_link": "Liên kết ngoài", "outgoing_link_message": "Bạn đang rời khỏi %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 đã theo dõi bạn.", "email-confirmed": "Đã xác nhận email", "email-confirmed-message": "Cảm ơn bạn đã xác nhận địa chỉ email của bạn. Tài khoản của bạn đã được kích hoạt đầy đủ.", - "email-confirm-error": "Đã có lỗi xảy ra...", "email-confirm-error-message": "Đã có lỗi khi xác nhận địa chỉ email. Có thể đoạn mã không đúng hoặc đã hết hạn.", "email-confirm-sent": "Email xác nhận đã gửi." } \ No newline at end of file diff --git a/public/language/vi/pages.json b/public/language/vi/pages.json index 697490930b..153a1f31d8 100644 --- a/public/language/vi/pages.json +++ b/public/language/vi/pages.json @@ -11,6 +11,7 @@ "user.followers": "Người đang theo dõi %1", "user.posts": "Các bài được %1 viết", "user.topics": "Các chủ đề được %1 tạo", + "user.groups": "%1's Groups", "user.favourites": "Các bài gửi yêu thích của %1", "user.settings": "Thiết lập cho người dùng", "maintenance.text": "%1 đang được bảo trì. Xin vui lòng quay lại sau.", diff --git a/public/language/vi/recent.json b/public/language/vi/recent.json index 32dc489353..b97df0e137 100644 --- a/public/language/vi/recent.json +++ b/public/language/vi/recent.json @@ -5,5 +5,15 @@ "month": "Tháng", "year": "Năm", "alltime": "Tất cả thời gian", - "no_recent_topics": "Không có chủ đề nào gần đây" + "no_recent_topics": "Không có chủ đề nào gần đây", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/vi/reset_password.json b/public/language/vi/reset_password.json index edc196ba6c..32db56aab3 100644 --- a/public/language/vi/reset_password.json +++ b/public/language/vi/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "Xin hãy nhập địa chỉ email của bạn và chúng tôi sẽ gửi một email hướng dẫn cách thiết lập lại tài khoản cho bạn", "enter_email_address": "Nhập địa chỉ Email", "password_reset_sent": "Đã gửi mật khẩu được thiết lập lại", - "invalid_email": "Email không đúng / Email không tồn tại!" + "invalid_email": "Email không đúng / Email không tồn tại!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/vi/search.json b/public/language/vi/search.json index 323dea6a5e..c9c176ba74 100644 --- a/public/language/vi/search.json +++ b/public/language/vi/search.json @@ -1,4 +1,40 @@ { "results_matching": "%1 kết quả(s) trùng với \"%2\", (%3 giây)", - "no-matches": "Không tìm thấy bài viết nào" + "no-matches": "No matches found", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/vi/tags.json b/public/language/vi/tags.json index 80954cface..68f5639c02 100644 --- a/public/language/vi/tags.json +++ b/public/language/vi/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Không có bài viết nào với thẻ này.", "tags": "Thẻ", - "enter_tags_here": "Nhập tên thẻ ở đây. Nhấn enter sau mỗi thẻ.", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "Tên thẻ...", "no_tags": "Chưa có thẻ nào." } \ No newline at end of file diff --git a/public/language/vi/topic.json b/public/language/vi/topic.json index 7b4889c474..8c9f8cdfce 100644 --- a/public/language/vi/topic.json +++ b/public/language/vi/topic.json @@ -12,6 +12,7 @@ "notify_me": "Được thông báo khi có trả lời mới trong chủ đề này", "quote": "Trích dẫn", "reply": "Trả lời", + "guest-login-reply": "Log in to reply", "edit": "Chỉnh sửa", "delete": "Xóa", "purge": "Xóa hẳn", @@ -74,6 +75,7 @@ "fork_no_pids": "Chưa chọn bài gửi nào!", "fork_success": "Tạo bản sao thành công! Nhấn vào đây để chuyển tới chủ đề vừa tạo.", "composer.title_placeholder": "Nhập tiêu đề cho chủ đề của bạn tại đây...", + "composer.handle_placeholder": "Name", "composer.discard": "Loại bỏ", "composer.submit": "Gửi", "composer.replying_to": "Đang trả lời %1", @@ -92,5 +94,6 @@ "sort_by": "Sắp xếp theo", "oldest_to_newest": "Cũ đến mới", "newest_to_oldest": "Mới đến cũ", - "most_votes": "Bình chọn nhiều nhất" + "most_votes": "Bình chọn nhiều nhất", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/vi/user.json b/public/language/vi/user.json index 0b02dad0b6..a9ee90df9f 100644 --- a/public/language/vi/user.json +++ b/public/language/vi/user.json @@ -2,6 +2,8 @@ "banned": "Bị cấm", "offline": "Offline", "username": "Tên truy cập", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Email", "confirm_email": "Xác nhận email", "delete_account": "Xóa tài khoản", @@ -16,6 +18,7 @@ "profile_views": "Khung hiển thị hồ sơ", "reputation": "Mức uy tín", "favourites": "Yêu thích", + "watched": "Watched", "followers": "Số người theo dõi", "following": "Đang theo dõi", "signature": "Chữ ký", @@ -56,10 +59,12 @@ "digest_weekly": "Hàng tuần", "digest_monthly": "Hàng tháng", "send_chat_notifications": "Gửi một email nếu có tin nhắn chat mới đến và tôi không online", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "Người dùng này hiện chưa có ai theo dõi :(", "follows_no_one": "Người dùng này hiện chưa theo dõi ai :(", "has_no_posts": "Người dùng này chưa viết bài nào", "has_no_topics": "Người dùng này chưa tạo một chủ đề nào", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "Ẩn Email", "hidden": "Đã ẩn", "paginate_description": "Phân trang cho chủ đề và bài viết thay vì cuộn liên tục", diff --git a/public/language/vi/users.json b/public/language/vi/users.json index d75e6a6e01..5e08193fd4 100644 --- a/public/language/vi/users.json +++ b/public/language/vi/users.json @@ -5,5 +5,8 @@ "search": "Tìm kiếm", "enter_username": "Gõ tên người dùng để tìm kiếm", "load_more": "Tải thêm", - "users-found-search-took": "%1 tài khoản(s) tìm thấy! Tìm trong %2 mili giây." + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/language/zh_CN/category.json b/public/language/zh_CN/category.json index 933e12e3e1..1d5d4fb2a5 100644 --- a/public/language/zh_CN/category.json +++ b/public/language/zh_CN/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "新主题", + "guest-login-post": "登陆后发表", "no_topics": "此版块还没有任何内容。
赶紧来发帖吧!", "browsing": "正在浏览", "no_replies": "尚无回复", diff --git a/public/language/zh_CN/email.json b/public/language/zh_CN/email.json index c641c408f0..9f0316ce3b 100644 --- a/public/language/zh_CN/email.json +++ b/public/language/zh_CN/email.json @@ -1,14 +1,17 @@ { - "password-reset-requested": "密码重设申请 - %1!", + "password-reset-requested": "密码重置申请 - %1!", "welcome-to": "欢迎来到 %1", "greeting_no_name": "您好", "greeting_with_name": "%1,您好", - "welcome.text1": "谢谢您使用 %1 注册帐户!", - "welcome.text2": "如需完全激活您的帐户,我们需要校验您注册的电子邮箱地址。", + "welcome.text1": "谢谢您注册 %1 帐户!", + "welcome.text2": "需要在校验您注册时填写的电子邮箱地址后,才能全面激活您的帐户。", "welcome.cta": "点击这里确认您的电子邮箱地址", - "reset.text1": "我们收到了重置您密码的申请,可能因为您忘记了密码。如果不是,请忽略这封邮件。", + "reset.text1": "我们收到了重置您帐户密码的申请,可能是因为您遗忘了密码。如果不是,请忽略这封邮件。", "reset.text2": "如需继续重置密码,请点击下面的链接:", - "reset.cta": "点击这里重设您的密码", + "reset.cta": "点击这里重置您的密码", + "reset.notify.subject": "更改密码成功", + "reset.notify.text1": "我们注意到你在 %1 上,成功修改了你的密码。", + "reset.notify.text2": "如果你没有授权此操作,请立即联系管理员。", "digest.notifications": "您有来自 %1 的未读通知:", "digest.latest_topics": "来自 %1 的最新主题", "digest.cta": "点击这里访问 %1", @@ -17,6 +20,8 @@ "notif.chat.subject": "收到来自 %1 的新聊天消息", "notif.chat.cta": "点击这里恢复会话", "notif.chat.unsub.info": "根据您的订阅设置,为您发送此聊天提醒。", + "notif.post.cta": "点击这里阅读全主题。", + "notif.post.unsub.info": "根据您的订阅设置,为您发送此回帖提醒。", "test.text1": "这是一封测试邮件,用来验证 NodeBB 的邮件配置是否设置正确。", "unsub.cta": "点击这里修改这些设置", "closing": "谢谢!" diff --git a/public/language/zh_CN/error.json b/public/language/zh_CN/error.json index af566e4dd6..b156a96793 100644 --- a/public/language/zh_CN/error.json +++ b/public/language/zh_CN/error.json @@ -2,7 +2,7 @@ "invalid-data": "无效数据", "not-logged-in": "您还没有登陆。", "account-locked": "您的帐号已被临时锁定", - "search-requires-login": "搜索功能仅限会员使用!请登录或注册!", + "search-requires-login": "搜索功能仅限会员使用!请先登录或者注册!", "invalid-cid": "无效版块 ID", "invalid-tid": "无效主题 ID", "invalid-pid": "无效帖子 ID", @@ -15,9 +15,12 @@ "invalid-username-or-password": "请确认用户名和密码", "invalid-search-term": "无效的搜索关键字", "invalid-pagination-value": "无效页码", - "username-taken": "用户名已注册", - "email-taken": "电子邮箱已注册", + "username-taken": "用户名已被占用", + "email-taken": "电子邮箱已被占用", "email-not-confirmed": "您的电子邮箱尚未确认,请点击这里确认您的电子邮箱。", + "email-not-confirmed-chat": "在确认您的邮箱之前,您不能使用聊天功能", + "no-email-to-confirm": "本论坛需要电子邮箱确认,请点击这里输入一个电子邮箱地址", + "email-confirm-failed": "我们无法确认您的电子邮箱,请重试", "username-too-short": "用户名太短", "username-too-long": "用户名太长", "user-banned": "用户已禁止", @@ -32,21 +35,29 @@ "no-emailers-configured": "未加载任何电子邮箱插件,无法发送测试邮件", "category-disabled": "版块已禁用", "topic-locked": "主题已锁定", + "post-edit-duration-expired": "您只能在发表后 %1 秒内修改内容", "still-uploading": "请等待上传完成", "content-too-short": "请再输入一些内容,帖子至少要有 %1 个字符。", + "content-too-long": "请输入更短的发帖。发帖字数不能超过 %1 个字符。", "title-too-short": "请再输入一些内容,标题至少要有 %1 个字符。", "title-too-long": "请输入更短的标题。不超过 %1 字。", "too-many-posts": "发帖间隔至少要 %1 秒 - 请稍候再发帖", "too-many-posts-newbie": "作为新用户,您必须每隔 %1 秒才能发帖一次,直到您有 %2 点威望为止 —— 请稍候再发帖", + "tag-too-short": "标签长度过短,标签长度至少为 %1 个字符", + "tag-too-long": "标签长度过长,标签长度至多为 %1 个字符", "file-too-big": "文件不能超过 %1k 字节 - 请上传更小的文件", "cant-vote-self-post": "您不能给自己的帖子投票。", "already-favourited": "您已收藏该帖", "already-unfavourited": "您已取消收藏此帖", "cant-ban-other-admins": "您不能禁止其他管理员!", - "invalid-image-type": "无效图片类型", + "invalid-image-type": "无效的图像类型。允许的类型有:%1", + "invalid-image-extension": "无效的图像扩展", + "invalid-file-type": "无效文件格式,允许的格式有:%1", "group-name-too-short": "用户组名称太短", "group-already-exists": "用户组已存在", "group-name-change-not-allowed": "不允许更改用户组名称", + "group-already-member": "您已是此小组成员", + "group-needs-owner": "此小组需要至少一名组长", "post-already-deleted": "此帖子已被删除", "post-already-restored": "此帖已经恢复", "topic-already-deleted": "此主题已被删除", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "主题缩略图已禁用", "invalid-file": "无效文件", "uploads-are-disabled": "上传已禁用", - "upload-error": "上传错误:%1", "signature-too-long": "抱歉,您的签名不能超过 %1 个字符。", "cant-chat-with-yourself": "您不能和自己聊天!", "chat-restricted": "此用户限制了他的聊天消息。必须他先关注您,您才能和他聊天。", + "too-many-messages": "您发送了太多消息,请稍等片刻。", "reputation-system-disabled": "威望系统已禁用。", "downvoting-disabled": "反对功能已禁用", "not-enough-reputation-to-downvote": "您还没有足够的威望为此帖扣分", "not-enough-reputation-to-flag": "您没有足够的威望标记此帖", "reload-failed": "NodeBB 重新加载时遇到问题: \"%1\"。NodeBB 会继续给已存在的客户端组件服务,虽然您应该撤销在重新加载前执行的操作。", - "registration-error": "注册错误" + "registration-error": "注册错误", + "parse-error": "解析服务器响应时出错", + "wrong-login-type-email": "请输入您的电子邮箱地址登录", + "wrong-login-type-username": "请输入您的用户名登录" } \ No newline at end of file diff --git a/public/language/zh_CN/global.json b/public/language/zh_CN/global.json index 49076958b2..ede930cbbf 100644 --- a/public/language/zh_CN/global.json +++ b/public/language/zh_CN/global.json @@ -3,9 +3,10 @@ "search": "搜索", "buttons.close": "关闭", "403.title": "禁止访问", - "403.message": "您无权访问此页。也许您应该试试登录帐户?", + "403.message": "您遇到了没有权限访问的页面。", + "403.login": "或许您应该 试试登入?", "404.title": "未找到", - "404.message": "您似乎打开了一个不存在的页面。返回主页。", + "404.message": "您遇到了不存在的页面。返回首页。", "500.title": "内部错误。", "500.message": "哎呀!看来是哪里出错了!", "register": "注册", @@ -26,6 +27,7 @@ "header.tags": "话题", "header.popular": "热门", "header.users": "会员", + "header.groups": "小组", "header.chats": "聊天", "header.notifications": "通知", "header.search": "搜索", @@ -73,5 +75,7 @@ "updated.title": "论坛已更新", "updated.message": "论坛已更新到最新版本。点这里刷新页面。", "privacy": "隐私", + "follow": "关注", + "unfollow": "取消关注", "delete_all": "全部删除" } \ No newline at end of file diff --git a/public/language/zh_CN/groups.json b/public/language/zh_CN/groups.json index 6857f8543a..e2fc6cdf7f 100644 --- a/public/language/zh_CN/groups.json +++ b/public/language/zh_CN/groups.json @@ -1,8 +1,34 @@ { "groups": "用户组", "view_group": "查看用户组", + "owner": "用户组组长", + "new_group": "创建新用户组", + "no_groups_found": "还没有用户组", + "pending.accept": "接受", + "pending.reject": "取消", + "cover-instructions": "拖放照片,拖动位置,然后点击 保存", + "cover-change": "变更", + "cover-save": "保存", + "cover-saving": "正在保存", "details.title": "用户组详情", "details.members": "会员列表", + "details.pending": "预备成员", "details.has_no_posts": "此用户组的会员尚未发表任何帖子。", - "details.latest_posts": "最新帖子" + "details.latest_posts": "最新帖子", + "details.private": "私有", + "details.grant": "授予/取消所有权", + "details.kick": "踢", + "details.owner_options": "用户组管理", + "details.group_name": "用户组名", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "更改图标", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "隐藏", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "用户组信息已更新", + "event.deleted": "用户组 \"%1\" 已被删除" } \ No newline at end of file diff --git a/public/language/zh_CN/login.json b/public/language/zh_CN/login.json index 49cf1cc83f..b6d1c9926e 100644 --- a/public/language/zh_CN/login.json +++ b/public/language/zh_CN/login.json @@ -1,5 +1,7 @@ { - "username": "用户名/电子邮箱", + "username-email": "Username / Email", + "username": "用户名", + "email": "邮件", "remember_me": "记住我?", "forgot_password": "忘记密码?", "alternative_logins": "使用合作网站帐号登录", diff --git a/public/language/zh_CN/notifications.json b/public/language/zh_CN/notifications.json index b48aa7378a..f20ee0f1e4 100644 --- a/public/language/zh_CN/notifications.json +++ b/public/language/zh_CN/notifications.json @@ -2,6 +2,7 @@ "title": "通知", "no_notifs": "您没有新的通知", "see_all": "查看全部通知", + "mark_all_read": "标记全部为已读", "back_to_home": "返回 %1", "outgoing_link": "站外链接", "outgoing_link_message": "您正在离开 %1。", @@ -21,7 +22,6 @@ "user_started_following_you": "%1关注了您。", "email-confirmed": "电子邮箱已确认", "email-confirmed-message": "感谢您验证您的电子邮箱。您的帐户现已全面激活。", - "email-confirm-error": "出错了.……", "email-confirm-error-message": "验证您电子邮箱地址时出现了问题。可能是因为验证码无效或已过期。", "email-confirm-sent": "确认邮件已发送。" } \ No newline at end of file diff --git a/public/language/zh_CN/pages.json b/public/language/zh_CN/pages.json index 924e8bdfa4..6fde75dfe5 100644 --- a/public/language/zh_CN/pages.json +++ b/public/language/zh_CN/pages.json @@ -11,6 +11,7 @@ "user.followers": "关注 %1 的人", "user.posts": "%1 发布的帖子", "user.topics": "%1 创建的主题", + "user.groups": "%1 的用户组", "user.favourites": "%1 收藏的帖子", "user.settings": "用户设置", "maintenance.text": "%1 正在进行维护。请稍后再来。", diff --git a/public/language/zh_CN/recent.json b/public/language/zh_CN/recent.json index 6b6df56f05..c37b2c0557 100644 --- a/public/language/zh_CN/recent.json +++ b/public/language/zh_CN/recent.json @@ -1,9 +1,19 @@ { "title": "最新", - "day": "今日", - "week": "本周", - "month": "本月", - "year": "本年", - "alltime": "有史以来", - "no_recent_topics": "无最新主题。" + "day": "24小时新帖热榜", + "week": "7天新帖热榜", + "month": "月度热帖榜", + "year": "年度热帖榜", + "alltime": "总热帖榜", + "no_recent_topics": "暂无主题。", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "这是个新主题。", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "点击这里重新加载" } \ No newline at end of file diff --git a/public/language/zh_CN/reset_password.json b/public/language/zh_CN/reset_password.json index 701651dfb6..9b0ca29dbe 100644 --- a/public/language/zh_CN/reset_password.json +++ b/public/language/zh_CN/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "请输入您的电子邮箱地址,我们会发送一份邮件指导您重置密码。", "enter_email_address": "输入邮箱地址", "password_reset_sent": "密码重置邮件已发送。", - "invalid_email": "无效的电子邮箱/电子邮箱不存在!" + "invalid_email": "无效的电子邮箱/电子邮箱不存在!", + "password_too_short": "密码太短,请选择其他密码。", + "passwords_do_not_match": "您输入两个密码不一致。" } \ No newline at end of file diff --git a/public/language/zh_CN/search.json b/public/language/zh_CN/search.json index 3d8460e57b..68799a19f9 100644 --- a/public/language/zh_CN/search.json +++ b/public/language/zh_CN/search.json @@ -1,4 +1,40 @@ { "results_matching": "共 %1 条结果匹配 \"%2\",(耗时 %3 秒)", - "no-matches": "没有找到帖子" + "no-matches": "无匹配结果", + "in": "在", + "by": "-", + "titles": "标题", + "titles-posts": "标题和回帖", + "posted-by": "发表", + "in-categories": "在版面", + "search-child-categories": "搜索子版面", + "reply-count": "回复数", + "at-least": "至少", + "at-most": "至多", + "post-time": "发帖时间", + "newer-than": "晚于", + "older-than": "早于", + "any-date": "任何日期", + "yesterday": "昨天", + "one-week": "一周", + "two-weeks": "两周", + "one-month": "一个月", + "three-months": "三个月", + "six-months": "六个月", + "one-year": "一年", + "sort-by": "排序", + "last-reply-time": "最后回复时间", + "topic-title": "主题标题", + "number-of-replies": "回帖数", + "number-of-views": "查看数", + "topic-start-date": "主题开始日期", + "username": "用户名", + "category": "版面", + "descending": "逆序", + "ascending": "顺序", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/zh_CN/tags.json b/public/language/zh_CN/tags.json index d237ecc9fb..a50705d3d6 100644 --- a/public/language/zh_CN/tags.json +++ b/public/language/zh_CN/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "此话题还没有主题帖。", "tags": "话题", - "enter_tags_here": "在此输入话题。每输入一个话题按一次回车。", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "输入话题...", "no_tags": "尚无话题。" } \ No newline at end of file diff --git a/public/language/zh_CN/topic.json b/public/language/zh_CN/topic.json index 2c53daa026..bd20fbdabc 100644 --- a/public/language/zh_CN/topic.json +++ b/public/language/zh_CN/topic.json @@ -12,6 +12,7 @@ "notify_me": "此主题有新回复时通知我", "quote": "引用", "reply": "回复", + "guest-login-reply": "Log in to reply", "edit": "编辑", "delete": "删除", "purge": "清除", @@ -74,6 +75,7 @@ "fork_no_pids": "未选中帖子!", "fork_success": "成功分割主题! 点这里跳转到分割后的主题。", "composer.title_placeholder": "在此输入您主题的标题...", + "composer.handle_placeholder": "姓名", "composer.discard": "撤销", "composer.submit": "提交", "composer.replying_to": "正在回复 %1", @@ -92,5 +94,6 @@ "sort_by": "排序", "oldest_to_newest": "从旧到新", "newest_to_oldest": "从新到旧", - "most_votes": "最多投票" + "most_votes": "最多投票", + "most_posts": "最多发表" } \ No newline at end of file diff --git a/public/language/zh_CN/user.json b/public/language/zh_CN/user.json index 5871c8d4bb..6c360a4d4e 100644 --- a/public/language/zh_CN/user.json +++ b/public/language/zh_CN/user.json @@ -2,6 +2,8 @@ "banned": "禁止", "offline": "离线", "username": "用户名", + "joindate": "注册日期", + "postcount": "发帖数", "email": "电子邮件", "confirm_email": "确认电子邮箱", "delete_account": "删除帐号", @@ -16,6 +18,7 @@ "profile_views": "资料浏览", "reputation": "威望", "favourites": "收藏的帖子", + "watched": "已订阅", "followers": "粉丝", "following": "关注", "signature": "签名档", @@ -46,7 +49,7 @@ "image_spec": "您只能上传 PNG, JPG 或者 GIF 图片文件", "max": "最大", "settings": "设置", - "show_email": "公开我的电子邮箱", + "show_email": "显示我的电子邮箱", "show_fullname": "显示我的全名", "restrict_chats": "只允许我关注的用户给我发送聊天消息", "digest_label": "订阅摘要", @@ -56,10 +59,12 @@ "digest_weekly": "每周", "digest_monthly": "每月", "send_chat_notifications": "当我不在线,并受到新的聊天消息时给我发邮件", + "send_post_notifications": "我订阅的主题有回复时发送邮件", "has_no_follower": "此用户还没有粉丝 :(", "follows_no_one": "此用户尚未关注任何人 :(", "has_no_posts": "此用户尚未发布任何帖子。", "has_no_topics": "此用户还未发布任何主题。", + "has_no_watched_topics": "此用户还未订阅任何主题", "email_hidden": "电子邮箱已隐藏", "hidden": "隐藏", "paginate_description": "分页展示主题和帖子,替代滚动展示。", diff --git a/public/language/zh_CN/users.json b/public/language/zh_CN/users.json index 6ad3fc4c32..ef7d6dd15b 100644 --- a/public/language/zh_CN/users.json +++ b/public/language/zh_CN/users.json @@ -1,9 +1,12 @@ { - "latest_users": "最近访问", + "latest_users": "最新会员", "top_posters": "发帖排行", "most_reputation": "威望排行", "search": "搜索", "enter_username": "输入用户名搜索", "load_more": "加载更多", - "users-found-search-took": "找到 %1 位用户!搜索耗时 %2 毫秒。" + "users-found-search-took": "找到 %1 位用户!搜索耗时 %2 毫秒。", + "filter-by": "过滤选项", + "online-only": "只看在线", + "picture-only": "只看图片" } \ No newline at end of file diff --git a/public/language/zh_TW/category.json b/public/language/zh_TW/category.json index cb21821aab..055d4a70d3 100644 --- a/public/language/zh_TW/category.json +++ b/public/language/zh_TW/category.json @@ -1,5 +1,6 @@ { "new_topic_button": "新主題", + "guest-login-post": "Log in to post", "no_topics": "這個版面還沒有任何內容。
趕緊來發文章吧!", "browsing": "正在瀏覽", "no_replies": "還沒有回覆", diff --git a/public/language/zh_TW/email.json b/public/language/zh_TW/email.json index 24615b384e..1062070b96 100644 --- a/public/language/zh_TW/email.json +++ b/public/language/zh_TW/email.json @@ -9,6 +9,9 @@ "reset.text1": "我們收到一個重設密碼的請求,你忘掉了密碼嗎?如果不是,請忽略這封郵件。", "reset.text2": "要繼續重置密碼,請點擊以下鏈接:", "reset.cta": "點擊這裡重置密碼", + "reset.notify.subject": "Password successfully changed", + "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", + "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", "digest.notifications": "你有來自$1的未讀通知:", "digest.latest_topics": "來自%1的最新話題", "digest.cta": "點擊這裡訪問%1", @@ -17,6 +20,8 @@ "notif.chat.subject": "收到來自$1的聊天消息", "notif.chat.cta": "點擊此處繼續對話", "notif.chat.unsub.info": "本聊天通知按您的訂閱設置發送給您。", + "notif.post.cta": "Click here to read the full topic", + "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", "test.text1": "這是一個測試電郵,以確認您的NodeBB郵件器設置正確。", "unsub.cta": "點擊這裡更改這些設置", "closing": "謝謝!" diff --git a/public/language/zh_TW/error.json b/public/language/zh_TW/error.json index 7dd02dd9f6..9efb1e5ec1 100644 --- a/public/language/zh_TW/error.json +++ b/public/language/zh_TW/error.json @@ -18,6 +18,9 @@ "username-taken": "該使用者名稱已被使用", "email-taken": "該信箱已被使用", "email-not-confirmed": "您的電郵尚未得到確認,請點擊此處確認您的電子郵件。", + "email-not-confirmed-chat": "You are unable to chat until your email is confirmed", + "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", + "email-confirm-failed": "We could not confirm your email, please try again later.", "username-too-short": "用戶名太短", "username-too-long": "用戶名太長", "user-banned": "該使用者已被停用", @@ -32,21 +35,29 @@ "no-emailers-configured": "未加載電郵插件,所以無法發送測試郵件", "category-disabled": "該類別已被關閉", "topic-locked": "該主題已被鎖定", + "post-edit-duration-expired": "You are only allowed to edit posts for %1 seconds after posting", "still-uploading": "請等待上傳完成。", "content-too-short": "請輸入一個較長的帖子。 帖子需至少有 %1 個字。", + "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 characters.", "title-too-short": "請輸入一個較長的標題。 標題需至少有 %1 個字。", "title-too-long": "請輸入一個較短的主題名稱。 標題不能超過 %1 個字元。", "too-many-posts": "你必須間隔 %1 秒後才能發表文章-請稍後", "too-many-posts-newbie": "新用戶在贏得%2信譽前,每隔%1秒才能發佈新文章-請稍後再試", + "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 characters", + "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 characters", "file-too-big": "允許的最大檔案大小是 %1 kbs-請上傳一個較小的檔案", "cant-vote-self-post": "你不能對自己的文章說讚!", "already-favourited": "你已經收藏了這篇文章", "already-unfavourited": "你已放棄收藏這篇文章", "cant-ban-other-admins": "你不能禁用其他管理員!", - "invalid-image-type": "無效的圖像類型", + "invalid-image-type": "Invalid image type. Allowed types are: %1", + "invalid-image-extension": "Invalid image extension", + "invalid-file-type": "Invalid file type. Allowed types are: %1", "group-name-too-short": "群組名稱太短了", "group-already-exists": "群組名稱已存在", "group-name-change-not-allowed": "變更群組名稱不被允許", + "group-already-member": "You are already part of this group", + "group-needs-owner": "This group requires at least one owner", "post-already-deleted": "此文章已經被刪除", "post-already-restored": "此文章已還原", "topic-already-deleted": "此主題已經被刪除", @@ -54,14 +65,17 @@ "topic-thumbnails-are-disabled": "禁用主題縮圖", "invalid-file": "無效的檔案", "uploads-are-disabled": "上傳功能被停用", - "upload-error": "上傳錯誤:%1", "signature-too-long": "對不起,簽名檔長度不能超過 %1 字元!", "cant-chat-with-yourself": "你不能與自己聊天!", "chat-restricted": "此用戶已限制了他的聊天功能。你要在他關注你之後,才能跟他聊天", + "too-many-messages": "You have sent too many messages, please wait awhile.", "reputation-system-disabled": "信譽系統已停用。", "downvoting-disabled": "Downvoting已停用", "not-enough-reputation-to-downvote": "你沒有足夠的信譽downvote這個帖子", "not-enough-reputation-to-flag": "你沒有足夠的信譽來舉報這個帖子", "reload-failed": "NodeBB重載\"%1\"時遇到了問題。 NodeBB將繼續提供現有的客戶端資源,但請你撤消重載前的動作。", - "registration-error": "註冊錯誤" + "registration-error": "註冊錯誤", + "parse-error": "Something went wrong while parsing server response", + "wrong-login-type-email": "Please use your email to login", + "wrong-login-type-username": "Please use your username to login" } \ No newline at end of file diff --git a/public/language/zh_TW/global.json b/public/language/zh_TW/global.json index 6b3d22cdda..3dc23be905 100644 --- a/public/language/zh_TW/global.json +++ b/public/language/zh_TW/global.json @@ -3,9 +3,10 @@ "search": "搜索", "buttons.close": "關閉", "403.title": "禁止存取", - "403.message": "你沒有該頁面的存取權限,可能是因為你尚未登錄。", + "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.login": "Perhaps you should try logging in?", "404.title": "無法找到該頁", - "404.message": "你所查找的頁面並不存在,返回主頁。", + "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", "500.title": "內部錯誤", "500.message": "不好!看來是哪裡出錯了!", "register": "注冊", @@ -26,6 +27,7 @@ "header.tags": "標籤", "header.popular": "熱門", "header.users": "用戶", + "header.groups": "Groups", "header.chats": "聊天", "header.notifications": "通知", "header.search": "搜索", @@ -73,5 +75,7 @@ "updated.title": "討論區更新完畢", "updated.message": "這個討論區最近被更新至最新的版本. 按此來重整這個頁面", "privacy": "隱私", + "follow": "Follow", + "unfollow": "Unfollow", "delete_all": "全部刪除" } \ No newline at end of file diff --git a/public/language/zh_TW/groups.json b/public/language/zh_TW/groups.json index 83ea1f5e9b..97401e5d7d 100644 --- a/public/language/zh_TW/groups.json +++ b/public/language/zh_TW/groups.json @@ -1,8 +1,34 @@ { "groups": "群組", "view_group": "查看群組", + "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", + "pending.accept": "Accept", + "pending.reject": "Reject", + "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", + "cover-change": "Change", + "cover-save": "Save", + "cover-saving": "Saving", "details.title": "群組詳細信息", "details.members": "成員列表", + "details.pending": "Pending Members", "details.has_no_posts": "這個群組的成員還未發出任何帖子。", - "details.latest_posts": "最新帖子" + "details.latest_posts": "最新帖子", + "details.private": "Private", + "details.grant": "Grant/Rescind Ownership", + "details.kick": "Kick", + "details.owner_options": "Group Administration", + "details.group_name": "Group Name", + "details.description": "Description", + "details.badge_preview": "Badge Preview", + "details.change_icon": "Change Icon", + "details.change_colour": "Change Colour", + "details.badge_text": "Badge Text", + "details.userTitleEnabled": "Show Badge", + "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.hidden": "Hidden", + "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/language/zh_TW/login.json b/public/language/zh_TW/login.json index 3f0879b49d..f93286b21a 100644 --- a/public/language/zh_TW/login.json +++ b/public/language/zh_TW/login.json @@ -1,5 +1,7 @@ { - "username": "使用者名稱 / 電郵", + "username-email": "Username / Email", + "username": "Username", + "email": "Email", "remember_me": "記住我?", "forgot_password": "忘記密碼?", "alternative_logins": "其他登錄方式", diff --git a/public/language/zh_TW/notifications.json b/public/language/zh_TW/notifications.json index f0023a1d49..6736c06584 100644 --- a/public/language/zh_TW/notifications.json +++ b/public/language/zh_TW/notifications.json @@ -2,6 +2,7 @@ "title": "通知", "no_notifs": "沒有新消息", "see_all": "顯示全部", + "mark_all_read": "Mark all notifications read", "back_to_home": "返回%1", "outgoing_link": "站外鏈接", "outgoing_link_message": "你正在離開 %1.", @@ -21,7 +22,6 @@ "user_started_following_you": "%1 開始關注你。", "email-confirmed": "已確認電郵", "email-confirmed-message": "感謝您驗證您的電郵。您的帳戶現已全面啟用。", - "email-confirm-error": "發生錯誤...", "email-confirm-error-message": "驗證您的電郵地址時出現問題。也許啟動碼無效或已過期。", "email-confirm-sent": "已發送確認電郵。" } \ No newline at end of file diff --git a/public/language/zh_TW/pages.json b/public/language/zh_TW/pages.json index deaa502ffe..bcb655c3e2 100644 --- a/public/language/zh_TW/pages.json +++ b/public/language/zh_TW/pages.json @@ -11,6 +11,7 @@ "user.followers": "People who Follow %1", "user.posts": "文章由 %1 所張貼", "user.topics": "主題由 %1 所創建", + "user.groups": "%1's Groups", "user.favourites": "%1's 最喜愛的文章", "user.settings": "使用者設定", "maintenance.text": "%1目前正在進行維修。請稍後再來。", diff --git a/public/language/zh_TW/recent.json b/public/language/zh_TW/recent.json index 295c9fea8d..476bc25844 100644 --- a/public/language/zh_TW/recent.json +++ b/public/language/zh_TW/recent.json @@ -5,5 +5,15 @@ "month": "本月", "year": "全年", "alltime": "所有時間", - "no_recent_topics": "最近沒新主題." + "no_recent_topics": "最近沒新主題.", + "no_popular_topics": "There are no popular topics.", + "there-is-a-new-topic": "There is a new topic.", + "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", + "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", + "there-are-new-topics": "There are %1 new topics.", + "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", + "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", + "there-is-a-new-post": "There is a new post.", + "there-are-new-posts": "There are %1 new posts.", + "click-here-to-reload": "Click here to reload." } \ No newline at end of file diff --git a/public/language/zh_TW/reset_password.json b/public/language/zh_TW/reset_password.json index b4c454d4da..9f0ab67aa1 100644 --- a/public/language/zh_TW/reset_password.json +++ b/public/language/zh_TW/reset_password.json @@ -10,5 +10,7 @@ "enter_email": "請輸入您的Email地址,我們會發送郵件告訴您如何重設密碼。", "enter_email_address": "輸入郵箱地址", "password_reset_sent": "密碼重設郵件已發送。", - "invalid_email": "非法的郵箱地址/郵箱不存在!" + "invalid_email": "非法的郵箱地址/郵箱不存在!", + "password_too_short": "The password entered is too short, please pick a different password.", + "passwords_do_not_match": "The two passwords you've entered do not match." } \ No newline at end of file diff --git a/public/language/zh_TW/search.json b/public/language/zh_TW/search.json index 31d8078405..66fee75c1a 100644 --- a/public/language/zh_TW/search.json +++ b/public/language/zh_TW/search.json @@ -1,4 +1,40 @@ { "results_matching": "有%1個跟\"%2\"匹配的結果(%3秒)", - "no-matches": "沒有發現帖子" + "no-matches": "沒有找到匹配的主題", + "in": "In", + "by": "By", + "titles": "Titles", + "titles-posts": "Titles and Posts", + "posted-by": "Posted by", + "in-categories": "In Categories", + "search-child-categories": "Search child categories", + "reply-count": "Reply Count", + "at-least": "At least", + "at-most": "At most", + "post-time": "Post time", + "newer-than": "Newer than", + "older-than": "Older than", + "any-date": "Any date", + "yesterday": "Yesterday", + "one-week": "One week", + "two-weeks": "Two weeks", + "one-month": "One month", + "three-months": "Three months", + "six-months": "Six months", + "one-year": "One year", + "sort-by": "Sort by", + "last-reply-time": "Last reply time", + "topic-title": "Topic title", + "number-of-replies": "Number of replies", + "number-of-views": "Number of views", + "topic-start-date": "Topic start date", + "username": "Username", + "category": "Category", + "descending": "In descending order", + "ascending": "In ascending order", + "save-preferences": "Save preferences", + "clear-preferences": "Clear preferences", + "search-preferences-saved": "Search preferences saved", + "search-preferences-cleared": "Search preferences cleared", + "show-results-as": "Show results as" } \ No newline at end of file diff --git a/public/language/zh_TW/tags.json b/public/language/zh_TW/tags.json index 25985a9391..dc5c1601ba 100644 --- a/public/language/zh_TW/tags.json +++ b/public/language/zh_TW/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "沒有此標籤的主題。", "tags": "標籤", - "enter_tags_here": "在這裡輸入標籤。每個標籤後按Enter。", + "enter_tags_here": "Enter tags here. %1-%2 characters. Press enter after each tag.", "enter_tags_here_short": "輸入標籤...", "no_tags": "還沒有標籤呢。" } \ No newline at end of file diff --git a/public/language/zh_TW/topic.json b/public/language/zh_TW/topic.json index 65ca02fb5a..41edd8828f 100644 --- a/public/language/zh_TW/topic.json +++ b/public/language/zh_TW/topic.json @@ -12,6 +12,7 @@ "notify_me": "該主題有新回覆時通知我", "quote": "引用", "reply": "回覆", + "guest-login-reply": "Log in to reply", "edit": "編輯", "delete": "刪除", "purge": "清除", @@ -74,6 +75,7 @@ "fork_no_pids": "尚未選擇文章!", "fork_success": "成功分叉成新的主題!點擊這裡進入新的主題。", "composer.title_placeholder": "輸入標題...", + "composer.handle_placeholder": "Name", "composer.discard": "放棄", "composer.submit": "發表", "composer.replying_to": "回覆給 %1", @@ -92,5 +94,6 @@ "sort_by": "排序方式", "oldest_to_newest": "從舊到新", "newest_to_oldest": "從新到舊", - "most_votes": "得票最多" + "most_votes": "得票最多", + "most_posts": "Most posts" } \ No newline at end of file diff --git a/public/language/zh_TW/user.json b/public/language/zh_TW/user.json index 54ac9405a4..1752a45979 100644 --- a/public/language/zh_TW/user.json +++ b/public/language/zh_TW/user.json @@ -2,6 +2,8 @@ "banned": "封鎖", "offline": "下線", "username": "使用者名稱", + "joindate": "Join Date", + "postcount": "Post Count", "email": "Email", "confirm_email": "確認電郵", "delete_account": "刪除帳戶", @@ -16,6 +18,7 @@ "profile_views": "資料被查看", "reputation": "聲望", "favourites": "我的最愛", + "watched": "Watched", "followers": "跟隨者", "following": "正在關注", "signature": "簽名", @@ -56,10 +59,12 @@ "digest_weekly": "每週", "digest_monthly": "每月", "send_chat_notifications": "如果有新的聊天消息而我不在線,發送郵件給我", + "send_post_notifications": "Send an email when replies are made to topics I am subscribed to", "has_no_follower": "該用戶還沒有被任何人關注。", "follows_no_one": "該用戶還沒有關注過任何人。", "has_no_posts": "尚未有任何貼文.", "has_no_topics": "這位使用者尚未發表任何主題。", + "has_no_watched_topics": "This user didn't watch any topics yet.", "email_hidden": "郵箱被隱藏", "hidden": "隱藏", "paginate_description": "使用分頁取代瀏覽載入文章模式.", diff --git a/public/language/zh_TW/users.json b/public/language/zh_TW/users.json index e90a437fe5..b3c22fb165 100644 --- a/public/language/zh_TW/users.json +++ b/public/language/zh_TW/users.json @@ -5,5 +5,8 @@ "search": "搜尋", "enter_username": "輸入想找的使用者帳號", "load_more": "載入更多", - "users-found-search-took": "找到%1個用戶!搜索時間%2毫秒。" + "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "filter-by": "Filter By", + "online-only": "Online only", + "picture-only": "Picture only" } \ No newline at end of file diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 867434fe46..57e46db038 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -2,6 +2,7 @@ @import "./mixins"; @import "./general/dashboard"; +@import "./general/navigation"; @import "./manage/groups"; @import "./manage/tags"; @import "./manage/flags"; @@ -9,6 +10,7 @@ @import "./appearance/customise"; @import "./appearance/themes"; @import "./extend/plugins"; +@import "./extend/rewards"; @import "./advanced/database"; @import "./modules/alerts"; @@ -168,7 +170,6 @@ border-radius: 3px; box-shadow: 0px 1px 3px 0px rgba(165, 165, 165, 0.75); margin-bottom: 20px; - max-width: 1000px; &.panel-default .panel-heading { background: #fefefe; @@ -183,15 +184,18 @@ .box-header-font } - #user_dropdown { - padding: 6px; - - img { - width: 30px; - height: 30px; - vertical-align: -88%; - margin-right: 5px; - } + #user_label { + a { + padding-top: 13px; + padding-bottom: 13px; + + img { + width: 24px; + height: 24px; + border-radius: 50%; + border: 1px solid #454; + } + } } .icon-container { @@ -213,25 +217,40 @@ } } - .navbar { - padding: 0 5px; + .navbar-static-top, .navbar-fixed-top { + box-shadow: 0px -3px 12px rgba(0, 0, 0, 0.5); + } - .nav-home a, .nav-home a:hover { - width: 30px; - height: 30px; - padding: 5px; - text-align: center; - margin-top: 10px; - background: #DDD; + .navbar-header > .navbar-toggle { + margin-right: 8px; + } - i { - color: black; - font-size: 17px; - } - } + .navbar-nav { + margin-top: 0; + margin-bottom: 0; + + >li { + >a { + padding-top: 15px; + padding-bottom: 15px; + } + + >a:hover, >a:focus { + color: @gray-dark; + background-color: @gray-light; + } + + >#reconnect { + color: @gray-light; + } + + >#reconnect:focus, >#reconnect:hover { + color: @gray-light; + background-color: transparent; + } + } + } - } - #acp-search { input { background: black; @@ -249,7 +268,7 @@ width: 200px; } } - + .search-match { font-weight: 700; color: black; @@ -261,24 +280,18 @@ } } -.table-reordering { - tr:hover { - cursor: move; - } +// Allowing text to the right of an image-type brand +// See: https://github.com/twbs/bootstrap/commit/8e2348e9eda51296eb680192379ab37f10355ca3 +.navbar-brand > img { + display: inline-block; } -.category-preview { - width: 100%; - height: 100px; - text-align: center; - color: white; - margin-top: 0; - - .icon { - width: 30px; - height: 30px; - line-height: 40px; - display: inline-block; - margin: 35px 5px 0 5px; +@media (min-width: 1200px) { + .acp-sidebar { + position: fixed; + top: 70px; + right: 15px; + width: initial; + max-width: calc( ~"(100% - 200px)/4" ); } -} \ No newline at end of file +} diff --git a/public/less/admin/advanced/database.less b/public/less/admin/advanced/database.less index c81ef613cc..3799ced20a 100644 --- a/public/less/admin/advanced/database.less +++ b/public/less/admin/advanced/database.less @@ -3,4 +3,21 @@ display:inline-block; width:220px; } -} \ No newline at end of file +} + + + + + + + + + + + + + + + + + diff --git a/public/less/admin/bootstrap/.csscomb.json b/public/less/admin/bootstrap/.csscomb.json index 8456e41df2..40695a4782 100644 --- a/public/less/admin/bootstrap/.csscomb.json +++ b/public/less/admin/bootstrap/.csscomb.json @@ -1,16 +1,21 @@ { "always-semicolon": true, "block-indent": 2, - "colon-space": [0, 1], "color-case": "lower", "color-shorthand": true, - "combinator-space": true, "element-case": "lower", "eof-newline": true, "leading-zero": false, "remove-empty-rulesets": true, - "rule-indent": 2, - "stick-brace": " ", + "space-after-colon": 1, + "space-after-combinator": 1, + "space-before-selector-delimiter": 0, + "space-between-declarations": "\n", + "space-after-opening-brace": "\n", + "space-before-closing-brace": "\n", + "space-before-colon": 0, + "space-before-combinator": 1, + "space-before-opening-brace": 1, "strip-spaces": true, "unitless-zero": true, "vendor-prefix-align": true, @@ -109,6 +114,8 @@ "list-style-type", "list-style-image", "pointer-events", + "-ms-touch-action", + "touch-action", "cursor", "visibility", "zoom", diff --git a/public/less/admin/bootstrap/badges.less b/public/less/admin/bootstrap/badges.less index 20624f30db..b27c405a30 100644 --- a/public/less/admin/bootstrap/badges.less +++ b/public/less/admin/bootstrap/badges.less @@ -44,11 +44,17 @@ } // Account for badges in navs - a.list-group-item.active > &, + .list-group-item.active > &, .nav-pills > .active > a > & { color: @badge-active-color; background-color: @badge-active-bg; } + .list-group-item > & { + float: right; + } + .list-group-item > & + & { + margin-right: 5px; + } .nav-pills > li > a > & { margin-left: 3px; } diff --git a/public/less/admin/bootstrap/button-groups.less b/public/less/admin/bootstrap/button-groups.less index 7021ecd171..f84febbd56 100644 --- a/public/less/admin/bootstrap/button-groups.less +++ b/public/less/admin/bootstrap/button-groups.less @@ -18,10 +18,6 @@ &.active { z-index: 2; } - &:focus { - // Remove focus outline when dropdown JS adds it after closing the menu - outline: 0; - } } } @@ -198,7 +194,6 @@ } - // Justified button groups // ---------------------- @@ -226,15 +221,23 @@ // Checkbox and radio options // // In order to support the browser's form validation feedback, powered by the -// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot -// use `display: none;` or `visibility: hidden;` as that also hides the popover. +// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use +// `display: none;` or `visibility: hidden;` as that also hides the popover. +// Simply visually hiding the inputs via `opacity` would leave them clickable in +// certain cases which is prevented by using `clip` and `pointer-events`. // This way, we ensure a DOM element is visible to position the popover from. // -// See https://github.com/twbs/bootstrap/pull/12794 for more. +// See https://github.com/twbs/bootstrap/pull/12794 and +// https://github.com/twbs/bootstrap/pull/14559 for more information. -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - position: absolute; - z-index: -1; - .opacity(0); +[data-toggle="buttons"] { + > .btn, + > .btn-group > .btn { + input[type="radio"], + input[type="checkbox"] { + position: absolute; + clip: rect(0,0,0,0); + pointer-events: none; + } + } } diff --git a/public/less/admin/bootstrap/buttons.less b/public/less/admin/bootstrap/buttons.less index 492bdc65ae..40553c6386 100644 --- a/public/less/admin/bootstrap/buttons.less +++ b/public/less/admin/bootstrap/buttons.less @@ -12,6 +12,7 @@ font-weight: @btn-font-weight; text-align: center; vertical-align: middle; + touch-action: manipulation; cursor: pointer; background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 border: 1px solid transparent; @@ -22,13 +23,15 @@ &, &:active, &.active { - &:focus { + &:focus, + &.focus { .tab-focus(); } } &:hover, - &:focus { + &:focus, + &.focus { color: @btn-default-color; text-decoration: none; } @@ -43,7 +46,7 @@ &.disabled, &[disabled], fieldset[disabled] & { - cursor: not-allowed; + cursor: @cursor-disabled; pointer-events: none; // Future-proof disabling of clicks .opacity(.65); .box-shadow(none); @@ -85,11 +88,11 @@ .btn-link { color: @link-color; font-weight: normal; - cursor: pointer; border-radius: 0; &, &:active, + &.active, &[disabled], fieldset[disabled] & { background-color: transparent; diff --git a/public/less/admin/bootstrap/carousel.less b/public/less/admin/bootstrap/carousel.less index 1644ddf7f5..5724d8a56e 100644 --- a/public/less/admin/bootstrap/carousel.less +++ b/public/less/admin/bootstrap/carousel.less @@ -24,6 +24,30 @@ &:extend(.img-responsive); line-height: 1; } + + // WebKit CSS3 transforms for supported devices + @media all and (transform-3d), (-webkit-transform-3d) { + transition: transform .6s ease-in-out; + backface-visibility: hidden; + perspective: 1000; + + &.next, + &.active.right { + transform: translate3d(100%, 0, 0); + left: 0; + } + &.prev, + &.active.left { + transform: translate3d(-100%, 0, 0); + left: 0; + } + &.next.left, + &.prev.right, + &.active { + transform: translate3d(0, 0, 0); + left: 0; + } + } } > .active, diff --git a/public/less/admin/bootstrap/code.less b/public/less/admin/bootstrap/code.less index baa13df613..a08b4d48c4 100644 --- a/public/less/admin/bootstrap/code.less +++ b/public/less/admin/bootstrap/code.less @@ -32,6 +32,7 @@ kbd { kbd { padding: 0; font-size: 100%; + font-weight: bold; box-shadow: none; } } diff --git a/public/less/admin/bootstrap/component-animations.less b/public/less/admin/bootstrap/component-animations.less index 9400a0d32f..967715d98b 100644 --- a/public/less/admin/bootstrap/component-animations.less +++ b/public/less/admin/bootstrap/component-animations.less @@ -17,8 +17,9 @@ .collapse { display: none; + visibility: hidden; - &.in { display: block; } + &.in { display: block; visibility: visible; } tr&.in { display: table-row; } tbody&.in { display: table-row-group; } } @@ -27,5 +28,7 @@ position: relative; height: 0; overflow: hidden; - .transition(height .35s ease); + .transition-property(~"height, visibility"); + .transition-duration(.35s); + .transition-timing-function(ease); } diff --git a/public/less/admin/bootstrap/dropdowns.less b/public/less/admin/bootstrap/dropdowns.less index 3eb7fc05c4..84a48c1413 100644 --- a/public/less/admin/bootstrap/dropdowns.less +++ b/public/less/admin/bootstrap/dropdowns.less @@ -103,16 +103,15 @@ &:focus { color: @dropdown-link-disabled-color; } -} -// Nuke hover/focus effects -.dropdown-menu > .disabled > a { + + // Nuke hover/focus effects &:hover, &:focus { text-decoration: none; background-color: transparent; background-image: none; // Remove CSS gradient .reset-filter(); - cursor: not-allowed; + cursor: @cursor-disabled; } } @@ -212,4 +211,3 @@ } } } - diff --git a/public/less/admin/bootstrap/forms.less b/public/less/admin/bootstrap/forms.less index 2c5e9bfa93..1bcc2b6b97 100644 --- a/public/less/admin/bootstrap/forms.less +++ b/public/less/admin/bootstrap/forms.less @@ -141,7 +141,7 @@ output { &[disabled], &[readonly], fieldset[disabled] & { - cursor: not-allowed; + cursor: @cursor-disabled; background-color: @input-bg-disabled; opacity: 1; // iOS fix for unreadable disabled content } @@ -168,23 +168,27 @@ input[type="search"] { // Special styles for iOS temporal inputs // // In Mobile Safari, setting `display: block` on temporal inputs causes the -// text within the input to become vertically misaligned. -// As a workaround, we set a pixel line-height that matches the -// given height of the input. Since this fucks up everything else, we have to -// appropriately reset it for Internet Explorer and the size variations. - -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - line-height: @input-height-base; - // IE8+ misaligns the text within date inputs, so we reset - line-height: @line-height-base ~"\0"; - - &.input-sm { +// text within the input to become vertically misaligned. As a workaround, we +// set a pixel line-height that matches the given height of the input, but only +// for Safari. + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: @input-height-base; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm { line-height: @input-height-small; } - &.input-lg { + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg { line-height: @input-height-large; } } @@ -208,11 +212,11 @@ input[type="month"] { .checkbox { position: relative; display: block; - min-height: @line-height-computed; // clear the floating input if there is no label text margin-top: 10px; margin-bottom: 10px; label { + min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text padding-left: 20px; margin-bottom: 0; font-weight: normal; @@ -258,7 +262,7 @@ input[type="checkbox"] { &[disabled], &.disabled, fieldset[disabled] & { - cursor: not-allowed; + cursor: @cursor-disabled; } } // These classes are used directly on

`.
 @font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
@@ -181,13 +184,20 @@
 @input-color:                    @gray;
 //** `` border color
 @input-border:                   #ccc;
-//** `` border radius
+
+// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
+//** Default `.form-control` border radius
 @input-border-radius:            @border-radius-base;
+//** Large `.form-control` border radius
+@input-border-radius-large:      @border-radius-large;
+//** Small `.form-control` border radius
+@input-border-radius-small:      @border-radius-small;
+
 //** Border color for inputs on focus
 @input-border-focus:             #66afe9;
 
 //** Placeholder text color
-@input-color-placeholder:        @gray-light;
+@input-color-placeholder:        #999;
 
 //** Default `.form-control` height
 @input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
@@ -204,6 +214,9 @@
 //** Border color for textual input addons
 @input-group-addon-border-color: @input-border;
 
+//** Disabled cursor for form controls and buttons.
+@cursor-disabled:                not-allowed;
+
 
 //== Dropdowns
 //
@@ -252,8 +265,7 @@
 @zindex-popover:           1060;
 @zindex-tooltip:           1070;
 @zindex-navbar-fixed:      1030;
-@zindex-modal-background:  1040;
-@zindex-modal:             1050;
+@zindex-modal:             1040;
 
 
 //== Media queries breakpoints
@@ -302,10 +314,10 @@
 //** Number of columns in the grid.
 @grid-columns:              12;
 //** Padding between columns. Gets divided in half for the left and right.
-@grid-gutter-width:         15px;
+@grid-gutter-width:         30px;
 // Navbar collapse
 //** Point at which the navbar becomes uncollapsed.
-@grid-float-breakpoint:     0;
+@grid-float-breakpoint:     @screen-sm-min;
 //** Point at which the navbar begins collapsing.
 @grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
 
@@ -315,17 +327,17 @@
 //## Define the maximum width of `.container` for different screen sizes.
 
 // Small screen / tablet
-@container-tablet:             ((720px + @grid-gutter-width));
+@container-tablet:             (720px + @grid-gutter-width);
 //** For `@screen-sm-min` and up.
 @container-sm:                 @container-tablet;
 
 // Medium screen / desktop
-@container-desktop:            ((940px + @grid-gutter-width));
+@container-desktop:            (940px + @grid-gutter-width);
 //** For `@screen-md-min` and up.
 @container-md:                 @container-desktop;
 
 // Large screen / wide desktop
-@container-large-desktop:      ((1140px + @grid-gutter-width));
+@container-large-desktop:      (1140px + @grid-gutter-width);
 //** For `@screen-lg-min` and up.
 @container-lg:                 @container-large-desktop;
 
@@ -368,12 +380,12 @@
 
 // Inverted navbar
 // Reset inverted navbar basics
-@navbar-inverse-color:                      @gray-light;
+@navbar-inverse-color:                      lighten(@gray-light, 15%);
 @navbar-inverse-bg:                         #222;
 @navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
 
 // Inverted navbar links
-@navbar-inverse-link-color:                 @gray-light;
+@navbar-inverse-link-color:                 lighten(@gray-light, 15%);
 @navbar-inverse-link-hover-color:           #fff;
 @navbar-inverse-link-hover-bg:              transparent;
 @navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
@@ -403,8 +415,6 @@
 @nav-disabled-link-color:                   @gray-light;
 @nav-disabled-link-hover-color:             @gray-light;
 
-@nav-open-link-hover-color:                 #fff;
-
 //== Tabs
 @nav-tabs-border-color:                     #ddd;
 
@@ -529,7 +539,7 @@
 //** Popover arrow width
 @popover-arrow-width:                 10px;
 //** Popover arrow color
-@popover-arrow-color:                 #fff;
+@popover-arrow-color:                 @popover-bg;
 
 //** Popover outer arrow width
 @popover-arrow-outer-width:           (@popover-arrow-width + 1);
@@ -628,6 +638,8 @@
 @progress-bg:                 #f5f5f5;
 //** Progress bar text color
 @progress-bar-color:          #fff;
+//** Variable for setting rounded corners on progress bar.
+@progress-border-radius:      @border-radius-base;
 
 //** Default progress bar color
 @progress-bar-bg:             @brand-primary;
@@ -842,5 +854,3 @@
 @dl-horizontal-offset:        @component-offset-horizontal;
 //** Horizontal line color.
 @hr-border:                   @gray-lighter;
-
-
diff --git a/public/less/admin/extend/plugins.less b/public/less/admin/extend/plugins.less
index cc2c264920..b07d9f16b9 100644
--- a/public/less/admin/extend/plugins.less
+++ b/public/less/admin/extend/plugins.less
@@ -18,4 +18,10 @@
 			font-size: 12px;
 		}
 	}
+
+	.plugin-list.ui-sortable {
+		li {
+			.pointer;
+		}
+	}
 }
\ No newline at end of file
diff --git a/public/less/admin/extend/rewards.less b/public/less/admin/extend/rewards.less
new file mode 100644
index 0000000000..2dc84b5bc3
--- /dev/null
+++ b/public/less/admin/extend/rewards.less
@@ -0,0 +1,21 @@
+#rewards {
+	.well, .panel-body {
+		vertical-align: top;
+		min-height: 100px;
+
+		&.pull-right {
+			min-height: 0px;
+		}
+	}
+
+	ul {
+		list-style-type: none;
+		padding: 0px;
+		margin: 0px;
+
+		> li {
+			border-bottom: 1px solid #ddd;
+			margin-bottom: 20px;
+		}
+	}
+}
\ No newline at end of file
diff --git a/public/less/admin/general/navigation.less b/public/less/admin/general/navigation.less
new file mode 100644
index 0000000000..338971b4a1
--- /dev/null
+++ b/public/less/admin/general/navigation.less
@@ -0,0 +1,10 @@
+#navigation {
+	ul {
+		list-style-type: none;
+		padding: 0;
+
+		li {
+			cursor: move;
+		}
+	}
+}
\ No newline at end of file
diff --git a/public/src/admin/advanced/events.js b/public/src/admin/advanced/events.js
new file mode 100644
index 0000000000..9075947d60
--- /dev/null
+++ b/public/src/admin/advanced/events.js
@@ -0,0 +1,41 @@
+"use strict";
+/* global define, socket, app, templates */
+
+
+define('admin/advanced/events', ['forum/infinitescroll'], function(infinitescroll) {
+	var	Events = {};
+
+	Events.init = function() {
+
+		$('[data-action="clear"]').on('click', function() {
+			socket.emit('admin.deleteAllEvents', function(err) {
+				if (err) {
+					return app.alertError(err.message);
+				}
+				$('.events-list').empty();
+			});
+		});
+
+		infinitescroll.init(function(direction) {
+			if (direction < 0 || !$('.events').length) {
+				return;
+			}
+
+			infinitescroll.loadMore('admin.getMoreEvents', $('[data-next]').attr('data-next'), function(data, done) {
+				if (data.events && data.events.length) {
+					templates.parse('admin/advanced/events', 'events', {events: data.events}, function(html) {
+						$('.events-list').append(html);
+						done();
+					});
+
+					$('[data-next]').attr('data-next', data.next);
+				} else {
+					done();
+				}
+			});
+		});
+
+	};
+
+	return Events;
+});
diff --git a/public/src/admin/advanced/logs.js b/public/src/admin/advanced/logs.js
index c44f6bf93f..78581d9cea 100644
--- a/public/src/admin/advanced/logs.js
+++ b/public/src/admin/advanced/logs.js
@@ -1,5 +1,5 @@
 "use strict";
-/* global define, socket */
+/* global define, socket, app */
 
 define('admin/advanced/logs', function() {
 	var	Logs = {};
@@ -28,7 +28,7 @@ define('admin/advanced/logs', function() {
 				case 'clear':
 					socket.emit('admin.logs.clear', function(err) {
 						if (!err) {
-							app.alertSuccess('Logs Cleared!')
+							app.alertSuccess('Logs Cleared!');
 							btnEl.prev().click();
 						}
 					});
diff --git a/public/src/admin/appearance/customise.js b/public/src/admin/appearance/customise.js
index 97dd77290b..a135a240fe 100644
--- a/public/src/admin/appearance/customise.js
+++ b/public/src/admin/appearance/customise.js
@@ -1,5 +1,5 @@
 "use strict";
-/* global define, app, socket */
+/* global ace, define, app, socket */
 
 define('admin/appearance/customise', ['admin/settings'], function(Settings) {
 	var Customise = {};
diff --git a/public/src/admin/appearance/skins.js b/public/src/admin/appearance/skins.js
index 8fd9208c7e..374b88a7b4 100644
--- a/public/src/admin/appearance/skins.js
+++ b/public/src/admin/appearance/skins.js
@@ -1,5 +1,5 @@
 "use strict";
-/* global define, app, socket */
+/* global define, app, socket, templates */
 
 define('admin/appearance/skins', function() {
 	var Skins = {};
@@ -32,12 +32,9 @@ define('admin/appearance/skins', function() {
 					app.alert({
 						alert_id: 'admin:theme',
 						type: 'info',
-						title: 'Theme Changed',
-						message: 'Please restart your NodeBB to fully activate this theme',
-						timeout: 5000,
-						clickfn: function() {
-							socket.emit('admin.restart');
-						}
+						title: 'Skin Updated',
+						message: themeId + ' skin was successfully applied',
+						timeout: 5000
 					});
 				});
 			}
@@ -58,7 +55,8 @@ define('admin/appearance/skins', function() {
 					url: theme.preview,
 					css: theme.cssCdn
 				};
-			})
+			}),
+			showRevert: true
 		}, function(html) {
 			themeContainer.html(html);
 		});
diff --git a/public/src/admin/extend/plugins.js b/public/src/admin/extend/plugins.js
index 66ffc19d7f..e2484b1f07 100644
--- a/public/src/admin/extend/plugins.js
+++ b/public/src/admin/extend/plugins.js
@@ -93,6 +93,38 @@ define('admin/extend/plugins', function() {
 				$(this).toggleClass('hide', pluginId && pluginId.indexOf(term) === -1);
 			});
 		});
+
+		$('#plugin-order').on('click', function() {
+			$('#order-active-plugins-modal').modal('show');
+			socket.emit('admin.plugins.getActive', function(err, activePlugins) {
+				if (err) {
+					return app.alertError(err);
+				}
+				var html = '';
+				activePlugins.forEach(function(plugin) {
+					html += '
  • ' + plugin + '
  • '; + }); + if (!activePlugins.length) { + html = 'No Active Plugins'; + } + $('#order-active-plugins-modal .plugin-list').html(html).sortable(); + }); + }); + + $('#save-plugin-order').on('click', function() { + var plugins = $('#order-active-plugins-modal .plugin-list').children(); + var data = []; + plugins.each(function(index, el) { + data.push({name: $(el).text(), order: index}); + }); + + socket.emit('admin.plugins.orderActivePlugins', data, function(err) { + if (err) { + return app.alertError(err.message); + } + $('#order-active-plugins-modal').modal('hide'); + }); + }); }; function confirmInstall(pluginID, callback) { @@ -112,7 +144,7 @@ define('admin/extend/plugins', function() { socket.emit('admin.plugins.upgrade', { id: pluginID, version: version - }, function(err) { + }, function(err, isActive) { if (err) { return app.alertError(err.message); } @@ -120,6 +152,18 @@ define('admin/extend/plugins', function() { parent.find('.fa-exclamation-triangle').remove(); parent.find('.currentVersion').text(version); btn.remove(); + if (isActive) { + app.alert({ + alert_id: 'plugin_upgraded', + title: 'Plugin Upgraded', + message: 'Please reload your NodeBB to fully upgrade this plugin', + type: 'warning', + timeout: 5000, + clickfn: function() { + socket.emit('admin.reload'); + } + }); + } }); } diff --git a/public/src/admin/extend/rewards.js b/public/src/admin/extend/rewards.js new file mode 100644 index 0000000000..967e098bf7 --- /dev/null +++ b/public/src/admin/extend/rewards.js @@ -0,0 +1,183 @@ +"use strict"; +/* global define, app, ajaxify, socket, templates, bootbox */ + +define('admin/extend/rewards', function() { + var rewards = {}; + + + var available, + active, + conditions, + conditionals; + + rewards.init = function() { + available = JSON.parse(ajaxify.variables.get('rewards')); + active = JSON.parse(ajaxify.variables.get('active')); + conditions = JSON.parse(ajaxify.variables.get('conditions')); + conditionals = JSON.parse(ajaxify.variables.get('conditionals')); + + $('[data-selected]').each(function() { + select($(this)); + }); + + $('#active') + .on('change', '[data-selected]', function() { + update($(this)); + }) + .on('click', '.delete', function() { + var parent = $(this).parents('[data-id]'), + id = parent.attr('data-id'); + + socket.emit('admin.rewards.delete', {id: id}, function(err) { + if (err) { + app.alertError(err.message); + } else { + app.alertSuccess('Successfully deleted reward'); + } + }); + + parent.remove(); + return false; + }) + .on('click', '.toggle', function() { + var btn = $(this), + disabled = btn.html() === 'Enable', + id = $(this).parents('[data-id]').attr('data-id'); + + btn.toggleClass('btn-warning').toggleClass('btn-success').html(disabled ? 'Enable' : 'Disable'); + // send disable api call + return false; + }); + + $('#new').on('click', newReward); + $('#save').on('click', saveRewards); + + populateInputs(); + }; + + function select(el) { + el.val(el.attr('data-selected')); + switch (el.attr('name')) { + case 'rid': + selectReward(el); + break; + } + } + + function update(el) { + el.attr('data-selected', el.val()); + switch (el.attr('name')) { + case 'rid': + selectReward(el); + break; + } + } + + function selectReward(el) { + var parent = el.parents('[data-rid]'), + div = parent.find('.inputs'), + inputs, + html = ''; + + for (var reward in available) { + if (available.hasOwnProperty(reward)) { + if (available[reward].rid === el.attr('data-selected')) { + inputs = available[reward].inputs; + parent.attr('data-rid', available[reward].rid); + break; + } + } + } + + if (!inputs) { + return app.alertError('Illegal reward - no inputs found! ' + el.attr('data-selected')); + } + + inputs.forEach(function(input) { + html += '
    '; + }); + + div.html(html); + } + + function populateInputs() { + $('[data-rid]').each(function(i) { + var div = $(this).find('.inputs'), + rewards = active[i].rewards; + + for (var reward in rewards) { + if (rewards.hasOwnProperty(reward)) { + div.find('[name="' + reward + '"]').val(rewards[reward]); + } + } + }); + } + + function newReward() { + var ul = $('#active'); + + var data = { + active: [{ + disabled: true, + value: '', + claimable: 1, + rid: null, + id: null + }], + conditions: conditions, + conditionals: conditionals, + rewards: available, + }; + + templates.parse('admin/extend/rewards', 'active', data, function(li) { + li = $(li); + ul.append(li); + li.find('select').val(''); + }); + } + + function saveRewards() { + var activeRewards = []; + + $('#active li').each(function() { + var data = {rewards: {}}, + main = $(this).find('form.main').serializeArray(), + rewards = $(this).find('form.rewards').serializeArray(); + + main.forEach(function(obj) { + data[obj.name] = obj.value; + }); + + rewards.forEach(function(obj) { + data.rewards[obj.name] = obj.value; + }); + + data.id = $(this).attr('data-id'); + data.disabled = $(this).find('.toggle').html() === 'Enable'; + + activeRewards.push(data); + }); + + socket.emit('admin.rewards.save', activeRewards, function(err) { + if (err) { + app.alertError(err.message); + } else { + app.alertSuccess('Successfully saved rewards'); + } + }); + } + + return rewards; +}); \ No newline at end of file diff --git a/public/src/admin/extend/widgets.js b/public/src/admin/extend/widgets.js index 1bf4a043ec..b57453ffab 100644 --- a/public/src/admin/extend/widgets.js +++ b/public/src/admin/extend/widgets.js @@ -3,7 +3,7 @@ define('admin/extend/widgets', function() { var Widgets = {}; - + Widgets.init = function() { $('#widgets .nav-pills a').on('click', function(ev) { var $this = $(this); @@ -31,23 +31,25 @@ define('admin/extend/widgets', function() { connectToSortable: ".widget-area" }); - $('#widgets .available-containers .containers > [data-container-html]').draggable({ - helper: function(e) { - var target = $(e.target); - target = target.attr('data-container-html') ? target : target.parents('[data-container-html]'); - - return target.clone().addClass('block').width(target.width()).css('opacity', '0.5'); - }, - distance: 10 - }); + $('#widgets .available-containers .containers > [data-container-html]') + .draggable({ + helper: function(e) { + var target = $(e.target); + target = target.attr('data-container-html') ? target : target.parents('[data-container-html]'); + + return target.clone().addClass('block').width(target.width()).css('opacity', '0.5'); + }, + distance: 10 + }) + .each(function() { + $(this).attr('data-container-html', $(this).attr('data-container-html').replace(/\\\{([\s\S]*?)\\\}/g, '{$1}')); + }); $('#widgets .widget-area').sortable({ update: function (event, ui) { appendToggle(ui.item); }, connectWith: "div" - }).on('click', '.toggle-widget', function() { - $(this).parents('.widget-panel').children('.panel-body').toggleClass('hidden'); }).on('click', '.delete-widget', function() { var panel = $(this).parents('.widget-panel'); @@ -56,8 +58,10 @@ define('admin/extend/widgets', function() { panel.remove(); } }); - }).on('dblclick', '.panel-heading', function() { - $(this).parents('.widget-panel').children('.panel-body').toggleClass('hidden'); + }).on('mouseup', '.panel-heading', function(evt) { + if ( !( $(this).parents('.widget-panel').is('.ui-sortable-helper') || $(evt.target).closest('.delete-widget').length ) ) { + $(this).parents('.widget-panel').children('.panel-body').toggleClass('hidden'); + } }); $('#widgets .save').on('click', saveWidgets); @@ -80,7 +84,14 @@ define('admin/extend/widgets', function() { for (var d in data) { if (data.hasOwnProperty(d)) { if (data[d].name) { - widgetData[data[d].name] = data[d].value; + if (widgetData[data[d].name]) { + if(!Array.isArray(widgetData[data[d].name])) { + widgetData[data[d].name] = [ widgetData[data[d].name] ]; + } + widgetData[data[d].name].push(data[d].value); + }else{ + widgetData[data[d].name] = data[d].value; + } } } } @@ -162,7 +173,7 @@ define('admin/extend/widgets', function() { title.text(title.text() + ' - ' + data.title); } - widget.find('input, textarea').each(function() { + widget.find('input, textarea, select').each(function() { var input = $(this), value = data[input.attr('name')]; diff --git a/public/src/admin/general/dashboard.js b/public/src/admin/general/dashboard.js index f24bd485a0..7a2243465d 100644 --- a/public/src/admin/general/dashboard.js +++ b/public/src/admin/general/dashboard.js @@ -1,5 +1,5 @@ "use strict"; -/*global define, ajaxify, app, socket, bootbox, Chart, RELATIVE_PATH*/ +/*global define, ajaxify, app, socket, utils, bootbox, Chart, RELATIVE_PATH*/ define('admin/general/dashboard', ['semver'], function(semver) { var Admin = {}, diff --git a/public/src/admin/general/navigation.js b/public/src/admin/general/navigation.js new file mode 100644 index 0000000000..9bd684ec80 --- /dev/null +++ b/public/src/admin/general/navigation.js @@ -0,0 +1,91 @@ +"use strict"; +/* global define, app, ajaxify, socket, templates, bootbox, translator */ + +define('admin/general/navigation', function() { + var navigation = {}, + available; + + navigation.init = function() { + available = JSON.parse(ajaxify.variables.get('available')); + + $('#enabled').html(translator.unescape($('#enabled').html())); + translator.translate(translator.unescape($('#available').html()), function(html) { + $('#available').html(html) + .find('li').draggable({ + connectToSortable: '#enabled', + helper: 'clone', + distance: 10, + stop: drop + }); + }); + + $('#enabled') + .on('click', '.delete', remove) + .on('click', '.toggle', toggle) + .sortable() + .droppable({ + accept: $('#available li') + }); + + $('#save').on('click', save); + }; + + function drop(ev, ui) { + var id = ui.helper.attr('data-id'), + el = $('#enabled [data-id="' + id + '"]'), + data = id === 'custom' ? {} : available[id]; + + data.enabled = false; + + templates.parse('admin/general/navigation', 'enabled', {enabled: [data]}, function(li) { + li = $(translator.unescape(li)); + el.after(li); + el.remove(); + }); + } + + function save() { + var nav = []; + + $('#enabled li').each(function() { + var form = $(this).find('form').serializeArray(), + data = {}; + + form.forEach(function(input) { + data[input.name] = translator.escape(input.value); + }); + + available.forEach(function(item) { + if (item.route.match(data.route)) { + data.properties = item.properties; + } + }); + + nav.push(data); + }); + + socket.emit('admin.navigation.save', nav, function(err) { + if (err) { + app.alertError(err.message); + } else { + app.alertSuccess('Successfully saved navigation'); + } + }); + } + + function remove() { + $(this).parents('li').remove(); + return false; + } + + function toggle() { + var btn = $(this), + disabled = btn.html() === 'Enable'; + + btn.toggleClass('btn-warning').toggleClass('btn-success').html(!disabled ? 'Enable' : 'Disable'); + btn.parents('li').find('[name="enabled"]').val(!disabled ? '' : 'on'); + return false; + } + + return navigation; +}); \ No newline at end of file diff --git a/public/src/admin/general/sounds.js b/public/src/admin/general/sounds.js index 9ec9708df5..73899144a0 100644 --- a/public/src/admin/general/sounds.js +++ b/public/src/admin/general/sounds.js @@ -1,5 +1,5 @@ "use strict"; -/* global define, socket */ +/* global app, define, socket */ define('admin/general/sounds', ['sounds', 'settings'], function(Sounds, Settings) { var SoundsAdmin = {}; diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index fd6658fe9c..a5f206ec9b 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -56,11 +56,13 @@ define('admin/manage/categories', function() { name: $('#inputName').val(), description: $('#inputDescription').val(), icon: $('#new-category-modal i').attr('value'), - bgColor: '#0059b2', - color: '#fff', - order: $('#disabled-categories').children().length + 1 + order: $('#active-categories').children().length + 1 }; + saveNew(category); + } + + function saveNew(category) { socket.emit('admin.categories.create', category, function(err, data) { if(err) { return app.alertError(err.message); diff --git a/public/src/admin/manage/flags.js b/public/src/admin/manage/flags.js index c6dc4b11af..880094af20 100644 --- a/public/src/admin/manage/flags.js +++ b/public/src/admin/manage/flags.js @@ -1,12 +1,21 @@ "use strict"; /*global define, socket, app, admin, utils, bootbox, RELATIVE_PATH*/ -define('admin/manage/flags', ['forum/infinitescroll', 'admin/modules/selectable'], function(infinitescroll, selectable) { +define('admin/manage/flags', [ + 'forum/infinitescroll', + 'admin/modules/selectable', + 'autocomplete' +], function(infinitescroll, selectable, autocomplete) { + var Flags = {}; Flags.init = function() { $('.post-container .content img').addClass('img-responsive'); + var params = utils.params(); + $('#flag-sort-by').val(params.sortBy); + autocomplete.user($('#byUsername')); + handleDismiss(); handleDismissAll(); handleDelete(); @@ -69,8 +78,15 @@ define('admin/manage/flags', ['forum/infinitescroll', 'admin/modules/selectable' if (direction < 0 && !$('.flags').length) { return; } + var params = utils.params(); + var sortBy = params.sortBy || 'count'; + var byUsername = params.byUsername || ''; - infinitescroll.loadMore('admin.getMoreFlags', $('[data-next]').attr('data-next'), function(data, done) { + infinitescroll.loadMore('admin.getMoreFlags', { + byUsername: byUsername, + sortBy: sortBy, + after: $('[data-next]').attr('data-next') + }, function(data, done) { if (data.posts && data.posts.length) { infinitescroll.parseAndTranslate('admin/manage/flags', 'posts', {posts: data.posts}, function(html) { $('[data-next]').attr('data-next', data.next); diff --git a/public/src/admin/manage/groups.js b/public/src/admin/manage/groups.js index 61e1e3b0f8..ed8cc59683 100644 --- a/public/src/admin/manage/groups.js +++ b/public/src/admin/manage/groups.js @@ -1,15 +1,14 @@ "use strict"; -/*global define, templates, socket, ajaxify, app, admin, bootbox*/ +/*global define, templates, socket, ajaxify, app, admin, bootbox, utils, config, translator */ define('admin/manage/groups', [ - 'admin/modules/iconSelect', + 'iconSelect', 'admin/modules/colorpicker' ], function(iconSelect, colorpicker) { var Groups = {}; Groups.init = function() { - var yourid = ajaxify.variables.get('yourid'), - createModal = $('#create-modal'), + var createModal = $('#create-modal'), createGroupName = $('#create-group-name'), createModalGo = $('#create-modal-go'), createModalError = $('#create-modal-error'), @@ -49,26 +48,20 @@ define('admin/manage/groups', [ }, errorText; - socket.emit('admin.groups.create', submitObj, function(err, data) { + socket.emit('admin.groups.create', submitObj, function(err) { if (err) { - switch (err) { - case 'group-exists': - errorText = 'Please choose another name

    There seems to be a group with this name already.

    '; - break; - case 'name-too-short': - errorText = 'Please specify a group name

    A group name is required for administrative purposes.

    '; - break; - default: - errorText = 'Uh-Oh

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

    '; - break; + if (err.hasOwnProperty('message') && utils.hasLanguageKey(err.message)) { + translator.translate(err.message, config.defaultLang, function(translated) { + createModalError.html(translated).removeClass('hide'); + }); + } else { + createModalError.html('Uh-Oh

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

    ').removeClass('hide'); } - - createModalError.html(errorText).removeClass('hide'); } else { createModalError.addClass('hide'); createGroupName.val(''); createModal.on('hidden.bs.modal', function() { - ajaxify.go('admin/manage/groups'); + ajaxify.refresh(); }); createModal.modal('hide'); } @@ -102,12 +95,14 @@ define('admin/manage/groups', [ case 'delete': bootbox.confirm('Are you sure you wish to delete this group?', function(confirm) { if (confirm) { - socket.emit('admin.groups.delete', groupName, function(err, data) { + socket.emit('groups.delete', { + groupName: groupName + }, function(err, data) { if(err) { return app.alertError(err.message); } - ajaxify.go('admin/manage/groups'); + ajaxify.refresh(); }); } }); @@ -150,11 +145,11 @@ define('admin/manage/groups', [ var searchText = groupDetailsSearch.val(), foundUser; - socket.emit('admin.user.search', {type: 'username', query:searchText}, function(err, results) { + socket.emit('admin.user.search', {query: searchText}, function(err, results) { if (!err && results && results.users.length > 0) { var numResults = results.users.length, x; - if (numResults > 4) { - numResults = 4; + if (numResults > 20) { + numResults = 20; } groupDetailsSearchResults.empty(); diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js index 75ab7e224c..5909522f8c 100644 --- a/public/src/admin/manage/users.js +++ b/public/src/admin/manage/users.js @@ -1,5 +1,5 @@ "use strict"; -/* global socket, define, templates, bootbox, app, ajaxify, */ +/* global config, socket, define, templates, bootbox, app, ajaxify, */ define('admin/manage/users', ['admin/modules/selectable'], function(selectable) { var Users = {}; @@ -28,7 +28,7 @@ define('admin/manage/users', ['admin/modules/selectable'], function(selectable) } function removeSelected() { - $('#users-container .users-box .selected').remove(); + $('#users-container .users-box .selected').parents('.users-box').remove(); } function done(successMessage, className, flag) { @@ -134,6 +134,19 @@ define('admin/manage/users', ['admin/modules/selectable'], function(selectable) return false; }); + $('.send-validation-email').on('click', function() { + var uids = getSelectedUids(); + if (!uids.length) { + return; + } + socket.emit('admin.user.sendValidationEmail', uids, function(err) { + if (err) { + return app.alertError(err.message); + } + app.alertSuccess('[[notifications:email-confirm-sent]]'); + }); + }); + $('.password-reset-email').on('click', function() { var uids = getSelectedUids(); if (!uids.length) { @@ -201,7 +214,7 @@ define('admin/manage/users', ['admin/modules/selectable'], function(selectable) } $('#create-modal').modal('hide'); $('#create-modal').on('hidden.bs.modal', function() { - ajaxify.go('admin/users'); + ajaxify.refresh(); }); app.alertSuccess('User created!'); }); @@ -237,7 +250,7 @@ define('admin/manage/users', ['admin/modules/selectable'], function(selectable) timeoutId = setTimeout(function() { $('.fa-spinner').removeClass('hidden'); - socket.emit('admin.user.search', {type: type, query: $this.val()}, function(err, data) { + socket.emit('admin.user.search', {searchBy: [type], query: $this.val()}, function(err, data) { if (err) { return app.alertError(err.message); } diff --git a/public/src/admin/modules/search.js b/public/src/admin/modules/search.js index b7cd131925..781f4ade9e 100644 --- a/public/src/admin/modules/search.js +++ b/public/src/admin/modules/search.js @@ -23,7 +23,7 @@ define(function() { setupACPSearch(); }); - };; + }; function setupACPSearch() { var menu = $('#acp-search .dropdown-menu'), @@ -103,11 +103,17 @@ define(function() { if (menuItems.html() !== '') { menuItems.append(''); + } else { + menuItems.append('
  • No results...
  • '); } } if (value.length > 0) { - menuItems.append('
  • Search the forum for ' + value + '
  • '); + if (config.searchEnabled) { + menuItems.append('
  • Search the forum for ' + value + '
  • '); + } else if (value.length < 3) { + menuItems.append('
  • Type more to see results...
  • '); + } } else { menuItems.append('
  • Start typing to see results...
  • '); } diff --git a/public/src/admin/settings.js b/public/src/admin/settings.js index 3dca037514..98ab422b14 100644 --- a/public/src/admin/settings.js +++ b/public/src/admin/settings.js @@ -86,14 +86,19 @@ define('admin/settings', ['uploader', 'sounds'], function(uploader, sounds) { $('button[data-action="email.test"]').off('click').on('click', function() { socket.emit('admin.email.test', function(err) { - app.alert({ - alert_id: 'test_email_sent', - type: !err ? 'info' : 'danger', - title: 'Test Email Sent', - message: err ? err.message : '', - timeout: 2500 - }); + if (err) { + return app.alertError(err.message); + } + app.alertSuccess('Test Email Sent'); + }); + return false; + }); + + $('#clear-sitemap-cache').off('click').on('click', function() { + socket.emit('admin.settings.clearSitemapCache', function() { + app.alertSuccess('Sitemap Cache Cleared!'); }); + return false; }); if (typeof callback === 'function') { diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 32f5a8bfbd..f5cca44ccf 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -3,308 +3,288 @@ var ajaxify = ajaxify || {}; $(document).ready(function() { - require(['templates'], function (templatesModule) { - /*global app, templates, utils, socket, translator, config, RELATIVE_PATH*/ - var location = document.location || window.location, - rootUrl = location.protocol + '//' + (location.hostname || location.host) + (location.port ? ':' + location.port : ''), - apiXHR = null; + /*global app, templates, utils, socket, translator, config, RELATIVE_PATH*/ + var location = document.location || window.location, + rootUrl = location.protocol + '//' + (location.hostname || location.host) + (location.port ? ':' + location.port : ''), + apiXHR = null; - window.onpopstate = function (event) { - if (event !== null && event.state && event.state.url !== undefined && !ajaxify.initialLoad) { - ajaxify.go(event.state.url, function() { - $(window).trigger('action:popstate', {url: event.state.url}); - }, true); - } - }; - - ajaxify.currentPage = null; - ajaxify.initialLoad = false; - - - function onAjaxError(err, url, callback, quiet) { - var data = err.data, - textStatus = err.textStatus; - - if (data) { - if (data.status === 403 || data.status === 404 || data.status === 500) { - $('#footer, #content').removeClass('hide').addClass('ajaxifying'); - return renderTemplate(url, data.status.toString(), data.responseJSON, (new Date()).getTime(), callback); - } else if (data.status === 401) { - app.alertError('[[global:please_log_in]]'); - app.previousUrl = url; - return ajaxify.go('login'); - } else if (data.status === 302) { - return ajaxify.go(data.responseJSON.slice(1), callback, quiet); - } - } else if (textStatus !== "abort") { - app.alertError(data.responseJSON.error); - } + $(window).on('popstate', function (ev) { + ev = ev.originalEvent; + + if (ev !== null && ev.state && ev.state.url !== undefined) { + ajaxify.go(ev.state.url, function() { + $(window).trigger('action:popstate', {url: ev.state.url}); + }, true); } + }); - ajaxify.go = function (url, callback, quiet) { - // "quiet": If set to true, will not call pushState - app.enterRoom(''); + ajaxify.currentPage = null; - $(window).off('scroll'); + ajaxify.go = function (url, callback, quiet) { + if (ajaxify.handleACPRedirect(url)) { + return true; + } else if (ajaxify.handleNonAPIRoutes(url)) { + return true; + } - $(window).trigger('action:ajaxify.start', {url: url}); + app.enterRoom(''); - if ($('#content').hasClass('ajaxifying') && apiXHR) { - apiXHR.abort(); - } + $(window).off('scroll'); + + if ($('#content').hasClass('ajaxifying') && apiXHR) { + apiXHR.abort(); + } - // Remove relative path and trailing slash - url = ajaxify.removeRelativePath(url.replace(/\/$/, '')); + url = ajaxify.start(url, quiet); - var tpl_url = ajaxify.getTemplateMapping(url); + $('#footer, #content').removeClass('hide').addClass('ajaxifying'); - var hash = ''; - if(ajaxify.initialLoad) { - hash = window.location.hash ? window.location.hash : ''; + ajaxify.variables.flush(); + ajaxify.loadData(url, function(err, data) { + if (err) { + return onAjaxError(err, url, callback, quiet); } - if (ajaxify.isTemplateAvailable(tpl_url) && !!!templatesModule.config.force_refresh[tpl_url]) { - ajaxify.currentPage = url; + app.template = data.template.name; - if (window.history && window.history.pushState) { - window.history[!quiet ? 'pushState' : 'replaceState']({ - url: url + hash - }, url, RELATIVE_PATH + '/' + url + hash); - } + translator.load(config.defaultLang, data.template.name); - translator.load(config.defaultLang, tpl_url); + renderTemplate(url, data.template.name, data, callback); - $('#footer, #content').removeClass('hide').addClass('ajaxifying'); + require(['search'], function(search) { + search.topicDOM.end(); + }); + }); - var startTime = (new Date()).getTime(); + return true; + }; - ajaxify.variables.flush(); - ajaxify.loadData(url, function(err, data) { - if (err) { - return onAjaxError(err, url, callback, quiet); - } - - renderTemplate(url, tpl_url, data, startTime, callback); + ajaxify.handleACPRedirect = function(url) { + // If ajaxifying into an admin route from regular site, do a cold load. + url = ajaxify.removeRelativePath(url.replace(/\/$/, '')); + if (url.indexOf('admin') === 0 && window.location.pathname.indexOf(RELATIVE_PATH + '/admin') !== 0) { + window.open(RELATIVE_PATH + '/' + url, '_blank'); + return true; + } + return false; + }; + + ajaxify.handleNonAPIRoutes = function(url) { + url = ajaxify.removeRelativePath(url.replace(/\/$/, '')); + if (url.indexOf('uploads') === 0) { + window.open(RELATIVE_PATH + '/' + url, '_blank'); + return true; + } + return false; + }; - require(['search'], function(search) { - search.topicDOM.end(); - }); - }); + ajaxify.start = function(url, quiet, search) { + url = ajaxify.removeRelativePath(url.replace(/\/$/, '')); + var hash = window.location.hash; + search = search || ''; - return true; - } + $(window).trigger('action:ajaxify.start', {url: url}); - return false; - }; + if (!window.location.pathname.match(/\/(403|404)$/g)) { + app.previousUrl = window.location.href; + } - function renderTemplate(url, tpl_url, data, startTime, callback) { - var animationDuration = parseFloat($('#content').css('transition-duration')) || 0.2; - $(window).trigger('action:ajaxify.loadingTemplates', {}); + ajaxify.currentPage = url; - templates.parse(tpl_url, data, function(template) { - translator.translate(template, function(translatedTemplate) { - setTimeout(function() { - $('#content').html(translatedTemplate); + if (window.history && window.history.pushState) { + window.history[!quiet ? 'pushState' : 'replaceState']({ + url: url + search + hash + }, url, RELATIVE_PATH + '/' + url + search + hash); + } + return url; + }; - ajaxify.variables.parse(); + function onAjaxError(err, url, callback, quiet) { + var data = err.data, + textStatus = err.textStatus; - ajaxify.widgets.render(tpl_url, url, function() { - $(window).trigger('action:ajaxify.end', {url: url}); - }); + if (data) { + var status = parseInt(data.status, 10); - $(window).trigger('action:ajaxify.contentLoaded', {url: url}); + if (status === 403 || status === 404 || status === 500) { + $('#footer, #content').removeClass('hide').addClass('ajaxifying'); + return renderTemplate(url, status.toString(), data.responseJSON, (new Date()).getTime(), callback); + } else if (status === 401) { + app.alertError('[[global:please_log_in]]'); + app.previousUrl = url; + return ajaxify.go('login'); + } else if (status === 302) { + if (data.responseJSON.external) { + window.location.href = data.responseJSON.external; + } else if (typeof data.responseJSON === 'string') { + ajaxify.go(data.responseJSON.slice(1), callback, quiet); + } + } + } else if (textStatus !== 'abort') { + app.alertError(data.responseJSON.error); + } + } - ajaxify.loadScript(tpl_url); + function renderTemplate(url, tpl_url, data, callback) { + $(window).trigger('action:ajaxify.loadingTemplates', {}); - if (typeof callback === 'function') { - callback(); - } + templates.parse(tpl_url, data, function(template) { + translator.translate(template, function(translatedTemplate) { + $('#content').html(translatedTemplate); - app.processPage(); + ajaxify.end(url, tpl_url); - $('#content, #footer').removeClass('ajaxifying'); - ajaxify.initialLoad = false; + if (typeof callback === 'function') { + callback(); + } - app.refreshTitle(url); - }, animationDuration * 1000 - ((new Date()).getTime() - startTime)); + $('#content, #footer').removeClass('ajaxifying'); - }); + app.refreshTitle(url); }); + }); + } - } + ajaxify.end = function(url, tpl_url) { + ajaxify.variables.parse(); - ajaxify.removeRelativePath = function(url) { - if (url.indexOf(RELATIVE_PATH.slice(1)) === 0) { - url = url.slice(RELATIVE_PATH.length); - } - return url; - }; + ajaxify.loadScript(tpl_url); - ajaxify.refresh = function() { - ajaxify.go(ajaxify.currentPage); - }; - - ajaxify.loadScript = function(tpl_url, callback) { - var location = !app.inAdmin ? 'forum/' : ''; + ajaxify.widgets.render(tpl_url, url, function() { + $(window).trigger('action:ajaxify.end', {url: url}); + }); - require([location + tpl_url], function(script) { - if (script && script.init) { - script.init(); - } + $(window).trigger('action:ajaxify.contentLoaded', {url: url}); - if (callback) { - callback(); - } - }); - }; + app.processPage(); + }; - ajaxify.isTemplateAvailable = function(tpl) { - return $.inArray(tpl + '.tpl', templatesModule.available) !== -1; - }; + ajaxify.removeRelativePath = function(url) { + if (url.indexOf(RELATIVE_PATH.slice(1)) === 0) { + url = url.slice(RELATIVE_PATH.length); + } + return url; + }; - ajaxify.getTemplateMapping = function(url) { - var tpl_url = ajaxify.getCustomTemplateMapping(url.split('?')[0]); + ajaxify.refresh = function() { + ajaxify.go(ajaxify.currentPage); + }; - if (tpl_url === false && !templates[url]) { - tpl_url = url.split('/'); + ajaxify.loadScript = function(tpl_url, callback) { + var location = !app.inAdmin ? 'forum/' : ''; - while(tpl_url.length) { - if (ajaxify.isTemplateAvailable(tpl_url.join('/'))) { - tpl_url = tpl_url.join('/'); - break; - } - tpl_url.pop(); - } - - if (!tpl_url.length) { - tpl_url = url.split('/')[0].split('?')[0]; - } - } else if (templates[url]) { - tpl_url = url; + require([location + tpl_url], function(script) { + if (script && script.init) { + script.init(); } - return tpl_url; - }; - - ajaxify.getCustomTemplateMapping = function(tpl) { - if (templatesModule.config && templatesModule.config.custom_mapping && tpl !== undefined) { - for (var pattern in templatesModule.config.custom_mapping) { - if (tpl.match(pattern)) { - return (templatesModule.config.custom_mapping[pattern]); - } - } + if (callback) { + callback(); } + }); + }; - return false; - }; + ajaxify.loadData = function(url, callback) { + url = ajaxify.removeRelativePath(url); - ajaxify.loadData = function(url, callback) { - url = ajaxify.removeRelativePath(url); + $(window).trigger('action:ajaxify.loadingData', {url: url}); - $(window).trigger('action:ajaxify.loadingData', {url: url}); + apiXHR = $.ajax({ + url: RELATIVE_PATH + '/api/' + url, + cache: false, + success: function(data) { + if (!data) { + return; + } - var location = document.location || window.location, - tpl_url = ajaxify.getCustomTemplateMapping(url.split('?')[0]); + data.relative_path = RELATIVE_PATH; - if (!tpl_url) { - tpl_url = ajaxify.getTemplateMapping(url); + if (callback) { + callback(null, data); + } + }, + error: function(data, textStatus) { + if (data.status === 0 && textStatus === 'error') { + data.status = 500; + } + callback({ + data: data, + textStatus: textStatus + }); } - - apiXHR = $.ajax({ - url: RELATIVE_PATH + '/api/' + url, - cache: false, + }); + }; + + ajaxify.loadTemplate = function(template, callback) { + if (templates.cache[template]) { + callback(templates.cache[template]); + } else { + $.ajax({ + url: RELATIVE_PATH + '/templates/' + template + '.tpl' + (config['cache-buster'] ? '?v=' + config['cache-buster'] : ''), + type: 'GET', success: function(data) { - if (!data) { - return; - } - - data.relative_path = RELATIVE_PATH; - - if (callback) { - callback(null, data); - } + callback(data.toString()); }, - error: function(data, textStatus) { - callback({ - data: data, - textStatus: textStatus - }); + error: function(error) { + throw new Error("Unable to load template: " + template + " (" + error.statusText + ")"); } }); - }; - - ajaxify.loadTemplate = function(template, callback) { - if (templates.cache[template]) { - callback(templates.cache[template]); - } else { - $.ajax({ - url: RELATIVE_PATH + '/templates/' + template + '.tpl' + (config['cache-buster'] ? '?v=' + config['cache-buster'] : ''), - type: 'GET', - success: function(data) { - callback(data.toString()); - }, - error: function(error) { - throw new Error("Unable to load template: " + template + " (" + error.statusText + ")"); - } - }); - } - }; - - $('document').ready(function () { - templates.registerLoader(ajaxify.loadTemplate); - templatesModule.refresh(app.load); - - if (!window.history || !window.history.pushState) { - return; // no ajaxification for old browsers - } + } + }; - function hrefEmpty(href) { - return href === undefined || href === '' || href === 'javascript:;' || href === window.location.href + "#" || href.slice(0, 1) === "#"; - } + function ajaxifyAnchors() { + templates.registerLoader(ajaxify.loadTemplate); - // Enhancing all anchors to ajaxify... - $(document.body).on('click', 'a', function (e) { - if (hrefEmpty(this.href) || this.target !== '' || this.protocol === 'javascript:' || $(this).attr('data-ajaxify') === 'false') { - return; - } + if (!window.history || !window.history.pushState) { + return; // no ajaxification for old browsers + } - if (!window.location.pathname.match(/\/(403|404)$/g)) { - app.previousUrl = window.location.href; - } + function hrefEmpty(href) { + return href === undefined || href === '' || href === 'javascript:;' || href === window.location.href + "#" || href.slice(0, 1) === "#"; + } - if (!e.ctrlKey && !e.shiftKey && !e.metaKey && e.which === 1) { - if (this.host === '' || this.host === window.location.host) { - // Internal link - var url = this.href.replace(rootUrl + '/', ''); + // Enhancing all anchors to ajaxify... + $(document.body).on('click', 'a', function (e) { + if (this.target !== '') { + return; + } else if (hrefEmpty(this.href) || this.protocol === 'javascript:' || $(this).attr('data-ajaxify') === 'false') { + return e.preventDefault(); + } - if(window.location.pathname === this.pathname && this.hash) { - if (this.hash !== window.location.hash) { - window.location.hash = this.hash; - } + if (!e.ctrlKey && !e.shiftKey && !e.metaKey && e.which === 1) { + if (this.host === '' || this.host === window.location.host) { + // Internal link + var url = this.href.replace(rootUrl + '/', ''); - ajaxify.loadScript(ajaxify.getTemplateMapping(url)); - e.preventDefault(); - } else { - if (ajaxify.go(url)) { - e.preventDefault(); - } + if(window.location.pathname === this.pathname && this.hash) { + if (this.hash !== window.location.hash) { + window.location.hash = this.hash; } - } else if (window.location.pathname !== '/outgoing') { - // External Link - if (config.openOutgoingLinksInNewTab) { - window.open(this.href, '_blank'); - e.preventDefault(); - } else if (config.useOutgoingLinksPage) { - ajaxify.go('outgoing?url=' + encodeURIComponent(this.href)); + + e.preventDefault(); + } else { + if (ajaxify.go(url)) { e.preventDefault(); } } + } else if (window.location.pathname !== '/outgoing') { + // External Link + if (config.openOutgoingLinksInNewTab) { + window.open(this.href, '_blank'); + e.preventDefault(); + } else if (config.useOutgoingLinksPage) { + ajaxify.go('outgoing?url=' + encodeURIComponent(this.href)); + e.preventDefault(); + } } - }); - + } }); + } + + ajaxifyAnchors(); + app.load(); + templates.cache['500'] = $('.tpl-500').html(); - }); }); \ No newline at end of file diff --git a/public/src/app.js b/public/src/app.js index bf5ec32941..8974d2316a 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -1,5 +1,5 @@ "use strict"; -/*global io, templates, translator, ajaxify, utils, bootbox, RELATIVE_PATH, config*/ +/*global io, templates, translator, ajaxify, utils, bootbox, RELATIVE_PATH, config, Visibility*/ var socket, app = app || {}; @@ -10,10 +10,6 @@ app.currentRoom = null; app.widgets = {}; app.cacheBuster = null; -// TODO: deprecate in 0.7.0, use app.user -app.username = null; -app.uid = null; - (function () { var showWelcomeMessage = false; var reconnecting = false; @@ -21,22 +17,15 @@ app.uid = null; function socketIOConnect() { var ioParams = { reconnectionAttempts: config.maxReconnectionAttempts, - reconnectionDelay : config.reconnectionDelay, + reconnectionDelay: config.reconnectionDelay, transports: config.socketioTransports, path: config.relative_path + '/socket.io' }; - socket = io.connect(config.websocketAddress, ioParams); + socket = io(config.websocketAddress, ioParams); reconnecting = false; - socket.on('event:connect', function (data) { - // TODO : deprecate in 0.7.0, use app.user - app.username = data.username; - app.userslug = data.userslug; - app.picture = data.picture; - app.uid = data.uid; - app.isAdmin = data.isAdmin; - + socket.on('event:connect', function () { app.showLoginMessage(); app.replaceSelfLinks(); $(window).trigger('action:connected'); @@ -52,11 +41,6 @@ app.uid = null; }); socket.on('reconnecting', function (attempt) { - if(attempt === parseInt(config.maxReconnectionAttempts, 10)) { - socket.io.attempts = 0; - return; - } - reconnecting = true; var reconnectEl = $('#reconnect'); @@ -81,6 +65,15 @@ app.uid = null; window.location.href = config.relative_path + '/'; }, 1000); }); + + socket.on('event:alert', function(data) { + app.alert(data); + }); + + socket.on('reconnect_failed', function() { + // Wait ten times the reconnection delay and then start over + setTimeout(socket.connect.bind(socket), parseInt(config.reconnectionDelay, 10) * 10); + }); } function onSocketConnect(data) { @@ -182,9 +175,9 @@ app.uid = null; socket.emit('meta.rooms.enter', { enter: room, - username: app.username, - userslug: app.userslug, - picture: app.picture + username: app.user.username, + userslug: app.user.userslug, + picture: app.user.picture }); app.currentRoom = room; @@ -232,8 +225,8 @@ app.uid = null; selector = selector || $('a'); selector.each(function() { var href = $(this).attr('href'); - if (href && app.userslug && href.indexOf('user/_self_') !== -1) { - $(this).attr('href', href.replace(/user\/_self_/g, 'user/' + app.userslug)); + if (href && app.user.userslug && href.indexOf('user/_self_') !== -1) { + $(this).attr('href', href.replace(/user\/_self_/g, 'user/' + app.user.userslug)); } }); }; @@ -241,7 +234,7 @@ app.uid = null; app.processPage = function () { highlightNavigationLink(); - $('span.timeago').timeago(); + $('.timeago').timeago(); utils.makeNumbersHumanReadable($('.human-readable-number')); @@ -253,16 +246,15 @@ app.uid = null; app.replaceSelfLinks(); - setTimeout(function () { - window.scrollTo(0, 1); // rehide address bar on mobile after page load completes. - }, 100); + // Scroll back to top of page + window.scrollTo(0, 0); }; app.showLoginMessage = function () { function showAlert() { app.alert({ type: 'success', - title: '[[global:welcome_back]] ' + app.username + '!', + title: '[[global:welcome_back]] ' + app.user.username + '!', message: '[[global:you_have_successfully_logged_in]]', timeout: 5000 }); @@ -279,11 +271,11 @@ app.uid = null; }; app.openChat = function (username, touid) { - if (username === app.username) { + if (username === app.user.username) { return app.alertError('[[error:cant-chat-with-yourself]]'); } - if (!app.uid) { + if (!app.user.uid) { return app.alertError('[[error:not-logged-in]]'); } @@ -364,7 +356,7 @@ app.uid = null; } }; - function exposeConfigToTemplates() { + app.exposeConfigToTemplates = function() { $(document).ready(function() { templates.setGlobal('loggedIn', config.loggedIn); templates.setGlobal('relative_path', RELATIVE_PATH); @@ -374,13 +366,13 @@ app.uid = null; } } }); - } + }; function createHeaderTooltips() { if (utils.findBootstrapEnvironment() === 'xs') { return; } - $('#header-menu li [title]').each(function() { + $('#header-menu li a[title]').each(function() { $(this).tooltip({ placement: 'bottom', title: $(this).attr('title') @@ -435,11 +427,9 @@ app.uid = null; require(['search', 'mousetrap'], function(search, Mousetrap) { $('#search-form').on('submit', function (e) { e.preventDefault(); - var input = $(this).find('input'), - term = input.val(); - + var input = $(this).find('input'); - search.query(term, function() { + search.query({term: input.val()}, function() { input.val(''); }); }); @@ -469,7 +459,7 @@ app.uid = null; } function collapseNavigationOnClick() { - $('#main-nav a, #user-control-list a, #logged-out-menu li a, #logged-in-menu .visible-xs').off('click').on('click', function() { + $('#nav-dropdown').off('click').on('click', '#main-nav a, #user-control-list a, #logged-out-menu li a, #logged-in-menu .visible-xs, #chat-list a', function() { if($('.navbar .navbar-collapse').hasClass('in')) { $('.navbar-header button').click(); } @@ -491,16 +481,8 @@ app.uid = null; app.load = function() { $('document').ready(function () { - var url = ajaxify.removeRelativePath(window.location.pathname.slice(1).replace(/\/$/, "")), - tpl_url = ajaxify.getTemplateMapping(url), - search = window.location.search, - hash = window.location.hash, - $window = $(window); - - - $window.trigger('action:ajaxify.start', { - url: url - }); + var url = ajaxify.start(window.location.pathname.slice(1), true, window.location.search); + ajaxify.end(url, app.template); collapseNavigationOnClick(); @@ -522,29 +504,7 @@ app.uid = null; }); createHeaderTooltips(); - showEmailConfirmWarning(); - - ajaxify.variables.parse(); - ajaxify.currentPage = url; - - $window.trigger('action:ajaxify.contentLoaded', { - url: url - }); - - if (window.history && window.history.replaceState) { - window.history.replaceState({ - url: url + search + hash - }, url, RELATIVE_PATH + '/' + url + search + hash); - } - - ajaxify.loadScript(tpl_url, function() { - ajaxify.widgets.render(tpl_url, url, function() { - app.processPage(); - $window.trigger('action:ajaxify.end', { - url: url - }); - }); - }); + app.showEmailConfirmWarning(); socket.removeAllListeners('event:nodebb.ready'); socket.on('event:nodebb.ready', function(cacheBusters) { @@ -568,17 +528,34 @@ app.uid = null; } }); - require(['taskbar'], function(taskbar) { + require(['taskbar', 'helpers'], function(taskbar, helpers) { taskbar.init(); + + // templates.js helpers + helpers.register(); }); }); }; - function showEmailConfirmWarning() { - if (config.requireEmailConfirmation && app.user.uid && !app.user['email:confirmed']) { + app.showEmailConfirmWarning = function(err) { + if (!config.requireEmailConfirmation || !app.user.uid) { + return; + } + if (!app.user.email) { + app.alert({ + alert_id: 'email_confirm', + message: '[[error:no-email-to-confirm]]', + type: 'warning', + timeout: 0, + clickfn: function() { + app.removeAlert('email_confirm'); + ajaxify.go('user/' + app.user.userslug + '/edit'); + } + }); + } else if (!app.user['email:confirmed']) { app.alert({ alert_id: 'email_confirm', - message: '[[error:email-not-confirmed]]', + message: err ? err.message : '[[error:email-not-confirmed]]', type: 'warning', timeout: 0, clickfn: function() { @@ -592,11 +569,11 @@ app.uid = null; } }); } - } + }; showWelcomeMessage = window.location.href.indexOf('loggedin') !== -1; - exposeConfigToTemplates(); + app.exposeConfigToTemplates(); socketIOConnect(); diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js index f85e00951c..86e5d1f66d 100644 --- a/public/src/client/account/edit.js +++ b/public/src/client/account/edit.js @@ -152,7 +152,7 @@ define('forum/account/edit', ['forum/account/header', 'uploader'], function(head return; } - if ($('#confirm-username').val() !== app.username) { + if ($('#confirm-username').val() !== app.user.username) { app.alertError('[[error:invalid-username]]'); return false; } else { @@ -266,12 +266,15 @@ define('forum/account/edit', ['forum/account/header', 'uploader'], function(head password_confirm.on('blur', onPasswordConfirmChanged); $('#changePasswordBtn').on('click', function() { - if ((passwordvalid && passwordsmatch) || app.isAdmin) { + var btn = $(this); + if ((passwordvalid && passwordsmatch) || app.user.isAdmin) { + btn.addClass('disabled').find('i').removeClass('hide'); socket.emit('user.changePassword', { 'currentPassword': currentPassword.val(), 'newPassword': password.val(), 'uid': ajaxify.variables.get('theirid') }, function(err) { + btn.removeClass('disabled').find('i').addClass('hide'); currentPassword.val(''); password.val(''); password_confirm.val(''); diff --git a/public/src/client/account/favourites.js b/public/src/client/account/favourites.js index 6a08a814a5..f73e1d4f20 100644 --- a/public/src/client/account/favourites.js +++ b/public/src/client/account/favourites.js @@ -34,7 +34,7 @@ define('forum/account/favourites', ['forum/account/header', 'forum/infinitescrol infinitescroll.parseAndTranslate('account/favourites', 'posts', {posts: posts}, function(html) { $('.user-favourite-posts').append(html); html.find('img').addClass('img-responsive'); - html.find('span.timeago').timeago(); + html.find('.timeago').timeago(); app.createUserTooltips(); utils.makeNumbersHumanReadable(html.find('.human-readable-number')); callback(); diff --git a/public/src/client/account/followers.js b/public/src/client/account/followers.js index 6dfb3bf83c..8c98a6bacd 100644 --- a/public/src/client/account/followers.js +++ b/public/src/client/account/followers.js @@ -1,19 +1,43 @@ -define('forum/account/followers', ['forum/account/header'], function(header) { +'use strict'; + +/* globals define, socket, utils */ + +define('forum/account/followers', ['forum/account/header', 'forum/infinitescroll'], function(header, infinitescroll) { var Followers = {}; Followers.init = function() { header.init(); - var yourid = ajaxify.variables.get('yourid'), - theirid = ajaxify.variables.get('theirid'), - followersCount = ajaxify.variables.get('followersCount'); - + infinitescroll.init(function(direction) { + Followers.loadMore(direction, 'account/followers', 'followers:' + $('.account-username-box').attr('data-uid')); + }); + }; - if (parseInt(followersCount, 10) === 0) { - $('#no-followers-notice').removeClass('hide'); + Followers.loadMore = function(direction, tpl, set) { + if (direction < 0) { + return; } + infinitescroll.loadMore('user.loadMore', { + set: set, + after: $('#users-container').attr('data-nextstart') + }, function(data, done) { + if (data.users && data.users.length) { + onUsersLoaded(tpl, data.users, done); + $('#users-container').attr('data-nextstart', data.nextStart); + } else { + done(); + } + }); }; + function onUsersLoaded(tpl, users, callback) { + infinitescroll.parseAndTranslate(tpl, 'users', {users: users}, function(html) { + $('#users-container').append(html); + utils.addCommasToNumbers(html.find('.formatted-number')); + callback(); + }); + } + return Followers; }); diff --git a/public/src/client/account/following.js b/public/src/client/account/following.js index 0e27a235aa..3b7ba980b7 100644 --- a/public/src/client/account/following.js +++ b/public/src/client/account/following.js @@ -1,14 +1,16 @@ -define('forum/account/following', ['forum/account/header'], function(header) { +'use strict'; + +/* globals define */ + +define('forum/account/following', ['forum/account/header', 'forum/infinitescroll', 'forum/account/followers'], function(header, infinitescroll, followers) { var Following = {}; Following.init = function() { header.init(); - var followingCount = ajaxify.variables.get('followingCount'); - - if (parseInt(followingCount, 10) === 0) { - $('#no-following-notice').removeClass('hide'); - } + infinitescroll.init(function(direction) { + followers.loadMore(direction, 'account/following', 'following:' + $('.account-username-box').attr('data-uid')); + }); }; return Following; diff --git a/public/src/client/account/groups.js b/public/src/client/account/groups.js new file mode 100644 index 0000000000..e4c932161d --- /dev/null +++ b/public/src/client/account/groups.js @@ -0,0 +1,21 @@ +'use strict'; + +/* globals ajaxify, define, app, socket, utils */ + +define('forum/account/groups', ['forum/account/header'], function(header) { + var AccountTopics = {}; + + AccountTopics.init = function() { + header.init(); + + var groupsEl = $('#groups-list'); + + groupsEl.on('click', '.list-cover', function() { + var groupSlug = $(this).parents('[data-slug]').attr('data-slug'); + + ajaxify.go('groups/' + groupSlug); + }); + }; + + return AccountTopics; +}); diff --git a/public/src/client/account/header.js b/public/src/client/account/header.js index f552bf4056..6dcc0b27e4 100644 --- a/public/src/client/account/header.js +++ b/public/src/client/account/header.js @@ -1,3 +1,6 @@ +'use strict'; +/* globals define, app, ajaxify */ + define('forum/account/header', function() { var AccountHeader = {}; @@ -7,15 +10,9 @@ define('forum/account/header', function() { }; function displayAccountMenus() { - var yourid = ajaxify.variables.get('yourid'), - theirid = ajaxify.variables.get('theirid'); - - if (parseInt(yourid, 10) !== 0 && parseInt(yourid, 10) === parseInt(theirid, 10)) { - $('#editLink, #settingsLink, #favouritesLink').removeClass('hide'); - } else { - $('.account-sub-links .plugin-link').each(function() { - var $this = $(this); - $this.toggleClass('hide', $this.hasClass('private')); + if (!app.user.uid || app.user.uid !== parseInt(ajaxify.variables.get('theirid'), 10)) { + $('.account-sub-links .plugin-link.private').each(function() { + $(this).addClass('hide'); }); } } diff --git a/public/src/client/account/posts.js b/public/src/client/account/posts.js index 70410e0819..c4759b9016 100644 --- a/public/src/client/account/posts.js +++ b/public/src/client/account/posts.js @@ -35,7 +35,7 @@ define('forum/account/posts', ['forum/account/header', 'forum/infinitescroll'], infinitescroll.parseAndTranslate('account/posts', 'posts', {posts: posts}, function(html) { $('.user-favourite-posts').append(html); html.find('img').addClass('img-responsive'); - html.find('span.timeago').timeago(); + html.find('.timeago').timeago(); app.createUserTooltips(); utils.makeNumbersHumanReadable(html.find('.human-readable-number')); callback(); diff --git a/public/src/client/account/profile.js b/public/src/client/account/profile.js index 2c3db09a07..5bbf48fe85 100644 --- a/public/src/client/account/profile.js +++ b/public/src/client/account/profile.js @@ -36,15 +36,14 @@ define('forum/account/profile', ['forum/account/header', 'forum/infinitescroll'] socket.removeListener('event:user_status_change', onUserStatusChange); socket.on('event:user_status_change', onUserStatusChange); - if (yourid !== theirid) { - socket.emit('user.increaseViewCount', theirid); - } - - infinitescroll.init(loadMoreTopics); + infinitescroll.init(loadMorePosts); }; function processPage() { $('.user-recent-posts img, .post-signature img').addClass('img-responsive'); + + $('.user-recent-posts blockquote').prev('p').remove(); + $('.user-recent-posts blockquote').remove(); } function updateButtons() { @@ -84,7 +83,7 @@ define('forum/account/profile', ['forum/account/header', 'forum/infinitescroll'] } - function loadMoreTopics(direction) { + function loadMorePosts(direction) { if(direction < 0 || !$('.user-recent-posts').length) { return; } @@ -117,7 +116,7 @@ define('forum/account/profile', ['forum/account/header', 'forum/infinitescroll'] infinitescroll.parseAndTranslate('account/profile', 'posts', {posts: posts}, function(html) { $('.user-recent-posts .loading-indicator').before(html); - html.find('span.timeago').timeago(); + html.find('.timeago').timeago(); callback(); }); diff --git a/public/src/client/account/settings.js b/public/src/client/account/settings.js index 3dde90dd98..20b33a613b 100644 --- a/public/src/client/account/settings.js +++ b/public/src/client/account/settings.js @@ -36,15 +36,26 @@ define('forum/account/settings', ['forum/account/header'], function(header) { } app.alertSuccess('[[success:settings-saved]]'); - + var requireReload = false; for (var key in newSettings) { if (newSettings.hasOwnProperty(key)) { - config[key] = newSettings[key]; + if (key === 'userLang' && config.userLang !== newSettings.userLang) { + requireReload = true; + } + config[key] = newSettings[key]; } } - - if (parseInt(app.uid, 10) === parseInt(ajaxify.variables.get('theirid'), 10)) { - ajaxify.refresh(); + app.exposeConfigToTemplates(); + if (requireReload && parseInt(app.user.uid, 10) === parseInt(ajaxify.variables.get('theirid'), 10)) { + app.alert({ + id: 'setting-change', + message: '[[user:settings-require-reload]]', + type: 'warning', + timeout: 5000, + clickfn: function() { + ajaxify.refresh(); + } + }); } }); diff --git a/public/src/client/account/topics.js b/public/src/client/account/topics.js index c556ef2891..c6c93f4262 100644 --- a/public/src/client/account/topics.js +++ b/public/src/client/account/topics.js @@ -18,12 +18,12 @@ define('forum/account/topics', ['forum/account/header', 'forum/infinitescroll'], infinitescroll.loadMore('topics.loadMoreFromSet', { set: 'uid:' + $('.account-username-box').attr('data-uid') + ':topics', - after: $('.user-topics').attr('data-nextstart') + after: $('[component="category"]').attr('data-nextstart') }, function(data, done) { if (data.topics && data.topics.length) { onTopicsLoaded(data.topics, done); - $('.user-topics').attr('data-nextstart', data.nextStart); + $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); } @@ -32,8 +32,8 @@ define('forum/account/topics', ['forum/account/header', 'forum/infinitescroll'], function onTopicsLoaded(topics, callback) { infinitescroll.parseAndTranslate('account/topics', 'topics', {topics: topics}, function(html) { - $('#topics-container').append(html); - html.find('span.timeago').timeago(); + $('[component="category"]').append(html); + html.find('.timeago').timeago(); app.createUserTooltips(); utils.makeNumbersHumanReadable(html.find('.human-readable-number')); $(window).trigger('action:topics.loaded'); diff --git a/public/src/client/account/watched.js b/public/src/client/account/watched.js new file mode 100644 index 0000000000..08feb89344 --- /dev/null +++ b/public/src/client/account/watched.js @@ -0,0 +1,43 @@ +'use strict'; + +/* globals define, app, socket, utils */ +define('forum/account/watched', ['forum/account/header', 'forum/infinitescroll'], function(header, infinitescroll) { + var AccountWatched = {}; + + AccountWatched.init = function() { + header.init(); + + infinitescroll.init(loadMore); + }; + + function loadMore(direction) { + if (direction < 0) { + return; + } + + infinitescroll.loadMore('topics.loadMoreFromSet', { + set: 'uid:' + $('.account-username-box').attr('data-uid') + ':followed_tids', + after: $('[component="category"]').attr('data-nextstart') + }, function(data, done) { + if (data.topics && data.topics.length) { + onTopicsLoaded(data.topics, done); + $('[component="category"]').attr('data-nextstart', data.nextStart); + } else { + done(); + } + }); + } + + function onTopicsLoaded(topics, callback) { + infinitescroll.parseAndTranslate('account/watched', 'topics', {topics: topics}, function(html) { + $('[component="category"]').append(html); + html.find('.timeago').timeago(); + app.createUserTooltips(); + utils.makeNumbersHumanReadable(html.find('.human-readable-number')); + $(window).trigger('action:topics.loaded'); + callback(); + }); + } + + return AccountWatched; +}); diff --git a/public/src/client/home.js b/public/src/client/categories.js similarity index 65% rename from public/src/client/home.js rename to public/src/client/categories.js index ca18223881..e3882ff831 100644 --- a/public/src/client/home.js +++ b/public/src/client/categories.js @@ -2,35 +2,34 @@ /* globals define, socket, app, templates, translator, ajaxify*/ -define('forum/home', function() { - var home = {}; +define('forum/categories', function() { + var categories = {}; $(window).on('action:ajaxify.start', function(ev, data) { - if (data.url !== '') { - socket.removeListener('event:new_post', home.onNewPost); + if (ajaxify.currentPage !== data.url) { + socket.removeListener('event:new_post', categories.onNewPost); } }); + categories.init = function() { + app.enterRoom('categories'); - home.init = function() { - app.enterRoom('home'); + socket.removeListener('event:new_post', categories.onNewPost); + socket.on('event:new_post', categories.onNewPost); - socket.removeListener('event:new_post', home.onNewPost); - socket.on('event:new_post', home.onNewPost); - - $('.home .category-header').tooltip({ + $('.category-header').tooltip({ placement: 'bottom' }); }; - home.onNewPost = function(data) { + categories.onNewPost = function(data) { if (data && data.posts && data.posts.length && data.posts[0].topic) { renderNewPost(data.posts[0].topic.cid, data.posts[0]); } }; function renderNewPost(cid, post) { - var category = $('.home .category-item[data-cid="' + cid + '"]'); + var category = components.get('category/topic', 'cid', cid); if (!category.length) { return; } @@ -59,20 +58,20 @@ define('forum/home', function() { recentPosts.last().remove(); } - $(window).trigger('action:posts.loaded'); + $(window).trigger('action:posts.loaded', {posts: [post]}); }); } function parseAndTranslate(posts, callback) { - templates.parse('home', 'posts', {categories: {posts: posts}}, function(html) { + templates.parse('categories', 'posts', {categories: {posts: posts}}, function(html) { translator.translate(html, function(translatedHTML) { translatedHTML = $(translatedHTML); translatedHTML.find('img').addClass('img-responsive'); - translatedHTML.find('span.timeago').timeago(); + translatedHTML.find('.timeago').timeago(); callback(translatedHTML); }); }); } - return home; + return categories; }); diff --git a/public/src/client/category.js b/public/src/client/category.js index 073d3568aa..1e6c0e94c4 100644 --- a/public/src/client/category.js +++ b/public/src/client/category.js @@ -1,11 +1,19 @@ "use strict"; /* global define, config, templates, app, utils, ajaxify, socket, translator */ -define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll', 'share', 'navigator', 'forum/categoryTools'], function(composer, pagination, infinitescroll, share, navigator, categoryTools) { +define('forum/category', [ + 'composer', + 'forum/pagination', + 'forum/infinitescroll', + 'share', + 'navigator', + 'forum/categoryTools', + 'sort' +], function(composer, pagination, infinitescroll, share, navigator, categoryTools, sort) { var Category = {}; $(window).on('action:ajaxify.start', function(ev, data) { - if(data && data.url.indexOf('category') !== 0) { + if (ajaxify.currentPage !== data.url) { navigator.hide(); removeListeners(); @@ -33,18 +41,20 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' categoryTools.init(cid); + sort.handleSort('categoryTopicSort', 'user.setCategorySort', 'category/' + ajaxify.variables.get('category_slug')); + enableInfiniteLoadingOrPagination(); if (!config.usePagination) { - navigator.init('#topics-container > .category-item', ajaxify.variables.get('topic_count'), Category.toTop, Category.toBottom, Category.navigatorCallback); + navigator.init('[component="category/topic"]', ajaxify.variables.get('topic_count'), Category.toTop, Category.toBottom, Category.navigatorCallback); } - $('#topics-container').on('click', '.topic-title', function() { - var clickedTid = $(this).parents('li.category-item[data-tid]').attr('data-tid'); - $('#topics-container li.category-item').each(function(index, el) { - if($(el).offset().top - $(window).scrollTop() > 0) { - localStorage.setItem('category:' + cid + ':bookmark', $(el).attr('data-tid')); - localStorage.setItem('category:' + cid + ':bookmark:clicked', clickedTid); + $('[component="category"]').on('click', '[component="post/header"]', function() { + var clickedIndex = $(this).parents('[data-index]').attr('data-index'); + $('[component="category/topic"]').each(function(index, el) { + if ($(el).offset().top - $(window).scrollTop() > 0) { + localStorage.setItem('category:' + cid + ':bookmark', $(el).attr('data-index')); + localStorage.setItem('category:' + cid + ':bookmark:clicked', clickedIndex); return false; } }); @@ -74,17 +84,17 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' }; Category.toBottom = function() { - socket.emit('categories.getTopicCount', ajaxify.variables.get('category_id'), function(err, index) { - navigator.scrollBottom(index); + socket.emit('categories.getTopicCount', ajaxify.variables.get('category_id'), function(err, count) { + navigator.scrollBottom(count - 1); }); }; - Category.navigatorCallback = function(element, elementCount) { - return parseInt(element.attr('data-index'), 10) + 1; + Category.navigatorCallback = function(topIndex, bottomIndex, elementCount) { + return bottomIndex; }; $(window).on('action:popstate', function(ev, data) { - if(data.url.indexOf('category/') === 0) { + if (data.url.indexOf('category/') === 0) { var cid = data.url.match(/^category\/(\d+)/); if (cid && cid[1]) { cid = cid[1]; @@ -93,52 +103,44 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' return; } - var bookmark = localStorage.getItem('category:' + cid + ':bookmark'); - var clicked = localStorage.getItem('category:' + cid + ':bookmark:clicked'); + var bookmarkIndex = localStorage.getItem('category:' + cid + ':bookmark'); + var clickedIndex = localStorage.getItem('category:' + cid + ':bookmark:clicked'); - if (!bookmark) { + if (!bookmarkIndex) { return; } - if(config.usePagination) { - socket.emit('topics.getTidPage', bookmark, function(err, page) { - if (err) { - return; - } - if(parseInt(page, 10) !== pagination.currentPage) { - pagination.loadPage(page); - } else { - Category.scrollToTopic(bookmark, clicked, 400); - } - }); + if (config.usePagination) { + var page = Math.ceil((parseInt(bookmarkIndex, 10) + 1) / config.topicsPerPage); + if (parseInt(page, 10) !== pagination.currentPage) { + pagination.loadPage(page, function() { + Category.scrollToTopic(bookmarkIndex, clickedIndex, 400); + }); + } else { + Category.scrollToTopic(bookmarkIndex, clickedIndex, 400); + } } else { - socket.emit('topics.getTidIndex', bookmark, function(err, index) { - if (err) { - return; - } - - if (index === 0) { - Category.highlightTopic(clicked); - return; - } + if (bookmarkIndex === 0) { + Category.highlightTopic(clickedIndex); + return; + } - if (index < 0) { - index = 0; - } + if (bookmarkIndex < 0) { + bookmarkIndex = 0; + } - $('#topics-container').empty(); + $('[component="category"]').empty(); - loadTopicsAfter(index, function() { - Category.scrollToTopic(bookmark, clicked, 0); - }); + loadTopicsAfter(bookmarkIndex, function() { + Category.scrollToTopic(bookmarkIndex, clickedIndex, 0); }); } } }); - Category.highlightTopic = function(tid) { - var highlight = $('#topics-container li.category-item[data-tid="' + tid + '"]'); - if(highlight.length && !highlight.hasClass('highlight')) { + Category.highlightTopic = function(topicIndex) { + var highlight = components.get('category/topic', 'index', topicIndex); + if (highlight.length && !highlight.hasClass('highlight')) { highlight.addClass('highlight'); setTimeout(function() { highlight.removeClass('highlight'); @@ -146,27 +148,24 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' } }; - Category.scrollToTopic = function(tid, clickedTid, duration, offset) { - if(!tid) { + Category.scrollToTopic = function(bookmarkIndex, clickedIndex, duration, offset) { + if (!bookmarkIndex) { return; } - if(!offset) { + if (!offset) { offset = 0; } - if($('#topics-container li.category-item[data-tid="' + tid + '"]').length) { - var cid = ajaxify.variables.get('category_id'); - var scrollTo = $('#topics-container li.category-item[data-tid="' + tid + '"]'); - - if (cid && scrollTo.length) { - $('html, body').animate({ - scrollTop: (scrollTo.offset().top - $('#header-menu').height() - offset) + 'px' - }, duration !== undefined ? duration : 400, function() { - Category.highlightTopic(clickedTid); - navigator.update(); - }); - } + var scrollTo = components.get('category/topic', 'index', bookmarkIndex); + var cid = ajaxify.variables.get('category_id'); + if (scrollTo.length && cid) { + $('html, body').animate({ + scrollTop: (scrollTo.offset().top - $('#header-menu').height() - offset) + 'px' + }, duration !== undefined ? duration : 400, function() { + Category.highlightTopic(clickedIndex); + navigator.update(); + }); } }; @@ -181,7 +180,7 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' Category.onNewTopic = function(topic) { var cid = ajaxify.variables.get('category_id'); - if(!topic || parseInt(topic.cid, 10) !== parseInt(cid, 10)) { + if (!topic || parseInt(topic.cid, 10) !== parseInt(cid, 10)) { return; } @@ -193,11 +192,12 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' }, function(html) { translator.translate(html, function(translatedHTML) { var topic = $(translatedHTML), - container = $('#topics-container'), - topics = $('#topics-container').children('.category-item'), + container = $('[component="category"]'), + topics = $('[component="category/topic"]'), numTopics = topics.length; - $('#topics-container, .category-sidebar').removeClass('hidden'); + $('[component="category"]').removeClass('hidden'); + $('.category-sidebar').removeClass('hidden'); var noTopicsWarning = $('#category-no-topics'); if (noTopicsWarning.length) { @@ -223,11 +223,7 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' topic.hide().fadeIn('slow'); - socket.emit('categories.getPageCount', ajaxify.variables.get('category_id'), function(err, newPageCount) { - pagination.recreatePaginationLinks(newPageCount); - }); - - topic.find('span.timeago').timeago(); + topic.find('.timeago').timeago(); app.createUserTooltips(); updateTopicCount(); @@ -252,7 +248,7 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' function removeAlreadyAddedTopics(topics) { return topics.filter(function(topic) { - return $('#topics-container li[data-tid="' + topic.tid +'"]').length === 0; + return components.get('category/topic', 'tid', topic.tid).length === 0; }); } @@ -260,16 +256,20 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' before = null; function findInsertionPoint() { - if (!$('#topics-container .category-item[data-tid]').length) { + var topics = components.get('category/topic'); + + if (!topics.length) { return; } - var last = $('#topics-container .category-item[data-tid]').last(); - var lastIndex = last.attr('data-index'); - var firstIndex = data.topics[data.topics.length - 1].index; + + var last = topics.last(), + lastIndex = last.attr('data-index'), + firstIndex = data.topics[data.topics.length - 1].index; + if (firstIndex > lastIndex) { after = last; } else { - before = $('#topics-container .category-item[data-tid]').first(); + before = topics.first(); } } @@ -282,10 +282,12 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' templates.parse('category', 'topics', data, function(html) { translator.translate(html, function(translatedHTML) { - var container = $('#topics-container'), + var container = $('[component="category"]'), html = $(translatedHTML); - $('#topics-container, .category-sidebar').removeClass('hidden'); + $('[component="category"]').removeClass('hidden'); + $('.category-sidebar').removeClass('hidden'); + $('#category-no-topics').remove(); if(config.usePagination) { @@ -303,7 +305,7 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' if (typeof callback === 'function') { callback(); } - html.find('span.timeago').timeago(); + html.find('.timeago').timeago(); app.createUserTooltips(); utils.makeNumbersHumanReadable(html.find('.human-readable-number')); }); @@ -311,21 +313,21 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' }; Category.loadMoreTopics = function(direction) { - if (!$('#topics-container').length || !$('#topics-container').children().length) { + if (!$('[component="category"]').length || !$('[component="category"]').children().length) { return; } - infinitescroll.calculateAfter(direction, '#topics-container .category-item[data-tid]', config.topicsPerPage, false, function(after, offset, el) { + infinitescroll.calculateAfter(direction, components.get('category/topic'), config.topicsPerPage, false, function(after, offset, el) { loadTopicsAfter(after, function() { if (direction < 0 && el) { - Category.scrollToTopic(el.attr('data-tid'), null, 0, offset); + Category.scrollToTopic(el.attr('data-index'), null, 0, offset); } }); }); }; function loadTopicsAfter(after, callback) { - if(!utils.isNumber(after) || (after === 0 && $('#topics-container li.category-item[data-index="0"]').length)) { + if(!utils.isNumber(after) || (after === 0 && components.get('category/topic', 'index', 0).length)) { return; } @@ -333,7 +335,7 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' infinitescroll.loadMore('categories.loadMore', { cid: ajaxify.variables.get('category_id'), after: after, - author: utils.getQueryParams().author + author: utils.params().author }, function (data, done) { if (data.topics && data.topics.length) { @@ -341,7 +343,7 @@ define('forum/category', ['composer', 'forum/pagination', 'forum/infinitescroll' done(); callback(); }); - $('#topics-container').attr('data-nextstart', data.nextStart); + $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); } diff --git a/public/src/client/categoryTools.js b/public/src/client/categoryTools.js index b94954626a..e711bce436 100644 --- a/public/src/client/categoryTools.js +++ b/public/src/client/categoryTools.js @@ -173,39 +173,34 @@ define('forum/categoryTools', ['forum/topic/move', 'topicSelect'], function(move } function getTopicEl(tid) { - return $('#topics-container li[data-tid="' + tid + '"]'); + return components.get('category/topic', 'tid', tid); } function setDeleteState(data) { var topic = getTopicEl(data.tid); topic.toggleClass('deleted', data.isDeleted); - topic.find('.fa-lock').toggleClass('hide', !data.isDeleted); + topic.find('[component="topic/locked"]').toggleClass('hide', !data.isDeleted); } function setPinnedState(data) { var topic = getTopicEl(data.tid); topic.toggleClass('pinned', data.isPinned); - topic.find('.fa-thumb-tack').toggleClass('hide', !data.isPinned); + topic.find('[component="topic/pinned"]').toggleClass('hide', !data.isPinned); ajaxify.refresh(); } function setLockedState(data) { var topic = getTopicEl(data.tid); topic.toggleClass('locked', data.isLocked); - topic.find('.fa-lock').toggleClass('hide', !data.isLocked); + topic.find('[component="topic/locked"]').toggleClass('hide', !data.isLocked); } function onTopicMoved(data) { getTopicEl(data.tid).remove(); } - function onTopicPurged(tids) { - if (!tids) { - return; - } - for(var i=0; i 0) .attr('data-content', count > 20 ? '20+' : count); } @@ -19,7 +22,7 @@ define('forum/footer', ['notifications', 'chat'], function(Notifications, Chat) return console.warn('Error updating unread count', err); } - $('#chat-count') + components.get('chat/icon') .toggleClass('unread-count', count > 0) .attr('data-content', count > 20 ? '20+' : count); } @@ -31,7 +34,7 @@ define('forum/footer', ['notifications', 'chat'], function(Notifications, Chat) if (data && data.posts && data.posts.length) { var post = data.posts[0]; - if (parseInt(post.uid, 10) !== parseInt(app.uid, 10) && !unreadTopics[post.topic.tid]) { + if (parseInt(post.uid, 10) !== parseInt(app.user.uid, 10) && !unreadTopics[post.topic.tid]) { increaseUnreadCount(); markTopicsUnread(post.topic.tid); unreadTopics[post.topic.tid] = true; @@ -40,7 +43,7 @@ define('forum/footer', ['notifications', 'chat'], function(Notifications, Chat) } function increaseUnreadCount() { - var count = parseInt($('#unread-count').attr('data-content'), 10) + 1; + var count = parseInt($('#unread-count i').attr('data-content'), 10) + 1; updateUnreadTopicCount(null, count); } diff --git a/public/src/client/groups/details.js b/public/src/client/groups/details.js index 12ca74884a..bc1534f051 100644 --- a/public/src/client/groups/details.js +++ b/public/src/client/groups/details.js @@ -1,17 +1,281 @@ "use strict"; +/* globals define, socket, ajaxify, app, bootbox, RELATIVE_PATH, utils */ -define('forum/groups/details', function() { - var Details = {}; +define('forum/groups/details', ['iconSelect', 'vendor/colorpicker/colorpicker', 'vendor/jquery/draggable-background/backgroundDraggable'], function(iconSelect) { + var Details = { + cover: {} + }; Details.init = function() { - var memberListEl = $('.groups.details .members'); + var detailsPage = $('.groups'), + settingsFormEl = detailsPage.find('form'); - memberListEl.on('click', '[data-slug]', function() { - var slug = this.getAttribute('data-slug'); - ajaxify.go('user/' + slug); - }); + if (ajaxify.variables.get('is_owner') === 'true') { + Details.prepareSettings(); + Details.initialiseCover(); + } $('.latest-posts .content img').addClass('img-responsive'); + + detailsPage.on('click', '[data-action]', function() { + var btnEl = $(this), + userRow = btnEl.parents('[data-uid]'), + ownerFlagEl = userRow.find('.member-name i'), + isOwner = !ownerFlagEl.hasClass('invisible') ? true : false, + uid = userRow.attr('data-uid'), + action = btnEl.attr('data-action'); + + switch(action) { + case 'toggleOwnership': + socket.emit('groups.' + (isOwner ? 'rescind' : 'grant'), { + toUid: uid, + groupName: ajaxify.variables.get('group_name') + }, function(err) { + if (!err) { + ownerFlagEl.toggleClass('invisible'); + } else { + app.alertError(err.message); + } + }); + break; + + case 'kick': + socket.emit('groups.kick', { + uid: uid, + groupName: ajaxify.variables.get('group_name') + }, function(err) { + if (!err) { + userRow.slideUp().remove(); + } else { + app.alertError(err.message); + } + }); + break; + + case 'update': + Details.update(); + break; + + case 'delete': + Details.deleteGroup(); + break; + + case 'join': // intentional fall-throughs! + case 'leave': + case 'accept': + case 'reject': + case 'acceptInvite': + case 'rejectInvite': + socket.emit('groups.' + action, { + toUid: uid, + groupName: ajaxify.variables.get('group_name') + }, function(err) { + if (!err) { + ajaxify.refresh(); + } else { + app.alertError(err.message); + } + }); + break; + } + }); + }; + + Details.prepareSettings = function() { + var settingsFormEl = $('.groups form'), + colorBtn = settingsFormEl.find('[data-action="color-select"]'), + colorValueEl = settingsFormEl.find('[name="labelColor"]'), + iconBtn = settingsFormEl.find('[data-action="icon-select"]'), + previewEl = settingsFormEl.find('.label'), + previewIcon = previewEl.find('i'), + userTitleEl = settingsFormEl.find('[name="userTitle"]'), + userTitleEnabledEl = settingsFormEl.find('[name="userTitleEnabled"]'), + iconValueEl = settingsFormEl.find('[name="icon"]'); + + // Add color picker to settings form + colorBtn.ColorPicker({ + color: colorValueEl.val() || '#000', + onChange: function(hsb, hex) { + colorValueEl.val('#' + hex); + previewEl.css('background-color', '#' + hex); + }, + onShow: function(colpkr) { + $(colpkr).css('z-index', 1051); + } + }); + + // Add icon selection interface + iconBtn.on('click', function() { + iconSelect.init(previewIcon, function() { + iconValueEl.val(previewIcon.val()); + }); + }); + + // If the user title changes, update that too + userTitleEl.on('keyup', function() { + var icon = previewIcon.detach(); + previewEl.text(' ' + (this.value || settingsFormEl.find('#name').val())); + previewEl.prepend(icon); + }); + + // Disable user title customisation options if the the user title itself is disabled + userTitleEnabledEl.on('change', function() { + var customOpts = $('.user-title-option input, .user-title-option button'); + + if (this.checked) { + customOpts.removeAttr('disabled'); + previewEl.removeClass('hide'); + } else { + customOpts.attr('disabled', 'disabled'); + previewEl.addClass('hide'); + } + }); + }; + + Details.update = function() { + var settingsFormEl = $('.groups form'), + checkboxes = settingsFormEl.find('input[type="checkbox"][name]'); + + if (settingsFormEl.length) { + require(['vendor/jquery/serializeObject/jquery.ba-serializeobject.min'], function() { + var settings = settingsFormEl.serializeObject(); + + // Fix checkbox values + checkboxes.each(function(idx, inputEl) { + inputEl = $(inputEl); + if (inputEl.length) { + settings[inputEl.attr('name')] = inputEl.prop('checked'); + } + }); + + socket.emit('groups.update', { + groupName: ajaxify.variables.get('group_name'), + values: settings + }, function(err) { + if (err) { + return app.alertError(err.message); + } + + if (settings.name) { + var pathname = window.location.pathname; + pathname = pathname.substr(1, pathname.lastIndexOf('/')); + ajaxify.go(pathname + utils.slugify(settings.name)); + } else { + ajaxify.refresh(); + } + + app.alertSuccess('[[groups:event.updated]]'); + }); + }); + } + }; + + Details.deleteGroup = function() { + bootbox.confirm('Are you sure you want to delete the group: ' + utils.escapeHTML(ajaxify.variables.get('group_name')), function(confirm) { + if (confirm) { + bootbox.prompt('Please enter the name of this group in order to delete it:', function(response) { + if (response === ajaxify.variables.get('group_name')) { + socket.emit('groups.delete', { + groupName: ajaxify.variables.get('group_name') + }, function(err) { + if (!err) { + app.alertSuccess('[[groups:event.deleted, ' + utils.escapeHTML(ajaxify.variables.get('group_name')) + ']]'); + ajaxify.go('groups'); + } else { + app.alertError(err.message); + } + }); + } + }); + } + }); + }; + + // Cover Photo Handling Code + + Details.initialiseCover = function() { + var coverEl = $('.group-cover'); + coverEl.find('.change').on('click', function() { + coverEl.toggleClass('active', 1); + coverEl.backgroundDraggable({ + axis: 'y' + }); + coverEl.on('dragover', Details.cover.onDragOver); + coverEl.on('drop', Details.cover.onDrop); + }); + + coverEl.find('.save').on('click', Details.cover.save); + coverEl.addClass('initialised'); + }; + + Details.cover.load = function() { + socket.emit('groups.cover.get', { + groupName: ajaxify.variables.get('group_name') + }, function(err, data) { + if (!err) { + var coverEl = $('.group-cover'); + if (data['cover:url']) { + coverEl.css('background-image', 'url(' + data['cover:url'] + ')'); + } + + if (data['cover:position']) { + coverEl.css('background-position', data['cover:position']); + } + + delete Details.cover.newCover; + } else { + app.alertError(err.message); + } + }); + }; + + Details.cover.onDragOver = function(e) { + e.stopPropagation(); + e.preventDefault(); + e.originalEvent.dataTransfer.dropEffect = 'copy'; + }; + + Details.cover.onDrop = function(e) { + var coverEl = $('.group-cover'); + e.stopPropagation(); + e.preventDefault(); + + var files = e.originalEvent.dataTransfer.files, + reader = new FileReader(); + + if (files.length && files[0].type.match('image.*')) { + reader.onload = function(e) { + coverEl.css('background-image', 'url(' + e.target.result + ')'); + coverEl.backgroundDraggable(); + Details.cover.newCover = e.target.result; + }; + + reader.readAsDataURL(files[0]); + } + }; + + Details.cover.save = function() { + var coverEl = $('.group-cover'); + + coverEl.addClass('saving'); + + socket.emit('groups.cover.update', { + groupName: ajaxify.variables.get('group_name'), + imageData: Details.cover.newCover || undefined, + position: $('.group-cover').css('background-position') + }, function(err) { + if (!err) { + coverEl.toggleClass('active', 0); + coverEl.backgroundDraggable('disable'); + coverEl.off('dragover', Details.cover.onDragOver); + coverEl.off('drop', Details.cover.onDrop); + Details.cover.load(); + } else { + app.alertError(err.message); + } + + coverEl.removeClass('saving'); + }); }; return Details; diff --git a/public/src/client/groups/list.js b/public/src/client/groups/list.js new file mode 100644 index 0000000000..2fe5caab95 --- /dev/null +++ b/public/src/client/groups/list.js @@ -0,0 +1,63 @@ +"use strict"; +/* globals app, define, ajaxify, socket, bootbox, utils, templates */ + +define('forum/groups/list', function() { + var Groups = {}; + + Groups.init = function() { + var groupsEl = $('#groups-list'); + + groupsEl.on('click', '.list-cover', function() { + var groupSlug = $(this).parents('[data-slug]').attr('data-slug'); + + ajaxify.go('groups/' + groupSlug); + }); + + // Group creation + $('button[data-action="new"]').on('click', function() { + bootbox.prompt('Group Name:', function(name) { + if (name && name.length) { + socket.emit('groups.create', { + name: name + }, function(err) { + if (!err) { + ajaxify.go('groups/' + utils.slugify(name)); + } else { + app.alertError(err.message); + } + }); + } + }); + }); + + // Group searching + $('#search-text').on('keyup', Groups.search); + $('#search-button').on('click', Groups.search); + $('#search-sort').on('change', Groups.search); + }; + + Groups.search = function(event) { + var groupsEl = $('#groups-list'), + queryEl = $('#search-text'), + sortEl = $('#search-sort'); + + event.preventDefault(); + + socket.emit('groups.search', { + query: queryEl.val(), + options: { + expand: true, + truncateUserList: true, + sort: sortEl.val() + } + }, function(err, groups) { + templates.parse('partials/groups/list', { + groups: groups + }, function(html) { + groupsEl.empty().append(html); + }); + }); + }; + + return Groups; +}); \ No newline at end of file diff --git a/public/src/client/infinitescroll.js b/public/src/client/infinitescroll.js index e600d16fbe..ba3385d92f 100644 --- a/public/src/client/infinitescroll.js +++ b/public/src/client/infinitescroll.js @@ -14,10 +14,6 @@ define('forum/infinitescroll', function() { callback = cb; topOffset = _topOffest || 0; $(window).off('scroll', onScroll).on('scroll', onScroll); - - // if ($(document).height() === $(window).height()) { - // callback(1); - // } }; function onScroll() { diff --git a/public/src/client/login.js b/public/src/client/login.js index 22f1dca9eb..dc199f3d2f 100644 --- a/public/src/client/login.js +++ b/public/src/client/login.js @@ -1,5 +1,5 @@ "use strict"; -/* global define, app, RELATIVE_PATH */ +/* global define, app, translator, config, RELATIVE_PATH */ define('forum/login', ['csrf'], function(csrf) { var Login = {}; @@ -31,7 +31,7 @@ define('forum/login', ['csrf'], function(csrf) { }, error: function(data, status) { translator.translate(data.responseText, config.defaultLang, function(translated) { - errorEl.find('p').text(translated) + errorEl.find('p').text(translated); errorEl.show(); submitEl.removeClass('disabled'); }); diff --git a/public/src/client/notifications.js b/public/src/client/notifications.js index b0fbb4619f..4e7244f83f 100644 --- a/public/src/client/notifications.js +++ b/public/src/client/notifications.js @@ -1,16 +1,25 @@ +'use strict'; + +/* globals define, socket, app */ + define('forum/notifications', function() { var Notifications = {}; Notifications.init = function() { var listEl = $('.notifications-list'); - listEl.on('click', 'li', function(e) { - this.querySelector('a').click(); + listEl.on('click', 'a', function(e) { + var nid = $(this).parents('[data-nid]').attr('data-nid'); + socket.emit('notifications.markRead', nid, function(err) { + if (err) { + return app.alertError(err); + } + }); }); - $('span.timeago').timeago(); + $('.timeago').timeago(); $('.notifications .delete').on('click', function() { - socket.emit('notifications.deleteAll', function(err) { + socket.emit('notifications.markAllRead', function(err) { if (err) { return app.alertError(err.message); } @@ -20,8 +29,7 @@ define('forum/notifications', function() { listEl.empty(); }); }); - - } + }; return Notifications; }); diff --git a/public/src/client/pagination.js b/public/src/client/pagination.js index 5aab6ada6b..e2df0a6ebe 100644 --- a/public/src/client/pagination.js +++ b/public/src/client/pagination.js @@ -11,98 +11,25 @@ define('forum/pagination', function() { pagination.currentPage = parseInt(currentPage, 10); pagination.pageCount = parseInt(pageCount, 10); - pagination.recreatePaginationLinks(pageCount); - - $('.pagination') - .on('click', '.previous', function() { - return pagination.loadPage(pagination.currentPage - 1); - }).on('click', '.next', function() { - return pagination.loadPage(pagination.currentPage + 1); - }).on('click', '.select_page', function(e) { - e.preventDefault(); - bootbox.prompt('Enter page number:', function(pageNum) { - pagination.loadPage(pageNum); - }); + $('.pagination').on('click', '.select_page', function(e) { + e.preventDefault(); + bootbox.prompt('Enter page number:', function(pageNum) { + pagination.loadPage(pageNum); }); - }; - - pagination.recreatePaginationLinks = function(newPageCount) { - pagination.pageCount = parseInt(newPageCount, 10); - - var pagesToShow = determinePagesToShow(); - - var html = ''; - for(var i=0; i 0) { - if (pagesToShow[i] - 1 !== pagesToShow[i-1]) { - html += '
  • |
  • '; - } - } - html += '
  • ' + pagesToShow[i] + '
  • '; - } - - $('.pagination li.page').remove(); - $('.pagination li .select_page').parent().remove(); - $(html).insertAfter($('.pagination li.previous')); - - updatePageLinks(); - }; - - function determinePagesToShow() { - var pagesToShow = [1]; - if(pagination.pageCount !== 1) { - pagesToShow.push(pagination.pageCount); - } - - var previous = pagination.currentPage - 1; - var next = pagination.currentPage + 1; - - if(previous > 1 && pagesToShow.indexOf(previous) === -1) { - pagesToShow.push(previous); - } - - if(next < pagination.pageCount && pagesToShow.indexOf(next) === -1) { - pagesToShow.push(next); - } - - if(pagesToShow.indexOf(pagination.currentPage) === -1) { - pagesToShow.push(pagination.currentPage); - } - - pagesToShow.sort(function(a, b) { - return parseInt(a, 10) - parseInt(b, 10); }); - return pagesToShow; - } + }; pagination.loadPage = function(page, callback) { + callback = callback || function() {}; page = parseInt(page, 10); - if(!utils.isNumber(page) || page < 1 || page > pagination.pageCount) { + if (!utils.isNumber(page) || page < 1 || page > pagination.pageCount) { + callback(false); return false; } - - ajaxify.go(window.location.pathname.slice(1) + '?page=' + page, function() { - if (typeof callback === 'function') { - callback(); - } - }); + var url = window.location.pathname.slice(1).split('/').slice(0, 3).join('/') + '?page=' + page; + ajaxify.go(url, callback); return true; }; - function updatePageLinks() { - $('.pagination').toggleClass('hide', pagination.pageCount === 0 || pagination.pageCount === 1); - - $('.pagination .next').toggleClass('disabled', pagination.currentPage === pagination.pageCount); - $('.pagination .previous').toggleClass('disabled', pagination.currentPage === 1); - - $('.pagination .page').removeClass('active'); - $('.pagination .page[data-page="' + pagination.currentPage + '"]').addClass('active'); - $('.pagination .page').each(function(index, element) { - var li = $(this); - var page = li.attr('data-page'); - li.find('a').attr('href', window.location.pathname + '?page=' + page); - }); - } - return pagination; }); diff --git a/public/src/client/popular.js b/public/src/client/popular.js index 6edc5a071c..0d05186faf 100644 --- a/public/src/client/popular.js +++ b/public/src/client/popular.js @@ -2,16 +2,12 @@ /* globals define, app, socket*/ -define('forum/popular', ['forum/recent', 'forum/infinitescroll'], function(recent, infinitescroll) { +define('forum/popular', ['forum/recent'], function(recent) { var Popular = {}; Popular.init = function() { app.enterRoom('recent_posts'); - $('#new-topics-alert').on('click', function() { - $(this).addClass('hide'); - }); - selectActivePill(); }; @@ -26,10 +22,10 @@ define('forum/popular', ['forum/recent', 'forum/infinitescroll'], function(recen return false; } }); - }; + } function getActiveSection() { - parts = window.location.href.split('/'); + var parts = window.location.href.split('/'); return parts[parts.length - 1]; } diff --git a/public/src/client/recent.js b/public/src/client/recent.js index fc591fbb3b..30d635ea0d 100644 --- a/public/src/client/recent.js +++ b/public/src/client/recent.js @@ -2,14 +2,14 @@ /* globals define, app, socket, utils */ -define('forum/recent', ['forum/infinitescroll'], function(infinitescroll) { +define('forum/recent', ['forum/infinitescroll', 'composer'], function(infinitescroll, composer) { var Recent = {}; var newTopicCount = 0, newPostCount = 0; $(window).on('action:ajaxify.start', function(ev, data) { - if(data.url.indexOf('recent') !== 0) { + if (ajaxify.currentPage !== data.url) { Recent.removeListeners(); } }); @@ -23,6 +23,17 @@ define('forum/recent', ['forum/infinitescroll'], function(infinitescroll) { $(this).addClass('hide'); }); + $('#new_topic').on('click', function() { + socket.emit('categories.getCategoriesByPrivilege', 'topics:create', function(err, categories) { + if (err) { + return app.alertError(err.message); + } + if (categories.length) { + composer.newTopic(categories[0].cid); + } + }); + }); + infinitescroll.init(Recent.loadMoreTopics); }; @@ -50,38 +61,50 @@ define('forum/recent', ['forum/infinitescroll'], function(infinitescroll) { }; Recent.updateAlertText = function() { - var text = 'There'; + var text = ''; - if (newTopicCount > 1) { - text += ' are ' + newTopicCount + ' new topics'; + if (newTopicCount === 0) { + if (newPostCount === 1) { + text = '[[recent:there-is-a-new-post]]'; + } else if (newPostCount > 1) { + text = '[[recent:there-are-new-posts, ' + newPostCount + ']]'; + } } else if (newTopicCount === 1) { - text += ' is a new topic'; - } - - if (newPostCount > 1) { - text += (newTopicCount?' and ':' are ') + newPostCount + ' new posts'; - } else if(newPostCount === 1) { - text += (newTopicCount?' and ':' is ') + ' a new post'; + if (newPostCount === 0) { + text = '[[recent:there-is-a-new-topic]]'; + } else if (newPostCount === 1) { + text = '[[recent:there-is-a-new-topic-and-a-new-post]]'; + } else if (newPostCount > 1) { + text = '[[recent:there-is-a-new-topic-and-new-posts, ' + newPostCount +']]'; + } + } else if (newTopicCount > 1) { + if (newPostCount === 0) { + text = '[[recent:there-are-new-topics, ' + newTopicCount + ']]'; + } else if (newPostCount === 1) { + text = '[[recent:there-are-new-topics-and-a-new-post, ' + newTopicCount + ']]'; + } else if (newPostCount > 1) { + text = '[[recent:there-are-new-topics-and-new-posts, ' + newTopicCount + ', ' + newPostCount +']]'; + } } - text += '. Click here to reload.'; + text += ' [[recent:click-here-to-reload]]'; - $('#new-topics-alert').html(text).removeClass('hide').fadeIn('slow'); + $('#new-topics-alert').translateText(text).removeClass('hide').fadeIn('slow'); $('#category-no-topics').addClass('hide'); }; Recent.loadMoreTopics = function(direction) { - if(direction < 0 || !$('#topics-container').length) { + if(direction < 0 || !$('[component="category"]').length) { return; } infinitescroll.loadMore('topics.loadMoreFromSet', { - after: $('#topics-container').attr('data-nextstart'), + after: $('[component="category"]').attr('data-nextstart'), set: 'topics:recent' }, function(data, done) { if (data.topics && data.topics.length) { Recent.onTopicsLoaded('recent', data.topics, false, done); - $('#topics-container').attr('data-nextstart', data.nextStart); + $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); } @@ -91,7 +114,7 @@ define('forum/recent', ['forum/infinitescroll'], function(infinitescroll) { Recent.onTopicsLoaded = function(templateName, topics, showSelect, callback) { topics = topics.filter(function(topic) { - return !$('#topics-container li[data-tid=' + topic.tid + ']').length; + return !components.get('category/topic', 'tid', topic.tid).length; }); if (!topics.length) { @@ -101,8 +124,8 @@ define('forum/recent', ['forum/infinitescroll'], function(infinitescroll) { infinitescroll.parseAndTranslate(templateName, 'topics', {topics: topics, showSelect: showSelect}, function(html) { $('#category-no-topics').remove(); - $('#topics-container').append(html); - html.find('span.timeago').timeago(); + $('[component="category"]').append(html); + html.find('.timeago').timeago(); app.createUserTooltips(); utils.makeNumbersHumanReadable(html.find('.human-readable-number')); $(window).trigger('action:topics.loaded'); diff --git a/public/src/client/reset.js b/public/src/client/reset.js index 2cbad172ae..568d0739a1 100644 --- a/public/src/client/reset.js +++ b/public/src/client/reset.js @@ -1,3 +1,6 @@ +"use strict"; +/*globals define, app, socket*/ + define('forum/reset', function() { var ResetPassword = {}; @@ -21,6 +24,7 @@ define('forum/reset', function() { successEl.addClass('hide').hide(); errorEl.removeClass('hide').show(); } + return false; }); }; diff --git a/public/src/client/reset_code.js b/public/src/client/reset_code.js index 9a7fc80075..846feffb42 100644 --- a/public/src/client/reset_code.js +++ b/public/src/client/reset_code.js @@ -1,3 +1,6 @@ +"use strict"; +/*globals define, app, ajaxify, socket, RELATIVE_PATH*/ + define('forum/reset_code', function() { var ResetCode = {}; @@ -11,43 +14,24 @@ define('forum/reset_code', function() { resetEl.on('click', function() { if (password.val().length < 6) { - $('#error').addClass('hide').hide(); - noticeEl.find('strong').html('Invalid Password'); - noticeEl.find('p').html('The password entered is too short, please pick a different password.'); - noticeEl.removeClass('hide').css({display: 'block'}); - } else if (password.value !== repeat.value) { - $('#error').hide(); - noticeEl.find('strong').html('Invalid Password'); - noticeEl.find('p').html('The two passwords you\'ve entered do not match.'); - noticeEl.removeClass('hide').css({display: 'block'}); + app.alertError('[[reset_password:password_too_short]]'); + } else if (password.val() !== repeat.val()) { + app.alertError('[[reset_password:passwords_do_not_match]]'); } else { + resetEl.prop('disabled', true).html(' Changing Password'); socket.emit('user.reset.commit', { code: reset_code, password: password.val() }, function(err) { - if(err) { + if (err) { + ajaxify.refresh(); return app.alertError(err.message); } - $('#error').addClass('hide').hide(); - $('#notice').addClass('hide').hide(); - $('#success').removeClass('hide').addClass('show').show(); - }); - } - }); - socket.emit('user.reset.valid', reset_code, function(err, valid) { - if(err) { - return app.alertError(err.message); - } - - if (valid) { - resetEl.prop('disabled', false); - } else { - var formEl = $('#reset-form'); - // Show error message - $('#error').show(); - formEl.remove(); + window.location.href = RELATIVE_PATH + '/login'; + }); } + return false; }); }; diff --git a/public/src/client/search.js b/public/src/client/search.js index 861d8dd441..900a4d1d6d 100644 --- a/public/src/client/search.js +++ b/public/src/client/search.js @@ -1,35 +1,160 @@ -define('forum/search', ['search'], function(searchModule) { +'use strict'; + +/* globals app, define, utils, socket*/ + +define('forum/search', ['search', 'autocomplete'], function(searchModule, autocomplete) { var Search = {}; Search.init = function() { - var searchQuery = $('#post-results').attr('data-search-query'); - var regexes = []; - var searchTerms = searchQuery.split(' '); - for (var i=0; i' + regexes[i].term + '
    '); - } - result.html(text).find('img').addClass('img-responsive'); + $('#advanced-search #search-input').val(searchQuery); + + var searchIn = $('#advanced-search #search-in'); + + fillOutForm(); + + searchIn.on('change', function() { + updateFormItemVisiblity(searchIn.val()); }); - $('#search-form input').val(searchQuery); + highlightMatches(searchQuery); - $('#mobile-search-form').off('submit').on('submit', function(e) { + $('#advanced-search').off('submit').on('submit', function(e) { e.preventDefault(); - var input = $(this).find('input'); - searchModule.query(input.val(), function() { + var input = $(this).find('#search-input'); + + var searchData = getSearchData(); + searchData.term = input.val(); + + searchModule.query(searchData, function() { input.val(''); }); }); + + handleSavePreferences(); + + enableAutoComplete(); }; + function getSearchData() { + var form = $('#advanced-search'); + var searchData = { + in: form.find('#search-in').val() + }; + + if (searchData.in === 'posts' || searchData.in === 'titlesposts' || searchData.in === 'titles') { + searchData.by = form.find('#posted-by-user').val(); + searchData.categories = form.find('#posted-in-categories').val(); + searchData.searchChildren = form.find('#search-children').is(':checked'); + searchData.replies = form.find('#reply-count').val(); + searchData.repliesFilter = form.find('#reply-count-filter').val(); + searchData.timeFilter = form.find('#post-time-filter').val(); + searchData.timeRange = form.find('#post-time-range').val(); + searchData.sortBy = form.find('#post-sort-by').val(); + searchData.sortDirection = form.find('#post-sort-direction').val(); + searchData.showAs = form.find('#show-as-topics').is(':checked') ? 'topics' : 'posts'; + } + + return searchData; + } + + function updateFormItemVisiblity(searchIn) { + var hide = searchIn.indexOf('posts') === -1 && searchIn.indexOf('titles') === -1; + $('.post-search-item').toggleClass('hide', hide); + } + + function fillOutForm() { + var params = utils.params(); + var searchData = getSearchPreferences(); + params = utils.merge(searchData, params); + + if (params) { + if (params.in) { + $('#search-in').val(params.in); + updateFormItemVisiblity(params.in); + } + + if (params.by) { + $('#posted-by-user').val(params.by); + } + + if (params.categories) { + $('#posted-in-categories').val(params.categories); + } + + if (params.searchChildren) { + $('#search-children').prop('checked', true); + } + + if (params.replies) { + $('#reply-count').val(params.replies); + $('#reply-count-filter').val(params.repliesFilter); + } + + if (params.timeRange) { + $('#post-time-range').val(params.timeRange); + $('#post-time-filter').val(params.timeFilter); + } + + if (params.sortBy) { + $('#post-sort-by').val(params.sortBy); + $('#post-sort-direction').val(params.sortDirection); + } + + if (params.showAs) { + var isTopic = params.showAs === 'topics'; + var isPost = params.showAs === 'posts'; + $('#show-as-topics').prop('checked', isTopic).parent().toggleClass('active', isTopic); + $('#show-as-posts').prop('checked', isPost).parent().toggleClass('active', isPost); + } + } + } + + function highlightMatches(searchQuery) { + if (!searchQuery) { + return; + } + + var regexStr = searchQuery.trim().split(' ').join('|'); + var regex = new RegExp('(' + regexStr + ')', 'gi'); + + $('.search-result-text').each(function() { + var result = $(this); + var text = result.html().replace(regex, '$1'); + result.html(text).find('img').addClass('img-responsive'); + }); + } + + function handleSavePreferences() { + $('#save-preferences').on('click', function() { + localStorage.setItem('search-preferences', JSON.stringify(getSearchData())); + app.alertSuccess('[[search:search-preferences-saved]]'); + return false; + }); + + $('#clear-preferences').on('click', function() { + localStorage.removeItem('search-preferences'); + var query = $('#search-input').val(); + $('#advanced-search')[0].reset(); + $('#search-input').val(query); + app.alertSuccess('[[search:search-preferences-cleared]]'); + return false; + }); + } + + function getSearchPreferences() { + try { + return JSON.parse(localStorage.getItem('search-preferences')); + } catch(e) { + return {}; + } + } + + function enableAutoComplete() { + autocomplete.user($('#posted-by-user')); + } + return Search; }); diff --git a/public/src/client/tag.js b/public/src/client/tag.js index f15af62f75..7328934e2d 100644 --- a/public/src/client/tag.js +++ b/public/src/client/tag.js @@ -1,6 +1,6 @@ 'use strict'; -/* globals define, app, socket */ +/* globals define, app, ajaxify, socket */ define('forum/tag', ['forum/recent', 'forum/infinitescroll'], function(recent, infinitescroll) { var Tag = {}; @@ -8,7 +8,7 @@ define('forum/tag', ['forum/recent', 'forum/infinitescroll'], function(recent, i Tag.init = function() { app.enterRoom('tags'); - if ($('body').height() <= $(window).height() && $('#topics-container').children().length >= 20) { + if ($('body').height() <= $(window).height() && $('[component="category"]').children().length >= 20) { $('#load-more-btn').show(); } @@ -19,17 +19,17 @@ define('forum/tag', ['forum/recent', 'forum/infinitescroll'], function(recent, i infinitescroll.init(loadMoreTopics); function loadMoreTopics(direction) { - if(direction < 0 || !$('#topics-container').length) { + if(direction < 0 || !$('[component="category"]').length) { return; } infinitescroll.loadMore('topics.loadMoreFromSet', { set: 'tag:' + ajaxify.variables.get('tag') + ':topics', - after: $('#topics-container').attr('data-nextstart') + after: $('[component="category"]').attr('data-nextstart') }, function(data, done) { if (data.topics && data.topics.length) { recent.onTopicsLoaded('tag', data.topics, false, done); - $('#topics-container').attr('data-nextstart', data.nextStart); + $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); $('#load-more-btn').hide(); diff --git a/public/src/client/topic.js b/public/src/client/topic.js index bf328d869e..f28a9097c8 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -1,7 +1,7 @@ 'use strict'; -/* globals define, app, templates, translator, socket, bootbox, config, ajaxify, RELATIVE_PATH, utils */ +/* globals define, app, components, templates, translator, socket, bootbox, config, ajaxify, RELATIVE_PATH, utils */ define('forum/topic', [ 'forum/pagination', @@ -11,15 +11,16 @@ define('forum/topic', [ 'forum/topic/events', 'forum/topic/browsing', 'forum/topic/posts', - 'navigator' -], function(pagination, infinitescroll, threadTools, postTools, events, browsing, posts, navigator) { + 'navigator', + 'sort' +], function(pagination, infinitescroll, threadTools, postTools, events, browsing, posts, navigator, sort) { var Topic = {}, currentUrl = ''; $(window).on('action:ajaxify.start', function(ev, data) { - if(data.url.indexOf('topic') !== 0) { + if (ajaxify.currentPage !== data.url) { navigator.hide(); - $('.header-topic-title').find('span').text('').hide(); + components.get('navbar/title').find('span').text('').hide(); app.removeAlert('bookmark'); events.removeListeners(); @@ -44,7 +45,7 @@ define('forum/topic', [ threadTools.init(tid, thread_state); events.init(); - handleSorting(); + sort.handleSort('topicPostSort', 'user.setTopicSort', 'topic/' + ajaxify.variables.get('topic_slug')); enableInfiniteLoadingOrPagination(); @@ -52,13 +53,13 @@ define('forum/topic', [ handleBookmark(tid); - navigator.init('.posts > .post-row', ajaxify.variables.get('postcount'), Topic.toTop, Topic.toBottom, Topic.navigatorCallback, Topic.calculateIndex); + navigator.init('[component="post"]', ajaxify.variables.get('postcount'), Topic.toTop, Topic.toBottom, Topic.navigatorCallback, Topic.calculateIndex); $(window).on('scroll', updateTopicTitle); $(window).trigger('action:topic.loaded'); - if (app.uid) { + if (app.user.uid) { socket.emit('topics.enter', tid, function(err, data) { if (err) { return app.alertError(err.message); @@ -75,7 +76,7 @@ define('forum/topic', [ Topic.toBottom = function() { socket.emit('topics.postcount', ajaxify.variables.get('topic_id'), function(err, postCount) { if (config.topicPostSort !== 'oldest_to_newest') { - postCount = 1; + postCount = 2; } navigator.scrollBottom(postCount - 1); }); @@ -104,26 +105,14 @@ define('forum/topic', [ function getPostIndex() { var parts = window.location.pathname.split('/'); - return parts[parts.length - 1] ? parseInt(parts[parts.length - 1], 10) : 0; - } - - function handleSorting() { - var threadSort = $('.thread-sort'); - threadSort.find('i').removeClass('fa-check'); - var currentSetting = threadSort.find('a[data-sort="' + config.topicPostSort + '"]'); - currentSetting.find('i').addClass('fa-check'); - - $('.thread-sort').on('click', 'a', function() { - var newSetting = $(this).attr('data-sort'); - socket.emit('user.setTopicSort', newSetting, function(err) { - config.topicPostSort = newSetting; - ajaxify.go('topic/' + ajaxify.variables.get('topic_slug')); - }); - }); + if (parts[parts.length - 1] && utils.isNumber(parts[parts.length - 1])) { + return parseInt(parts[parts.length - 1], 10); + } + return 0; } function addBlockQuoteHandler() { - $('#post-container').on('click', 'blockquote .toggle', function() { + components.get('topic').on('click', 'blockquote .toggle', function() { var blockQuote = $(this).parent('blockquote'); var toggle = $(this); blockQuote.toggleClass('uncollapsed'); @@ -135,7 +124,7 @@ define('forum/topic', [ function enableInfiniteLoadingOrPagination() { if(!config.usePagination) { - infinitescroll.init(posts.loadMorePosts, $('#post-container .post-row[data-index="0"]').height()); + infinitescroll.init(posts.loadMorePosts, components.get('post', 'index', 0).height()); } else { navigator.hide(); @@ -146,9 +135,9 @@ define('forum/topic', [ function updateTopicTitle() { if($(window).scrollTop() > 50) { - $('.header-topic-title').find('span').text(ajaxify.variables.get('topic_name')).show(); + components.get('navbar/title').find('span').text(ajaxify.variables.get('topic_name')).show(); } else { - $('.header-topic-title').find('span').text('').hide(); + components.get('navbar/title').find('span').text('').hide(); } } @@ -159,18 +148,18 @@ define('forum/topic', [ return index; }; - Topic.navigatorCallback = function(element, elementCount) { + Topic.navigatorCallback = function(topPostIndex, bottomPostIndex, elementCount) { var path = ajaxify.removeRelativePath(window.location.pathname.slice(1)); if (!path.startsWith('topic')) { return 1; } - var postIndex = parseInt(element.attr('data-index'), 10); - var index = postIndex + 1; + var postIndex = topPostIndex; + var index = bottomPostIndex; if (config.topicPostSort !== 'oldest_to_newest') { - if (postIndex === 0) { + if (bottomPostIndex === 0) { index = 1; } else { - index = Math.max(elementCount - postIndex + 1, 1); + index = Math.max(elementCount - bottomPostIndex + 2, 1); } } @@ -186,8 +175,8 @@ define('forum/topic', [ var topicId = parts[1], slug = parts[2]; var newUrl = 'topic/' + topicId + '/' + (slug ? slug : ''); - if (postIndex > 0) { - newUrl += '/' + (postIndex + 1); + if (postIndex > 1) { + newUrl += '/' + postIndex; } if (newUrl !== currentUrl) { diff --git a/public/src/client/topic/browsing.js b/public/src/client/topic/browsing.js index 6541cdf68a..7c14fab158 100644 --- a/public/src/client/topic/browsing.js +++ b/public/src/client/topic/browsing.js @@ -9,10 +9,10 @@ define('forum/topic/browsing', function() { var Browsing = {}; Browsing.onUpdateUsersInRoom = function(data) { - if(data && data.room.indexOf('topic_' + ajaxify.variables.get('topic_id')) !== -1) { - $('.browsing-users').toggleClass('hidden', !data.users.length); + if (data && data.room.indexOf('topic_' + ajaxify.variables.get('topic_id')) !== -1) { + $('[component="topic/browsing/list"]').parent().toggleClass('hidden', !data.users.length); for(var i=0; i'); } } @@ -97,11 +99,11 @@ define('forum/topic/browsing', function() { if (!count || count < 0) { count = 0; } - $('.user-count').text(count).parent().toggleClass('hidden', count === 0); + $('[component="topic/browsing/count"]').text(count).parent().toggleClass('hidden', count === 0); } function increaseUserCount(incr) { - updateUserCount(parseInt($('.user-count').first().text(), 10) + incr); + updateUserCount(parseInt($('[component="topic/browsing/count"]').first().text(), 10) + incr); } return Browsing; diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js index 90f54ec064..c3ecf6d29a 100644 --- a/public/src/client/topic/events.js +++ b/public/src/client/topic/events.js @@ -1,7 +1,7 @@ 'use strict'; -/* globals app, ajaxify, define, socket, translator, templates */ +/* globals app, ajaxify, components, define, socket, translator, templates */ define('forum/topic/events', [ 'forum/topic/browsing', @@ -69,7 +69,7 @@ define('forum/topic/events', [ }; function updatePostVotesAndUserReputation(data) { - var votes = $('li[data-pid="' + data.post.pid + '"] .votes'), + var votes = components.get('post/vote-count', data.post.pid), reputationElements = $('.reputation[data-uid="' + data.post.uid + '"]'); votes.html(data.post.votes).attr('data-votes', data.post.votes); @@ -77,7 +77,7 @@ define('forum/topic/events', [ } function updateFavouriteCount(data) { - $('li[data-pid="' + data.post.pid + '"] .favouriteCount').html(data.post.reputation).attr('data-favourites', data.post.reputation); + $('[data-pid="' + data.post.pid + '"] .favouriteCount').html(data.post.reputation).attr('data-favourites', data.post.reputation); } function toggleTopicDeleteState(data) { @@ -85,7 +85,7 @@ define('forum/topic/events', [ threadTools.setDeleteState(data); } - function onTopicPurged(tid) { + function onTopicPurged(data) { ajaxify.go('category/' + ajaxify.variables.get('category_id')); } @@ -96,12 +96,12 @@ define('forum/topic/events', [ } function onPostEdited(data) { - var editedPostEl = $('#content_' + data.pid), - editedPostTitle = $('#topic_title_' + data.pid); + var editedPostEl = components.get('post/content', data.pid), + editedPostHeader = components.get('post/header', data.pid); - if (editedPostTitle.length) { - editedPostTitle.fadeOut(250, function() { - editedPostTitle.html(data.title).fadeIn(250); + if (editedPostHeader.length) { + editedPostHeader.fadeOut(250, function() { + editedPostHeader.html(data.title).fadeIn(250); }); } @@ -111,7 +111,7 @@ define('forum/topic/events', [ app.replaceSelfLinks(editedPostEl.find('a')); editedPostEl.fadeIn(250); - $(window).trigger('action:posts.edited'); + $(window).trigger('action:posts.edited', data); }); if (data.tags && tagsUpdated(data.tags)) { @@ -139,14 +139,15 @@ define('forum/topic/events', [ } function onPostPurged(pid) { - $('#post-container li[data-pid="' + pid + '"]').fadeOut(500, function() { + components.get('post', 'pid', pid).fadeOut(500, function() { $(this).remove(); }); + postTools.updatePostCount(); } function togglePostDeleteState(data) { - var postEl = $('#post-container li[data-pid="' + data.pid + '"]'); + var postEl = components.get('post', 'pid', data.pid); if (!postEl.length) { return; @@ -156,17 +157,17 @@ define('forum/topic/events', [ var isDeleted = postEl.hasClass('deleted'); postTools.toggle(data.pid, isDeleted); - if (!app.isAdmin && parseInt(data.uid, 10) !== parseInt(app.uid, 10)) { + if (!app.user.isAdmin && parseInt(data.uid, 10) !== parseInt(app.user.uid, 10)) { if (isDeleted) { - postEl.find('.post-content').translateHtml('[[topic:post_is_deleted]]'); + postEl.find('[component="post/content"]').translateHtml('[[topic:post_is_deleted]]'); } else { - postEl.find('.post-content').html(data.content); + postEl.find('[component="post/content"]').html(data.content); } } } function togglePostFavourite(data) { - var favBtn = $('li[data-pid="' + data.post.pid + '"] .favourite'); + var favBtn = $('[data-pid="' + data.post.pid + '"] .favourite'); if (!favBtn.length) { return; } @@ -185,7 +186,7 @@ define('forum/topic/events', [ } function togglePostVote(data) { - var post = $('li[data-pid="' + data.post.pid + '"]'); + var post = $('[data-pid="' + data.post.pid + '"]'); post.find('.upvote').toggleClass('btn-primary upvoted', data.upvote); post.find('.downvote').toggleClass('btn-primary downvoted', data.downvote); diff --git a/public/src/client/topic/fork.js b/public/src/client/topic/fork.js index 92e9438b24..91ec8a2be9 100644 --- a/public/src/client/topic/fork.js +++ b/public/src/client/topic/fork.js @@ -1,6 +1,6 @@ 'use strict'; -/* globals define, app, translator, socket */ +/* globals define, app, ajaxify, components, translator, socket */ define('forum/topic/fork', function() { @@ -10,7 +10,7 @@ define('forum/topic/fork', function() { pids = []; Fork.init = function() { - $('.fork_thread').on('click', onForkThreadClicked); + components.get('topic/fork').on('click', onForkThreadClicked); }; function disableClicks() { @@ -18,11 +18,11 @@ define('forum/topic/fork', function() { } function disableClicksOnPosts() { - $('.post-row').on('click', 'button,a', disableClicks); + components.get('post').on('click', 'button,a', disableClicks); } function enableClicksOnPosts() { - $('.post-row').off('click', 'button,a', disableClicks); + components.get('post').off('click', 'button,a', disableClicks); } function onForkThreadClicked() { @@ -35,7 +35,7 @@ define('forum/topic/fork', function() { forkModal.find('.close,#fork_thread_cancel').on('click', closeForkModal); forkModal.find('#fork-title').on('change', checkForkButtonEnable); - $('#post-container').on('click', 'li[data-pid]', function() { + components.get('topic').on('click', '[data-pid]', function() { togglePostSelection($(this)); }); @@ -58,7 +58,7 @@ define('forum/topic/fork', function() { pids: pids }, function(err, newTopic) { function fadeOutAndRemove(pid) { - $('#post-container li[data-pid="' + pid + '"]').fadeOut(500, function() { + components.get('post', 'pid', pid).fadeOut(500, function() { $(this).remove(); }); } @@ -101,8 +101,8 @@ define('forum/topic/fork', function() { post.css('opacity', '1.0'); } - if(pids.length) { - pids.sort(); + if (pids.length) { + pids.sort(function(a,b) { return a - b; }); forkModal.find('#fork-pids').html(pids.toString()); } else { showNoPostsSelected(); @@ -125,10 +125,11 @@ define('forum/topic/fork', function() { function closeForkModal() { for(var i=0; i 0) { + if ($(selection.baseNode).parents('[component="post/content"]').length > 0) { var snippet = selection.toString(); if (snippet.length) { selectionText = '> ' + snippet.replace(/\n/g, '\n> ') + '\n\n'; @@ -185,7 +197,7 @@ define('forum/topic/postTools', ['composer', 'share', 'navigator'], function(com } function toggleVote(button, className, method) { - var post = button.parents('.post-row'), + var post = button.parents('[data-pid]'), currentState = post.find(className).length; socket.emit(currentState ? 'posts.unvote' : method , { @@ -222,7 +234,7 @@ define('forum/topic/postTools', ['composer', 'share', 'navigator'], function(com } function getData(button, data) { - return button.parents('.post-row').attr(data); + return button.parents('[data-pid]').attr(data); } function getUserName(button) { @@ -241,7 +253,7 @@ define('forum/topic/postTools', ['composer', 'share', 'navigator'], function(com function deletePost(button, tid) { var pid = getData(button, 'data-pid'), - postEl = $('#post-container li[data-pid="' + pid + '"]'), + postEl = components.get('post', 'pid', pid), action = !postEl.hasClass('deleted') ? 'delete' : 'restore'; postAction(action, pid, tid); @@ -290,7 +302,7 @@ define('forum/topic/postTools', ['composer', 'share', 'navigator'], function(com }); moveBtn.on('click', function() { - movePost(button.parents('.post-row'), getData(button, 'data-pid'), topicId.val()); + movePost(button.parents('[data-pid]'), getData(button, 'data-pid'), topicId.val()); }); } @@ -338,7 +350,7 @@ define('forum/topic/postTools', ['composer', 'share', 'navigator'], function(com } function openChat(button) { - var post = button.parents('li.post-row'); + var post = button.parents('data-pid'); app.openChat(post.attr('data-username'), post.attr('data-uid')); button.parents('.btn-group').find('.dropdown-toggle').click(); diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 6303ca8864..c2ea3940ff 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -1,7 +1,6 @@ - 'use strict'; -/* globals config, app, ajaxify, define, socket, utils */ +/* globals config, app, ajaxify, components, define, socket, utils */ define('forum/topic/posts', [ 'forum/pagination', @@ -14,45 +13,51 @@ define('forum/topic/posts', [ Posts.onNewPost = function(data) { var tid = ajaxify.variables.get('topic_id'); - if(data && data.posts && data.posts.length && parseInt(data.posts[0].tid, 10) !== parseInt(tid, 10)) { + if (data && data.posts && data.posts.length && parseInt(data.posts[0].tid, 10) !== parseInt(tid, 10)) { return; } - if(config.usePagination) { + if (config.usePagination) { return onNewPostPagination(data); } for (var i=0; i'); } }); postTools.updatePostCount(); - addBlockquoteEllipses(element.find('.post-content > blockquote')); + addBlockquoteEllipses(element.find('[component="post/content"] > blockquote')); hidePostToolsForDeletedPosts(element); showBottomPostBar(); }; function showBottomPostBar() { - if($('#post-container .post-row').length > 1 || !$('#post-container li[data-index="0"]').length) { + if(components.get('post').length > 1 || !components.get('post', 'index', 0).length) { $('.bottom-post-bar').removeClass('hide'); } } function hidePostToolsForDeletedPosts(element) { - element.find('li.deleted').each(function() { + element.find('[data-pid].deleted').each(function() { postTools.toggle($(this).attr('data-pid'), true); }); } @@ -258,4 +261,4 @@ define('forum/topic/posts', [ return Posts; -}); +}); \ No newline at end of file diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js index 41a3d532bf..fe8bc1fcfb 100644 --- a/public/src/client/topic/threadTools.js +++ b/public/src/client/topic/threadTools.js @@ -1,6 +1,6 @@ 'use strict'; -/* globals define, app, translator, ajaxify, socket, bootbox */ +/* globals define, app, components, translator, ajaxify, socket, bootbox */ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move'], function(fork, move) { @@ -21,27 +21,27 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move'], func ThreadTools.setPinnedState({tid: tid, isPinned: true}); } - $('.delete_thread').on('click', function() { + components.get('topic/delete').on('click', function() { topicCommand(threadState.deleted ? 'restore' : 'delete', tid); return false; }); - $('.purge_thread').on('click', function() { + components.get('topic/purge').on('click', function() { topicCommand('purge', tid); return false; }); - $('.lock_thread').on('click', function() { + components.get('topic/lock').on('click', function() { socket.emit(threadState.locked ? 'topics.unlock' : 'topics.lock', {tids: [tid], cid: ajaxify.variables.get('category_id')}); return false; }); - $('.pin_thread').on('click', function() { + components.get('topic/pin').on('click', function() { socket.emit(threadState.pinned ? 'topics.unpin' : 'topics.pin', {tids: [tid], cid: ajaxify.variables.get('category_id')}); return false; }); - $('.markAsUnreadForAll').on('click', function() { + components.get('topic/mark-unread-for-all').on('click', function() { var btn = $(this); socket.emit('topics.markAsUnreadForAll', [tid], function(err) { if(err) { @@ -53,15 +53,18 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move'], func return false; }); - $('.move_thread').on('click', function(e) { + components.get('topic/move').on('click', function(e) { move.init([tid], ajaxify.variables.get('category_id')); return false; }); fork.init(); - $('.posts').on('click', '.follow', function() { - socket.emit('topics.follow', tid, function(err, state) { + components.get('topic').on('click', '[component="topic/follow"]', follow); + components.get('topic/follow').off('click').on('click', follow); + + function follow() { + socket.emit('topics.toggleFollow', tid, function(err, state) { if(err) { return app.alert({ type: 'danger', @@ -83,7 +86,7 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move'], func }); return false; - }); + } }; function topicCommand(command, tid) { @@ -97,35 +100,36 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move'], func } ThreadTools.setLockedState = function(data) { - var threadEl = $('#post-container'); + var threadEl = components.get('topic'); if (parseInt(data.tid, 10) === parseInt(threadEl.attr('data-tid'), 10)) { - var isLocked = data.isLocked && !app.isAdmin; + var isLocked = data.isLocked && !app.user.isAdmin; - $('.lock_thread').translateHtml(' [[topic:thread_tools.' + (data.isLocked ? 'un': '') + 'lock]]'); + components.get('topic/lock').translateHtml(' [[topic:thread_tools.' + (data.isLocked ? 'un': '') + 'lock]]'); translator.translate(isLocked ? '[[topic:locked]]' : '[[topic:reply]]', function(translated) { var className = isLocked ? 'fa-lock' : 'fa-reply'; - threadEl.find('.post_reply').html(' ' + translated); - $('.topic-main-buttons .post_reply').attr('disabled', isLocked).html(isLocked ? ' ' + translated : translated); + threadEl.find('[component="post/reply"]').html(' ' + translated).attr('disabled', isLocked); + $('[component="topic/reply"]').attr('disabled', isLocked).html(isLocked ? ' ' + translated : translated); }); - threadEl.find('.quote, .edit, .delete').toggleClass('hidden', isLocked); - $('.topic-title i.fa-lock').toggleClass('hide', !data.isLocked); + threadEl.find('[component="post/quote"], [component="post/edit"], [component="post/delete"]').toggleClass('hidden', isLocked); + $('[component="post/header"] i.fa-lock').toggleClass('hide', !data.isLocked); ThreadTools.threadState.locked = data.isLocked; } }; ThreadTools.setDeleteState = function(data) { - var threadEl = $('#post-container'); + var threadEl = components.get('topic'); if (parseInt(data.tid, 10) !== parseInt(threadEl.attr('data-tid'), 10)) { return; } - $('.delete_thread span').translateHtml(' [[topic:thread_tools.' + (data.isDelete ? 'restore' : 'delete') + ']]'); + components.get('topic/delete').translateHtml(' [[topic:thread_tools.' + (data.isDelete ? 'restore' : 'delete') + ']]'); threadEl.toggleClass('deleted', data.isDelete); ThreadTools.threadState.deleted = data.isDelete; - $('.purge_thread').toggleClass('hidden', !data.isDelete); + + components.get('topic/purge').toggleClass('hidden', !data.isDelete); if (data.isDelete) { translator.translate('[[topic:deleted_message]]', function(translated) { @@ -137,13 +141,13 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move'], func }; ThreadTools.setPinnedState = function(data) { - var threadEl = $('#post-container'); + var threadEl = components.get('topic'); if (parseInt(data.tid, 10) === parseInt(threadEl.attr('data-tid'), 10)) { translator.translate(' [[topic:thread_tools.' + (data.isPinned ? 'unpin' : 'pin') + ']]', function(translated) { - $('.pin_thread').html(translated); + components.get('topic/pin').html(translated); ThreadTools.threadState.pinned = data.isPinned; }); - $('.topic-title i.fa-thumb-tack').toggleClass('hide', !data.isPinned); + $('[component="post/header"] i.fa-thumb-tack').toggleClass('hide', !data.isPinned); } }; @@ -152,7 +156,7 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move'], func var iconClass = state ? 'fa fa-eye-slash' : 'fa fa-eye'; var text = state ? '[[topic:unwatch]]' : '[[topic:watch]]'; - var followEl = $('.posts .follow'); + var followEl = components.get('topic/follow'); translator.translate(title, function(titleTranslated) { followEl.attr('title', titleTranslated).find('i').attr('class', iconClass); diff --git a/public/src/client/unread.js b/public/src/client/unread.js index 342102f634..c8c1c96de9 100644 --- a/public/src/client/unread.js +++ b/public/src/client/unread.js @@ -6,7 +6,7 @@ define('forum/unread', ['forum/recent', 'topicSelect', 'forum/infinitescroll'], var Unread = {}; $(window).on('action:ajaxify.start', function(ev, data) { - if(data.url.indexOf('unread') !== 0) { + if (ajaxify.currentPage !== data.url) { recent.removeListeners(); } }); @@ -42,7 +42,7 @@ define('forum/unread', ['forum/recent', 'topicSelect', 'forum/infinitescroll'], app.alertSuccess('[[unread:topics_marked_as_read.success]]'); - $('#topics-container').empty(); + $('[component="category"]').empty(); $('#category-no-topics').removeClass('hidden'); $('.markread').addClass('hidden'); }); @@ -51,7 +51,7 @@ define('forum/unread', ['forum/recent', 'topicSelect', 'forum/infinitescroll'], $('.markread').on('click', '.category', function() { function getCategoryTids(cid) { var tids = []; - $('#topics-container .category-item[data-cid="' + cid + '"]').each(function() { + components.get('category/topic', 'cid', cid).each(function() { tids.push($(this).attr('data-tid')); }); return tids; @@ -72,7 +72,7 @@ define('forum/unread', ['forum/recent', 'topicSelect', 'forum/infinitescroll'], topicSelect.init(); - if ($("body").height() <= $(window).height() && $('#topics-container').children().length >= 20) { + if ($("body").height() <= $(window).height() && $('[component="category"]').children().length >= 20) { $('#load-more-btn').show(); } @@ -83,16 +83,16 @@ define('forum/unread', ['forum/recent', 'topicSelect', 'forum/infinitescroll'], infinitescroll.init(loadMoreTopics); function loadMoreTopics(direction) { - if(direction < 0 || !$('#topics-container').length) { + if(direction < 0 || !$('[component="category"]').length) { return; } infinitescroll.loadMore('topics.loadMoreUnreadTopics', { - after: $('#topics-container').attr('data-nextstart') + after: $('[component="category"]').attr('data-nextstart') }, function(data, done) { if (data.topics && data.topics.length) { recent.onTopicsLoaded('unread', data.topics, true, done); - $('#topics-container').attr('data-nextstart', data.nextStart); + $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); $('#load-more-btn').hide(); @@ -106,7 +106,7 @@ define('forum/unread', ['forum/recent', 'topicSelect', 'forum/infinitescroll'], app.alertSuccess('[[unread:topics_marked_as_read.success]]'); - if (!$('#topics-container').children().length) { + if (!$('[component="category"]').children().length) { $('#category-no-topics').removeClass('hidden'); $('.markread').addClass('hidden'); } @@ -114,7 +114,7 @@ define('forum/unread', ['forum/recent', 'topicSelect', 'forum/infinitescroll'], function removeTids(tids) { for(var i=0; i'); + if (category.icon) { link.append(' ' + category.name); } else { link.append(category.name); } - $('') .append(link) .appendTo($('.markread .dropdown-menu')); diff --git a/public/src/client/users.js b/public/src/client/users.js index a1e852bb9f..6b08f05cdd 100644 --- a/public/src/client/users.js +++ b/public/src/client/users.js @@ -86,66 +86,86 @@ define('forum/users', function() { function handleSearch() { var timeoutId = 0; - var lastSearch = null; $('#search-user').on('keyup', function() { - if (timeoutId !== 0) { + if (timeoutId) { clearTimeout(timeoutId); timeoutId = 0; } - timeoutId = setTimeout(function() { - function reset() { - notify.html(''); - notify.parent().removeClass('btn-warning label-warning btn-success label-success'); - } - var username = $('#search-user').val(); - var notify = $('#user-notfound-notify'); - - if (username === '') { - notify.html(''); - notify.parent().removeClass('btn-warning label-warning btn-success label-success'); - return; - } - - if (lastSearch === username) { - return; - } - lastSearch = username; - - notify.html(''); - - socket.emit('user.search', username, function(err, data) { - if (err) { - reset(); - return app.alertError(err.message); - } + timeoutId = setTimeout(doSearch, 250); + }); - if (!data) { - reset(); - return; - } + $('.search select, .search input[type="checkbox"]').on('change', function() { + doSearch(); + }); - templates.parse('users', 'users', data, function(html) { - translator.translate(html, function(translated) { - $('#users-container').html(translated); - - if (!data.users.length) { - translator.translate('[[error:no-user]]', function(translated) { - notify.html(translated); - notify.parent().addClass('btn-warning label-warning'); - }); - } else { - translator.translate('[[users:users-found-search-took, ' + data.users.length + ', ' + data.timing + ']]', function(translated) { - notify.html(translated); - notify.parent().addClass('btn-success label-success'); - }); - } - }); - }); + $('.users').on('click', '.pagination a', function() { + doSearch($(this).attr('data-page')); + return false; + }); + } + + function doSearch(page) { + function reset() { + notify.html(''); + notify.parent().removeClass('btn-warning label-warning btn-success label-success'); + } + + var username = $('#search-user').val(); + var notify = $('#user-notfound-notify'); + page = page || 1; + + notify.html(''); + var filters = []; + $('.user-filter').each(function() { + var $this = $(this); + if($this.is(':checked')) { + filters.push({ + field:$this.attr('data-filter-field'), + type: $this.attr('data-filter-type'), + value: $this.attr('data-filter-value') }); + } + }); - }, 250); + socket.emit('user.search', { + query: username, + page: page, + searchBy: ['username', 'fullname'], + sortBy: $('.search select').val(), + filterBy: filters + }, function(err, data) { + if (err) { + reset(); + return app.alertError(err.message); + } + + if (!data) { + return reset(); + } + + templates.parse('partials/paginator', {pagination: data.pagination}, function(html) { + $('.pagination-container').replaceWith(html); + }); + + templates.parse('users', 'users', data, function(html) { + translator.translate(html, function(translated) { + $('#users-container').html(translated); + + if (!data.users.length) { + translator.translate('[[error:no-user]]', function(translated) { + notify.html(translated); + notify.parent().removeClass('btn-success label-success').addClass('btn-warning label-warning'); + }); + } else { + translator.translate('[[users:users-found-search-took, ' + data.matchCount + ', ' + data.timing + ']]', function(translated) { + notify.html(translated); + notify.parent().removeClass('btn-warning label-warning').addClass('btn-success label-success'); + }); + } + }); + }); }); } diff --git a/public/src/components.js b/public/src/components.js new file mode 100644 index 0000000000..bef3c95117 --- /dev/null +++ b/public/src/components.js @@ -0,0 +1,47 @@ +"use strict"; + +var components = components || {}; + +(function() { + components.core = { + 'post': function(name, value) { + return $('[data-' + name + '="' + value + '"]'); + }, + 'post/content': function(pid) { + return components.core.post('pid', pid).find('[component="post/content"]'); + }, + 'post/header': function(pid) { + return components.core.post('pid', pid).find('[component="post/header"]'); + }, + 'post/anchor': function(index) { + return components.core.post('index', index).find('[component="post/anchor"]'); + }, + 'post/vote-count': function(pid) { + return components.core.post('pid', pid).find('[component="post/vote-count"]'); + }, + 'post/favourite-count': function(pid) { + return components.core.post('pid', pid).find('[component="post/favourite-count"]'); + }, + + 'user/postcount': function(uid) { + return $('[component="user/postcount"][data-uid="' + uid + '"]'); + }, + 'user/reputation': function(uid) { + return $('[component="user/reputation"][data-uid="' + uid + '"]'); + }, + + 'category/topic': function(name, value) { + return $('[data-' + name + '="' + value + '"]'); + } + }; + + components.get = function() { + var args = Array.prototype.slice.call(arguments, 1); + + if (components.core[arguments[0]] && args.length) { + return components.core[arguments[0]].apply(this, args); + } else { + return $('[component="' + arguments[0] + '"]'); + } + }; +}()); \ No newline at end of file diff --git a/public/src/helpers.js b/public/src/helpers.js deleted file mode 100644 index a89aeae0e2..0000000000 --- a/public/src/helpers.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -/*global templates*/ - - -(function(module) { - var helpers = {}; - - helpers.displayUsersLink = function(config) { - return (config.loggedIn || !config.privateUserInfo); - }; - - helpers.buildMetaTag = function(tag) { - var name = tag.name ? 'name="' + tag.name + '" ' : '', - property = tag.property ? 'property="' + tag.property + '" ' : '', - content = tag.content ? 'content="' + tag.content.replace(/\n/g, ' ') + '" ' : ''; - - return ''; - }; - - if ('undefined' !== typeof window) { - $(document).ready(module.exports); - } - - module.exports = function() { - var templates = templates || require('templates.js'); - - templates.registerHelper('displayUsersLink', helpers.displayUsersLink); - templates.registerHelper('buildMetaTag', helpers.buildMetaTag); - }; - -})('undefined' === typeof module ? { - module: { - exports: {} - } -} : module); diff --git a/public/src/modules/alerts.js b/public/src/modules/alerts.js index 4db3a1d9ab..15f592720e 100644 --- a/public/src/modules/alerts.js +++ b/public/src/modules/alerts.js @@ -77,6 +77,19 @@ define('alerts', function() { alert.children().fadeIn(100); alert.html(translatedHTML); }); + + // Handle changes in the clickfn + alert.off('click').removeClass('pointer'); + if (typeof params.clickfn === 'function') { + alert + .addClass('pointer') + .on('click', function (e) { + if(!$(e.target).is('.close')) { + params.clickfn(); + } + fadeOut(alert); + }); + } } function fadeOut(alert) { diff --git a/public/src/modules/autocomplete.js b/public/src/modules/autocomplete.js new file mode 100644 index 0000000000..d8b2311b98 --- /dev/null +++ b/public/src/modules/autocomplete.js @@ -0,0 +1,31 @@ + +'use strict'; + +/* globals define, socket, app */ + +define('autocomplete', function() { + var module = {}; + + module.user = function (input) { + input.autocomplete({ + delay: 100, + source: function(request, response) { + socket.emit('user.search', {query: request.term}, function(err, result) { + if (err) { + return app.alertError(err.message); + } + + if (result && result.users) { + var names = result.users.map(function(user) { + return user && user.username; + }); + response(names); + } + $('.ui-autocomplete a').attr('data-ajaxify', 'false'); + }); + } + }); + }; + + return module; +}); diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 02fcbba02e..760f19ca20 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -52,18 +52,9 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar, } else { ajaxify.go('chats/' + utils.slugify(userObj.username)); } - /*javascript:app.openChat(\'' + - userObj.username + - '\', ' + userObj.uid + - ');*/ }); })(userObj); } - - var seeAll = ''; - translator.translate(seeAll, function(translated) { - $(translated).appendTo(chatsListEl); - }); }); }); @@ -74,7 +65,7 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar, } var username = data.message.fromUser.username; - var isSelf = parseInt(data.message.fromUser.uid, 10) === parseInt(app.uid, 10); + var isSelf = parseInt(data.message.fromUser.uid, 10) === parseInt(app.user.uid, 10); data.message.self = data.self; if (isSelf) { username = data.message.toUser.username; @@ -211,13 +202,8 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar, if (ui.originalSize.height === ui.size.height) { return; } - var totalHeight = chatModal.find('.modal-content').outerHeight() - chatModal.find('.modal-header').outerHeight(); - var padding = parseInt(chatModal.find('.modal-body').css('padding-top'), 10) + parseInt(chatModal.find('.modal-body').css('padding-bottom'), 10); - var contentMargin = parseInt(chatModal.find('#chat-content').css('margin-top'), 10) + parseInt(chatModal.find('#chat-content').css('margin-bottom'), 10); - var sinceHeight = chatModal.find('.since-bar').outerHeight(true); - var inputGroupHeight = chatModal.find('.input-group').outerHeight(); - chatModal.find('#chat-content').css('height', totalHeight - padding - contentMargin - sinceHeight - inputGroupHeight); + chatModal.find('#chat-content').css('height', module.calculateChatListHeight(chatModal)); }); chatModal.find('#chat-with-name').html(username); @@ -304,6 +290,10 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar, chatModal.data('modal', null); taskbar.discard('chat', chatModal.attr('UUID')); Chats.notifyTyping(chatModal.attr('touid'), false); + + if (chatModal.attr('data-mobile')) { + module.disableMobileBehaviour(chatModal); + } }; module.center = function(chatModal) { @@ -330,6 +320,36 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar, module.bringModalToTop(chatModal); module.focusInput(chatModal); socket.emit('modules.chats.markRead', chatModal.attr('touid')); + + var env = utils.findBootstrapEnvironment(); + if (env === 'xs' || env === 'sm') { + module.enableMobileBehaviour(chatModal); + } + }; + + module.enableMobileBehaviour = function(modalEl) { + app.toggleNavbar(false); + modalEl.attr('data-mobile', '1'); + var messagesEl = modalEl.find('#chat-content'); + messagesEl.css('height', module.calculateChatListHeight(modalEl)); + + $(window).on('resize', function() { + messagesEl.css('height', module.calculateChatListHeight(modalEl)); + }); + }; + + module.disableMobileBehaviour = function(modalEl) { + app.toggleNavbar(true); + }; + + module.calculateChatListHeight = function(modalEl) { + var totalHeight = modalEl.find('.modal-content').outerHeight() - modalEl.find('.modal-header').outerHeight(), + padding = parseInt(modalEl.find('.modal-body').css('padding-top'), 10) + parseInt(modalEl.find('.modal-body').css('padding-bottom'), 10), + contentMargin = parseInt(modalEl.find('#chat-content').css('margin-top'), 10) + parseInt(modalEl.find('#chat-content').css('margin-bottom'), 10), + sinceHeight = modalEl.find('.since-bar').outerHeight(true), + inputGroupHeight = modalEl.find('.input-group').outerHeight(); + + return totalHeight - padding - contentMargin - sinceHeight - inputGroupHeight; }; module.minimize = function(uuid) { @@ -386,7 +406,7 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar, Chats.parseMessage(data, function(html) { var message = $(html); message.find('img:not(".chat-user-image")').addClass('img-responsive'); - message.find('span.timeago').timeago(); + message.find('.timeago').timeago(); message.insertBefore(typingNotif); Chats.scrollToBottom(chatContent); diff --git a/public/src/modules/composer.js b/public/src/modules/composer.js index 5a80616517..33fa2ac208 100644 --- a/public/src/modules/composer.js +++ b/public/src/modules/composer.js @@ -16,11 +16,44 @@ define('composer', [ var composer = { active: undefined, posts: {}, - bsEnvironment: undefined + bsEnvironment: undefined, + formatting: [] }; $(window).off('resize', onWindowResize).on('resize', onWindowResize); + $(window).on('popstate', function(ev, data) { + var env = utils.findBootstrapEnvironment(); + + if (composer.active && (env === 'xs' || env ==='sm')) { + if (!composer.posts[composer.active].modified) { + discard(composer.active); + return; + } + + translator.translate('[[modules:composer.discard]]', function(translated) { + bootbox.confirm(translated, function(confirm) { + if (confirm) { + discard(composer.active); + } else { + history.pushState({}, '', '#compose'); + } + }); + }); + } + }); + + $(window).on('action:composer.topics.post', function(ev, data) { + localStorage.removeItem('category:' + data.data.cid + ':bookmark'); + localStorage.removeItem('category:' + data.data.cid + ':bookmark:clicked'); + ajaxify.go('topic/' + data.data.slug); + }); + + // Query server for formatting options + socket.emit('modules.composer.getFormattingOptions', function(err, options) { + composer.formatting = options; + }); + function onWindowResize() { if (composer.active !== undefined) { resize.reposition($('#cmp-uuid-' + composer.active)); @@ -68,23 +101,28 @@ define('composer', [ }); // Construct a save_id - if (0 !== parseInt(app.uid, 10)) { + if (0 !== parseInt(app.user.uid, 10)) { if (post.hasOwnProperty('cid')) { - post.save_id = ['composer', app.uid, 'cid', post.cid].join(':'); + post.save_id = ['composer', app.user.uid, 'cid', post.cid].join(':'); } else if (post.hasOwnProperty('tid')) { - post.save_id = ['composer', app.uid, 'tid', post.tid].join(':'); + post.save_id = ['composer', app.user.uid, 'tid', post.tid].join(':'); } else if (post.hasOwnProperty('pid')) { - post.save_id = ['composer', app.uid, 'pid', post.pid].join(':'); + post.save_id = ['composer', app.user.uid, 'pid', post.pid].join(':'); } } composer.posts[uuid] = post; composer.load(uuid); + + var env = utils.findBootstrapEnvironment(); + if (env === 'xs' || env ==='sm') { + history.pushState({}, '', '#compose'); + } } function composerAlert(message) { - $('.action-bar button').removeAttr('disabled'); + $('[data-action="post"]').removeAttr('disabled'); app.alert({ type: 'danger', timeout: 3000, @@ -99,12 +137,18 @@ define('composer', [ }; composer.newTopic = function(cid) { - push({ - cid: cid, - title: '', - body: '', - modified: false, - isMain: true + socket.emit('categories.isModerator', cid, function(err, isMod) { + if (err) { + return app.alertError(err.message); + } + push({ + cid: cid, + title: '', + body: '', + modified: false, + isMain: true, + isMod: isMod + }); }); }; @@ -134,14 +178,20 @@ define('composer', [ }; composer.newReply = function(tid, pid, title, text) { - translator.translate(text, config.defaultLang, function(translated) { - push({ - tid: tid, - toPid: pid, - title: title, - body: translated, - modified: false, - isMain: false + socket.emit('topics.isModerator', tid, function(err, isMod) { + if (err) { + return app.alertError(err.message); + } + translator.translate(text, config.defaultLang, function(translated) { + push({ + tid: tid, + toPid: pid, + title: title, + body: translated, + modified: false, + isMain: false, + isMod: isMod + }); }); }); }; @@ -183,7 +233,7 @@ define('composer', [ function emit() { socket.emit('modules.composer.notifyTyping', { tid: postData.tid, - uid: app.uid + uid: app.user.uid }); } @@ -203,7 +253,7 @@ define('composer', [ } socket.emit('modules.composer.stopNotifyTyping', { tid: postData.tid, - uid: app.uid + uid: app.user.uid }); } @@ -215,25 +265,31 @@ define('composer', [ } function createNewComposer(post_uuid) { - var allowTopicsThumbnail = config.allowTopicsThumbnail && composer.posts[post_uuid].isMain && (config.hasImageUploadPlugin || config.allowFileUploads), - isTopic = composer.posts[post_uuid] ? !!composer.posts[post_uuid].cid : false, - isMain = composer.posts[post_uuid] ? !!composer.posts[post_uuid].isMain : false, - isEditing = composer.posts[post_uuid] ? !!composer.posts[post_uuid].pid : false, - isGuestPost = composer.posts[post_uuid] ? composer.posts[post_uuid].uid === '0' : null; + var postData = composer.posts[post_uuid]; - composer.bsEnvironment = utils.findBootstrapEnvironment(); + var allowTopicsThumbnail = config.allowTopicsThumbnail && postData.isMain && (config.hasImageUploadPlugin || config.allowFileUploads), + isTopic = postData ? !!postData.cid : false, + isMain = postData ? !!postData.isMain : false, + isEditing = postData ? !!postData.pid : false, + isGuestPost = postData ? parseInt(postData.uid, 10) === 0 : false; - var template = (composer.bsEnvironment === 'xs' || composer.bsEnvironment === 'sm') ? 'composer-mobile' : 'composer'; + composer.bsEnvironment = utils.findBootstrapEnvironment(); var data = { + mobile: composer.bsEnvironment === 'xs' || composer.bsEnvironment === 'sm', allowTopicsThumbnail: allowTopicsThumbnail, showTags: isTopic || isMain, + minimumTagLength: config.minimumTagLength, + maximumTagLength: config.maximumTagLength, isTopic: isTopic, - showHandleInput: (app.user.uid === 0 || (isEditing && isGuestPost && app.user.isAdmin)) && config.allowGuestHandles, - handle: composer.posts[post_uuid] ? composer.posts[post_uuid].handle || '' : undefined + isEditing: isEditing, + showHandleInput: config.allowGuestHandles && (app.user.uid === 0 || (isEditing && isGuestPost && app.user.isAdmin)), + handle: postData ? postData.handle || '' : undefined, + formatting: composer.formatting, + isAdminOrMod: app.user.isAdmin || postData.isMod }; - parseAndTranslate(template, data, function(composerTemplate) { + parseAndTranslate('composer', data, function(composerTemplate) { if ($('#cmp-uuid-' + post_uuid).length) { return; } @@ -244,12 +300,12 @@ define('composer', [ $(document.body).append(composerTemplate); var postContainer = $(composerTemplate[0]), - postData = composer.posts[post_uuid], bodyEl = postContainer.find('textarea'), draft = drafts.getDraft(postData.save_id); tags.init(postContainer, composer.posts[post_uuid]); categoryList.init(postContainer, composer.posts[post_uuid]); + updateTitle(postData, postContainer); activate(post_uuid); @@ -269,22 +325,28 @@ define('composer', [ composer.posts[post_uuid].modified = true; }); - postContainer.on('click', '.action-bar button[data-action="post"]', function() { + postContainer.on('click', '[data-action="post"]', function() { $(this).attr('disabled', true); post(post_uuid); }); - postContainer.on('click', '.action-bar button[data-action="discard"]', function() { + postContainer.on('click', '[data-action="post-lock"]', function() { + $(this).attr('disabled', true); + post(post_uuid, {lock: true}); + }); + + postContainer.on('click', '[data-action="discard"]', function() { if (!composer.posts[post_uuid].modified) { discard(post_uuid); return; } - + var btn = $(this).prop('disabled', true); translator.translate('[[modules:composer.discard]]', function(translated) { bootbox.confirm(translated, function(confirm) { if (confirm) { discard(post_uuid); } + btn.prop('disabled', false); }); }); }); @@ -312,6 +374,7 @@ define('composer', [ resize.handleResize(postContainer); handleHelp(postContainer); + handleTogglePreview(postContainer); $(window).trigger('action:composer.loaded', { post_uuid: post_uuid @@ -340,11 +403,32 @@ define('composer', [ }); } + function handleTogglePreview(postContainer) { + var showBtn = postContainer.find('.write-container .toggle-preview'), + hideBtn = postContainer.find('.preview-container .toggle-preview'); + + hideBtn.on('click', function() { + $('.preview-container').addClass('hide'); + $('.write-container').addClass('maximized'); + showBtn.removeClass('hide'); + + $('.write').focus(); + }); + + showBtn.on('click', function() { + $('.preview-container').removeClass('hide'); + $('.write-container').removeClass('maximized'); + showBtn.addClass('hide'); + + $('.write').focus(); + }); + } + function updateTitle(postData, postContainer) { var titleEl = postContainer.find('.title'); if (parseInt(postData.tid, 10) > 0) { - titleEl.translateVal('[[topic:composer.replying_to, ' + postData.title + ']]'); + titleEl.translateVal('[[topic:composer.replying_to, "' + postData.title + '"]]'); titleEl.prop('disabled', true); } else if (parseInt(postData.pid, 10) > 0) { titleEl.val(postData.title); @@ -380,7 +464,7 @@ define('composer', [ } } - function post(post_uuid) { + function post(post_uuid, options) { var postData = composer.posts[post_uuid], postContainer = $('#cmp-uuid-' + post_uuid), handleEl = postContainer.find('.handle'), @@ -388,6 +472,8 @@ define('composer', [ bodyEl = postContainer.find('textarea'), thumbEl = postContainer.find('input#topic-thumb-url'); + options = options || {}; + titleEl.val(titleEl.val().trim()); bodyEl.val(bodyEl.val().trim()); if (thumbEl.length) { @@ -406,39 +492,34 @@ define('composer', [ return composerAlert('[[error:invalid-title]]'); } else if (bodyEl.val().length < parseInt(config.minimumPostLength, 10)) { return composerAlert('[[error:content-too-short, ' + config.minimumPostLength + ']]'); + } else if (bodyEl.val().length > parseInt(config.maximumPostLength, 10)) { + return composerAlert('[[error:content-too-long, ' + config.maximumPostLength + ']]'); } var composerData = {}, action; if (parseInt(postData.cid, 10) > 0) { + action = 'topics.post'; composerData = { handle: handleEl ? handleEl.val() : undefined, title: titleEl.val(), content: bodyEl.val(), topic_thumb: thumbEl.val() || '', category_id: postData.cid, - tags: tags.getTags(post_uuid) + tags: tags.getTags(post_uuid), + lock: options.lock || false }; - - action = 'topics.post'; - socket.emit(action, composerData, function(err, topic) { - done(err); - - if (!err) { - ajaxify.go('topic/' + topic.slug); - } - }); } else if (parseInt(postData.tid, 10) > 0) { + action = 'posts.reply'; composerData = { tid: postData.tid, handle: handleEl ? handleEl.val() : undefined, content: bodyEl.val(), - toPid: postData.toPid + toPid: postData.toPid, + lock: options.lock || false }; - - action = 'posts.reply'; - socket.emit(action, composerData, done); } else if (parseInt(postData.pid, 10) > 0) { + action = 'posts.edit'; composerData = { pid: postData.pid, handle: handleEl ? handleEl.val() : undefined, @@ -447,16 +528,13 @@ define('composer', [ topic_thumb: thumbEl.val() || '', tags: tags.getTags(post_uuid) }; - - action = 'posts.edit'; - socket.emit(action, composerData, done); } - function done(err) { - $('.action-bar button').removeAttr('disabled'); + socket.emit(action, composerData, function (err, data) { + $('[data-action="post"]').removeAttr('disabled'); if (err) { if (err.message === '[[error:email-not-confirmed]]') { - return showEmailConfirmAlert(err); + return app.showEmailConfirmWarning(err); } return app.alertError(err.message); @@ -465,26 +543,7 @@ define('composer', [ discard(post_uuid); drafts.removeDraft(postData.save_id); - $(window).trigger('action:composer.' + action, composerData); - } - } - - function showEmailConfirmAlert(err) { - app.alert({ - alert_id: 'email_confirm', - title: '[[global:alert.error]]', - message: err.message, - type: 'danger', - timeout: 0, - clickfn: function() { - app.removeAlert('email_confirm'); - socket.emit('user.emailConfirm', {}, function(err) { - if (err) { - return app.alertError(err.message); - } - app.alertSuccess('[[notifications:email-confirm-sent]]'); - }); - } + $(window).trigger('action:composer.' + action, {composerData: composerData, data: data}); }); } @@ -499,9 +558,10 @@ define('composer', [ composer.active = undefined; taskbar.discard('composer', post_uuid); $('body').css({'margin-bottom': 0}); - $('.action-bar button').removeAttr('disabled'); + $('[data-action="post"]').removeAttr('disabled'); + - app.toggleNavbar(true); + $('html').removeClass('composing mobile'); } } diff --git a/public/src/modules/composer/categoryList.js b/public/src/modules/composer/categoryList.js index 30ece1875a..1eb86051bf 100644 --- a/public/src/modules/composer/categoryList.js +++ b/public/src/modules/composer/categoryList.js @@ -19,7 +19,7 @@ define('composer/categoryList', function() { // Remove categories that are just external links categories = categories.filter(function(category) { - return !category.link + return !category.link; }); categories.forEach(function(category) { @@ -35,6 +35,8 @@ define('composer/categoryList', function() { if (postData.cid) { postData.cid = this.value; } + + $('[tabindex=' + (parseInt($(this).attr('tabindex'), 10) + 1) + ']').trigger('focus'); }); }; diff --git a/public/src/modules/composer/formatting.js b/public/src/modules/composer/formatting.js index f29e287a7f..05315a7edf 100644 --- a/public/src/modules/composer/formatting.js +++ b/public/src/modules/composer/formatting.js @@ -7,89 +7,48 @@ define('composer/formatting', ['composer/controls', 'composer/preview'], functio var formatting = {}; var formattingDispatchTable = { - 'fa fa-bold': function(textarea, selectionStart, selectionEnd){ - if(selectionStart === selectionEnd){ - controls.insertIntoTextarea(textarea, '**bolded text**'); - controls.updateTextareaSelection(textarea, selectionStart + 2, selectionStart + 13); - } else { - controls.wrapSelectionInTextareaWith(textarea, '**'); - controls.updateTextareaSelection(textarea, selectionStart + 2, selectionEnd + 2); - } - }, - - 'fa fa-italic': function(textarea, selectionStart, selectionEnd){ - if(selectionStart === selectionEnd){ - controls.insertIntoTextarea(textarea, "*italicised text*"); - controls.updateTextareaSelection(textarea, selectionStart + 1, selectionStart + 16); - } else { - controls.wrapSelectionInTextareaWith(textarea, '*'); - controls.updateTextareaSelection(textarea, selectionStart + 1, selectionEnd + 1); - } - }, - - 'fa fa-list': function(textarea, selectionStart, selectionEnd){ - if(selectionStart === selectionEnd){ - controls.insertIntoTextarea(textarea, "\n* list item"); - - // Highlight "list item" - controls.updateTextareaSelection(textarea, selectionStart + 3, selectionStart + 12); - } else { - controls.wrapSelectionInTextareaWith(textarea, '\n* ', ''); - controls.updateTextareaSelection(textarea, selectionStart + 3, selectionEnd + 3); - } - }, - - 'fa fa-link': function(textarea, selectionStart, selectionEnd){ - if(selectionStart === selectionEnd){ - controls.insertIntoTextarea(textarea, "[link text](link url)"); - - // Highlight "link url" - controls.updateTextareaSelection(textarea, selectionStart + 12, selectionEnd + 20); - } else { - controls.wrapSelectionInTextareaWith(textarea, '[', '](link url)'); - - // Highlight "link url" - controls.updateTextareaSelection(textarea, selectionEnd + 3, selectionEnd + 11); - } - }, - - 'fa fa-picture-o': function(){ + 'picture': function(){ $('#files').click(); }, - 'fa fa-upload': function(){ + upload: function(){ $('#files').click(); }, - 'fa fa-tags': function() { + tags: function() { $('.tags-container').toggleClass('hidden'); } }; - var customButtons = []; + var buttons = []; formatting.addComposerButtons = function() { - for (var button in customButtons) { - if (customButtons.hasOwnProperty(button)) { - $('.formatting-bar .btn-group form').before(''); - } + for(var x=0,numButtons=buttons.length;x'); } - } + }; formatting.addButton = function(iconClass, onClick) { - formattingDispatchTable[iconClass] = onClick; - customButtons.push({ + var name = iconClass.replace('fa fa-', ''); + + formattingDispatchTable[name] = onClick; + buttons.push({ + name: name, iconClass: iconClass }); - } + }; + + formatting.addButtonDispatch = function(name, onClick) { + formattingDispatchTable[name] = onClick; + }; formatting.addHandler = function(postContainer) { postContainer.on('click', '.formatting-bar span', function () { - var iconClass = $(this).find('i').attr('class'); - var textarea = $(this).parents('.composer').find('textarea')[0]; + var format = $(this).attr('data-format'), + textarea = $(this).parents('.composer').find('textarea')[0]; - if(formattingDispatchTable.hasOwnProperty(iconClass)){ - formattingDispatchTable[iconClass](textarea, textarea.selectionStart, textarea.selectionEnd); + if(formattingDispatchTable.hasOwnProperty(format)){ + formattingDispatchTable[format](textarea, textarea.selectionStart, textarea.selectionEnd); preview.render(postContainer); } }); diff --git a/public/src/modules/composer/resize.js b/public/src/modules/composer/resize.js index fb452b838a..66f22462f3 100644 --- a/public/src/modules/composer/resize.js +++ b/public/src/modules/composer/resize.js @@ -1,30 +1,49 @@ 'use strict'; -/* globals define, config, utils*/ +/* globals app, define, config, utils*/ -define('composer/resize', function() { - var resize = {}; - var env = utils.findBootstrapEnvironment(); - var oldPercentage = 0; +define('composer/resize', ['autosize'], function(autosize) { + var resize = {}, + oldPercentage = 0; resize.reposition = function(postContainer) { - var percentage = localStorage.getItem('composer:resizePercentage'); + var percentage = localStorage.getItem('composer:resizePercentage') || 0.5; doResize(postContainer, percentage); }; function doResize(postContainer, percentage) { + var env = utils.findBootstrapEnvironment(); + + + // todo, lump in browsers that don't support transform (ie8) here + // at this point we should use modernizr + if (env === 'sm' || env === 'xs' || window.innerHeight < 480) { + $('html').addClass('composing mobile'); + autosize(postContainer.find('textarea')[0]); + percentage = 1; + } else { + $('html').removeClass('composing mobile'); + } + if (percentage) { + var max = getMaximumPercentage(); + + if (percentage < 0.25) { + percentage = 0.25; + } else if (percentage > max) { + percentage = max; + } + if (env === 'md' || env === 'lg') { - postContainer.css('height', Math.floor($(window).height() * percentage) + 'px'); + postContainer.css('transform', 'translate(0, ' + (Math.abs(1-percentage) * 100) + '%)'); + } else { + postContainer.removeAttr('style'); } } - if (env === 'sm' || env === 'xs') { - app.toggleNavbar(false); - postContainer.css('height', $(window).height()); - } + postContainer.percentage = percentage; if (config.hasImageUploadPlugin) { postContainer.find('.img-upload-btn').removeClass('hide'); @@ -36,8 +55,9 @@ define('composer/resize', function() { postContainer.find('#files.lt-ie9').removeClass('hide'); } - postContainer.css('visibility', 'visible').css('z-index', 2); + postContainer.css('visibility', 'visible'); + // Add some extra space at the bottom of the body so that the user can still scroll to the last post w/ composer open $('body').css({'margin-bottom': postContainer.css('height')}); resizeWritePreview(postContainer); @@ -45,9 +65,10 @@ define('composer/resize', function() { resize.handleResize = function(postContainer) { function resizeStart(e) { - var resizeRect = resizeEl[0].getBoundingClientRect(); - var resizeCenterY = resizeRect.top + (resizeRect.height/2); - resizeOffset = resizeCenterY - e.clientY; + var resizeRect = resizeEl[0].getBoundingClientRect(), + resizeCenterY = resizeRect.top + (resizeRect.height / 2); + + resizeOffset = (resizeCenterY - e.clientY) / 2; resizeActive = true; resizeDown = e.clientY; @@ -58,29 +79,37 @@ define('composer/resize', function() { function resizeStop(e) { resizeActive = false; - toggleHeight(e); postContainer.find('textarea').focus(); $(window).off('mousemove', resizeAction); $(window).off('mouseup', resizeStop); $('body').off('touchmove', resizeTouchAction); + + var position = (e.clientY - resizeOffset), + newHeight = $(window).height() - position, + windowHeight = $(window).height(); + + if (newHeight > windowHeight - $('#header-menu').height() - (windowHeight / 15)) { + snapToTop = true; + } else { + snapToTop = false; + } + + toggleMaximize(e); } - function toggleHeight(e) { - var triggerIconEl = $('.resizer i'); - if (e.clientY - resizeDown === 0){ - var newPercentage = ($(window).height() - $('#header-menu').height() - 20) / $(window).height(); + function toggleMaximize(e) { + if (e.clientY - resizeDown === 0 || snapToTop) { + var newPercentage = getMaximumPercentage(); - if (triggerIconEl.hasClass('fa-chevron-up')) { - oldPercentage = getPercentage(postContainer); + if (!postContainer.hasClass('maximized') || !snapToTop) { + oldPercentage = postContainer.percentage; doResize(postContainer, newPercentage); - triggerIconEl.addClass('fa-chevron-down').removeClass('fa-chevron-up'); + postContainer.addClass('maximized'); } else { doResize(postContainer, oldPercentage); - triggerIconEl.addClass('fa-chevron-up').removeClass('fa-chevron-down'); + postContainer.removeClass('maximized'); } - } else { - triggerIconEl.addClass('fa-chevron-up').removeClass('fa-chevron-down'); } } @@ -91,60 +120,67 @@ define('composer/resize', function() { function resizeAction(e) { if (resizeActive) { - var position = (e.clientY + resizeOffset); - var newHeight = $(window).height() - position; + var position = (e.clientY - resizeOffset), + newHeight = $(window).height() - position; - if(newHeight > $(window).height() - $('#header-menu').height() - 20) { - newHeight = $(window).height() - $('#header-menu').height() - 20; - } else if (newHeight < 100) { - newHeight = 100; - } + doResize(postContainer, newHeight / $(window).height()); - postContainer.css('height', newHeight); - $('body').css({'margin-bottom': newHeight}); resizeWritePreview(postContainer); resizeSavePosition(newHeight); + + if (Math.abs(e.clientY - resizeDown) > 0) { + postContainer.removeClass('maximized'); + } } + e.preventDefault(); return false; } function resizeSavePosition(px) { - var percentage = px / $(window).height(); - localStorage.setItem('composer:resizePercentage', percentage); - } - - function getPercentage(postContainer) { - return postContainer.height() / $(window).height(); + var percentage = px / $(window).height(), + max = getMaximumPercentage(); + localStorage.setItem('composer:resizePercentage', percentage < max ? percentage : max); } var resizeActive = false, resizeOffset = 0, resizeDown = 0, + snapToTop = false, resizeEl = postContainer.find('.resizer'); - resizeEl.on('mousedown', resizeStart); - - resizeEl.on('touchstart', function(e) { - e.preventDefault(); - resizeStart(e.touches[0]); - }); - - resizeEl.on('touchend', function(e) { - e.preventDefault(); - resizeStop(); - }); + resizeEl + .on('mousedown', resizeStart) + .on('touchstart', function(e) { + e.preventDefault(); + resizeStart(e.touches[0]); + }) + .on('touchend', function(e) { + e.preventDefault(); + resizeStop(); + }); }; + function getMaximumPercentage() { + return ($(window).height() - $('#header-menu').height() - 1) / $(window).height(); + } function resizeWritePreview(postContainer) { - var h1 = postContainer.find('.title-container').outerHeight(true); - var h2 = postContainer.find('.category-tag-row').outerHeight(true); - var h3 = postContainer.find('.formatting-bar').outerHeight(true); - var h4 = postContainer.find('.topic-thumb-container').outerHeight(true); - var h5 = $('.taskbar').height(); - var total = h1 + h2 + h3 + h4 + h5; - postContainer.find('.write-preview-container').css('height', postContainer.height() - total); + var total = getFormattingHeight(postContainer); + postContainer + .find('.write-preview-container') + .css('height', postContainer.percentage * $(window).height() - $('#header-menu').height() - total); + } + + function getFormattingHeight(postContainer) { + return [ + postContainer.find('.title-container').outerHeight(true), + postContainer.find('.formatting-bar').outerHeight(true), + postContainer.find('.topic-thumb-container').outerHeight(true), + $('.taskbar').height() + ].reduce(function(a, b) { + return a + b; + }); } diff --git a/public/src/modules/composer/tags.js b/public/src/modules/composer/tags.js index 93b33fbb38..f074a5abc2 100644 --- a/public/src/modules/composer/tags.js +++ b/public/src/modules/composer/tags.js @@ -14,7 +14,17 @@ define('composer/tags', function() { tagEl.tagsinput({ maxTags: config.tagsPerTopic, - confirmKeys: [13, 44] + confirmKeys: [13, 44], + trimValue: true + }); + + tagEl.on('beforeItemAdd', function(event) { + event.cancel = event.item.length < config.minimumTagLength || event.item.length > config.maximumTagLength; + if (event.item.length < config.minimumTagLength) { + app.alertError('[[error:tag-too-short, ' + config.minimumTagLength + ']]'); + } else if (event.item.length > config.maximumTagLength) { + app.alertError('[[error:tag-too-long, ' + config.maximumTagLength + ']]'); + } }); tagEl.on('itemAdded', function(event) { diff --git a/public/src/modules/composer/uploads.js b/public/src/modules/composer/uploads.js index e7bc473cb5..e9d7bfa3c3 100644 --- a/public/src/modules/composer/uploads.js +++ b/public/src/modules/composer/uploads.js @@ -202,7 +202,7 @@ define('composer/uploads', ['composer/preview', 'csrf'], function(preview, csrf) function insertText(str, index, insert) { return str.slice(0, index) + insert + str.slice(index); - }; + } function uploadContentFiles(params) { var files = params.files, @@ -316,8 +316,7 @@ define('composer/uploads', ['composer/preview', 'csrf'], function(preview, csrf) function onUploadError(xhr) { xhr = maybeParse(xhr); - - app.alertError('[[error:upload-error, ' + xhr.responseText + ']]'); + app.alertError(xhr.responseText); } return uploads; diff --git a/public/src/modules/csrf.js b/public/src/modules/csrf.js index 0329a42917..10a9b002f0 100644 --- a/public/src/modules/csrf.js +++ b/public/src/modules/csrf.js @@ -1,11 +1,13 @@ +"use strict"; +/*globals define*/ + define('csrf', function() { - "use strict"; var csrf = {}, _data = {}; csrf.get = function() { return _data.token; - } + }; csrf.set = function(token) { _data.token = token; diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js new file mode 100644 index 0000000000..5361099476 --- /dev/null +++ b/public/src/modules/helpers.js @@ -0,0 +1,124 @@ +;(function(exports) { + "use strict"; + /* globals define */ + + // export the class if we are in a Node-like system. + if (typeof module === 'object' && module.exports === exports) { + exports = module.exports/* = SemVer*/; + } + + var helpers = {}; + + helpers.displayMenuItem = function(data, index) { + var item = data.navigation[index], + properties = item.properties; + + if (properties) { + if (properties.loggedIn && !data.loggedIn || + properties.adminOnly && !data.isAdmin || + properties.installed && properties.installed.search && !data.searchEnabled) { + return false; + } + } + + if (item.route.match('/users')) { + if (data.privateUserInfo && !data.isAdmin) { + return false; + } + } + + return true; + }; + + helpers.buildMetaTag = function(tag) { + var name = tag.name ? 'name="' + tag.name + '" ' : '', + property = tag.property ? 'property="' + tag.property + '" ' : '', + content = tag.content ? 'content="' + tag.content.replace(/\n/g, ' ') + '" ' : ''; + + return ''; + }; + + helpers.stringify = function(obj) { + // Turns the incoming object into a JSON string + return JSON.stringify(obj).replace(/&/gm,"&").replace(//gm,">").replace(/"/g, '"'); + }; + + helpers.generateCategoryBackground = function(category) { + var style = []; + + if (category.backgroundImage) { + style.push('background-image: url(' + category.backgroundImage + ')'); + } + + if (category.bgColor) { + style.push('background-color: ' + category.bgColor + ';'); + } + + if (category.color) { + style.push('color: ' + category.color + ';'); + } + + return style.join(' '); + }; + + helpers.generateTopicClass = function(topic) { + var style = []; + + if (topic.locked) { + style.push('locked'); + } + + if (topic.pinned) { + style.push('pinned'); + } + + if (topic.deleted) { + style.push('deleted'); + } + + if (topic.unread) { + style.push('unread'); + } + + return style.join(' '); + }; + + // Groups helpers + helpers.membershipBtn = function(groupObj) { + if (groupObj.isMember) { + return ''; + } else { + if (groupObj.isPending) { + return ''; + } else if (groupObj.isInvited) { + return ''; + } else { + return ''; + } + } + }; + + exports.register = function() { + var templates; + + if (typeof module === 'object') { + templates = require('templates.js'); + } else { + templates = window.templates; + } + + Object.keys(helpers).forEach(function(helperName) { + templates.registerHelper(helperName, helpers[helperName]); + }); + }; + + // Use the define() function if we're in AMD land + if (typeof define === 'function' && define.amd) { + define('helpers', exports); + } + +})( + typeof exports === 'object' ? exports : + typeof define === 'function' && define.amd ? {} : + helpers = {} +); diff --git a/public/src/admin/modules/iconSelect.js b/public/src/modules/iconSelect.js similarity index 81% rename from public/src/admin/modules/iconSelect.js rename to public/src/modules/iconSelect.js index 065521de20..6871948a6e 100644 --- a/public/src/admin/modules/iconSelect.js +++ b/public/src/modules/iconSelect.js @@ -2,12 +2,14 @@ /* globals define, bootbox */ -define(function() { +define('iconSelect', function() { var iconSelect = {}; iconSelect.init = function(el, onModified) { onModified = onModified || function() {}; - var selected = el.attr('class').replace('fa-2x', '').replace('fa', '').replace(/\s+/g, ''); + var doubleSize = el.hasClass('fa-2x'), + selected = el.attr('class').replace('fa-2x', '').replace('fa', '').replace(/\s+/g, ''); + $('#icons .selected').removeClass('selected'); if (selected === '') { @@ -25,7 +27,7 @@ define(function() { categoryIconClass = ''; } - el.attr('class', 'fa fa-2x ' + categoryIconClass); + el.attr('class', 'fa ' + (doubleSize ? 'fa-2x ' : '') + categoryIconClass); el.val(categoryIconClass); el.attr('value', categoryIconClass); diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index b35a06c666..f4f4d74a59 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -1,7 +1,7 @@ 'use strict'; -/* globals app, define, ajaxify, utils, translator, config */ +/* globals app, components, define, ajaxify, utils, translator, config */ define('navigator', ['forum/pagination'], function(pagination) { @@ -60,7 +60,8 @@ define('navigator', ['forum/pagination'], function(pagination) { }; function generateUrl(index) { - var parts = window.location.pathname.split('/'); + var pathname = window.location.pathname.replace(config.relative_path, ''); + var parts = pathname.split('/'); return parts[1] + '/' + parts[2] + '/' + parts[3] + (index ? '/' + index : ''); } @@ -89,18 +90,26 @@ define('navigator', ['forum/pagination'], function(pagination) { navigator.update = function() { toggle(!!count); - $($(navigator.selector).get().reverse()).each(function() { + var topIndex = 0; + var bottomIndex = 0; + $(navigator.selector).each(function() { var el = $(this); if (elementInView(el)) { - if (typeof navigator.callback === 'function') { - index = navigator.callback(el, count); - navigator.updateTextAndProgressBar(); + if (!topIndex) { + topIndex = parseInt(el.attr('data-index'), 10) + 1; + } else { + bottomIndex = parseInt(el.attr('data-index'), 10) + 1; } - + } else if (topIndex && bottomIndex) { return false; } }); + + if (typeof navigator.callback === 'function' && topIndex && bottomIndex) { + index = navigator.callback(topIndex, bottomIndex, count); + navigator.updateTextAndProgressBar(); + } }; navigator.updateTextAndProgressBar = function() { @@ -152,7 +161,7 @@ define('navigator', ['forum/pagination'], function(pagination) { } navigator.scrollToPost = function(postIndex, highlight, duration, offset) { - if (!utils.isNumber(postIndex) || !$('#post-container').length) { + if (!utils.isNumber(postIndex) || !components.get('topic').length) { return; } @@ -160,7 +169,7 @@ define('navigator', ['forum/pagination'], function(pagination) { duration = duration !== undefined ? duration : 400; navigator.scrollActive = true; - if($('#post_anchor_' + postIndex).length) { + if(components.get('post/anchor', postIndex).length) { return scrollToPid(postIndex, highlight, duration, offset); } @@ -187,7 +196,7 @@ define('navigator', ['forum/pagination'], function(pagination) { }; function scrollToPid(postIndex, highlight, duration, offset) { - var scrollTo = $('#post_anchor_' + postIndex); + var scrollTo = components.get('post/anchor', postIndex); if (!scrollTo) { navigator.scrollActive = false; @@ -214,14 +223,14 @@ define('navigator', ['forum/pagination'], function(pagination) { function highlightPost() { if (highlight) { - scrollTo.parent().find('.topic-item').addClass('highlight'); + scrollTo.parents('[component="post"]').addClass('highlight'); setTimeout(function() { - scrollTo.parent().find('.topic-item').removeClass('highlight'); + scrollTo.parents('[component="post"]').removeClass('highlight'); }, 3000); } } - if ($('#post-container').length) { + if (components.get('topic').length) { animateScroll(); } } diff --git a/public/src/modules/notifications.js b/public/src/modules/notifications.js index 46e6833806..43ba05ed1b 100644 --- a/public/src/modules/notifications.js +++ b/public/src/modules/notifications.js @@ -1,7 +1,6 @@ 'use strict'; -/* globals define, socket, translator, utils, config, app, ajaxify, Tinycon*/ - +/* globals define, socket, translator, utils, config, app, ajaxify, templates, Tinycon*/ define('notifications', ['sounds'], function(sound) { var Notifications = {}; @@ -14,48 +13,66 @@ define('notifications', ['sounds'], function(sound) { notifTrigger.on('click', function(e) { e.preventDefault(); - if (!notifContainer.hasClass('open')) { + if (notifContainer.hasClass('open')) { + return; + } - socket.emit('notifications.get', null, function(err, data) { + socket.emit('notifications.get', null, function(err, data) { + if (err) { + return app.alertError(err.message); + } - function createNotification(notification, callback) { - if (notification.image) { - image = ''; - } else { - image = ''; - } + var notifs = data.unread.concat(data.read).sort(function(a, b) { + return parseInt(a.datetime, 10) > parseInt(b.datetime, 10) ? -1 : 1; + }); - return '
  • ' + image + '' + utils.relativeTime(notification.datetime, true) + '' + notification.bodyShort + '
  • '; - } + translator.toggleTimeagoShorthand(); + for(var i=0; i 0) { - var image = ''; - for (x = 0; x < data.unread.length; x++) { - html += createNotification(data.unread[x]); - } + notifList.on('click', '[data-nid]', function() { + var nid = this.getAttribute('data-nid'); - for (x = 0; x < data.read.length; x++) { - html += createNotification(data.read[x]); - } - } else { - html += '
  • [[notifications:no_notifs]]
  • '; - } + socket.emit('notifications.markRead', nid, function(err) { + if (err) { + app.alertError(err.message); + } + }); + }); - html += ''; + notifContainer.on('click', '.mark-all-read', function() { + socket.emit('notifications.markAllRead', function(err) { + if (err) { + app.alertError(err.message); + } + updateNotifCount(0); + }); + }); - notifList.translateHtml(html); + notifList.on('click', '.mark-read', function(e) { + var liEl = $(this.parentNode), + nid = liEl.attr('data-nid'), + unread = liEl.hasClass('unread'); - updateNotifCount(data.unread.length); + e.preventDefault(); + e.stopPropagation(); - socket.emit('modules.notifications.markAllRead', null, function(err) { - if (!err) { - updateNotifCount(0); - } - }); - }); - } + socket.emit('notifications.mark' + (unread ? 'Read' : 'Unread'), nid, function(err) { + if (err) { + app.alertError(err.message); + } + + liEl.toggleClass('unread'); + increaseNotifCount(unread ? -1 : 1); + }); }); function updateNotifCount(count) { @@ -69,10 +86,10 @@ define('notifications', ['sounds'], function(sound) { notifIcon.attr('data-content', count > 20 ? '20+' : count); Tinycon.setBubble(count); - }; + } - function increaseNotifCount() { - var count = parseInt(notifIcon.attr('data-content'), 10) + 1; + function increaseNotifCount(delta) { + var count = parseInt(notifIcon.attr('data-content'), 10) + delta; updateNotifCount(count); } @@ -98,7 +115,7 @@ define('notifications', ['sounds'], function(sound) { ajaxify.refresh(); } - increaseNotifCount(); + increaseNotifCount(1); sound.play('notification'); }); diff --git a/public/src/modules/search.js b/public/src/modules/search.js index 0efb754eb2..eedf0b76b9 100644 --- a/public/src/modules/search.js +++ b/public/src/modules/search.js @@ -1,12 +1,15 @@ +"use strict"; +/* globals socket, ajaxify, translator, app, define */ + define('search', ['navigator'], function(nav) { - "use strict"; - /* globals socket, ajaxify */ var Search = { current: {} }; - Search.query = function(term, callback) { + Search.query = function(data, callback) { + var term = data.term; + // Detect if a tid was specified var topicSearch = term.match(/in:topic-([\d]+)/); @@ -19,7 +22,7 @@ define('search', ['navigator'], function(nav) { return app.alertError('[[error:invalid-search-term]]'); } - ajaxify.go('search/' + term); + ajaxify.go('search/' + term + '?' + createQueryString(data)); callback(); } else { var cleanedTerm = term.replace(topicSearch[0], ''), @@ -29,6 +32,43 @@ define('search', ['navigator'], function(nav) { } }; + function createQueryString(data) { + var searchIn = data.in || 'titlesposts'; + var postedBy = data.by || ''; + var query = {in: searchIn}; + + if (postedBy && (searchIn === 'posts' || searchIn === 'titles' || searchIn === 'titlesposts')) { + query.by = postedBy; + } + + if (data.categories && data.categories.length) { + query.categories = data.categories; + if (data.searchChildren) { + query.searchChildren = data.searchChildren; + } + } + + if (parseInt(data.replies, 10) > 0) { + query.replies = data.replies; + query.repliesFilter = data.repliesFilter || 'atleast'; + } + + if (data.timeRange) { + query.timeRange = data.timeRange; + query.timeFilter = data.timeFilter || 'newer'; + } + + if (data.sortBy) { + query.sortBy = data.sortBy; + query.sortDirection = data.sortDirection; + } + + if (data.showAs) { + query.showAs = data.showAs; + } + return decodeURIComponent($.param(query)); + } + Search.queryTopic = function(tid, term, callback) { socket.emit('topics.search', { tid: tid, @@ -105,7 +145,7 @@ define('search', ['navigator'], function(nav) { Mousetrap.bind('esc', Search.topicDOM.end); }); } - } + }; Search.topicDOM.end = function() { $('.topic-search').addClass('hidden').find('.prev, .next').attr('disabled', 'disabled'); diff --git a/public/src/modules/settings.js b/public/src/modules/settings.js index b31975c1ab..8c7d74a448 100644 --- a/public/src/modules/settings.js +++ b/public/src/modules/settings.js @@ -457,6 +457,17 @@ define('settings', function () { console.log('[settings] Unable to load settings for hash: ', hash); return callback(err); } + + // Parse all values. If they are json, return json + for(var key in values) { + if (values.hasOwnProperty(key)) { + try { + values[key] = JSON.parse(values[key]); + } catch (e) { + // Leave the value as is + } + } + } $(formEl).deserialize(values); @@ -471,9 +482,16 @@ define('settings', function () { formEl.find('input[type="checkbox"]').each(function (idx, inputEl) { inputEl = $(inputEl); if (!inputEl.is(':checked')) { - values[inputEl.attr('id')] = 'off'; + values[inputEl.attr('name')] = 'off'; } }); + + // Normalizing value of multiple selects + formEl.find('select[multiple]').each(function(idx, selectEl) { + selectEl = $(selectEl); + values[selectEl.attr('name')] = JSON.stringify(selectEl.val()); + }); + socket.emit('admin.settings.set', { hash: hash, values: values diff --git a/public/src/modules/share.js b/public/src/modules/share.js index 3f26ebb9f8..6665a30b8c 100644 --- a/public/src/modules/share.js +++ b/public/src/modules/share.js @@ -50,7 +50,7 @@ define('share', function() { function getPostUrl(clickedElement) { var parts = window.location.pathname.split('/'); - var postIndex = parseInt(clickedElement.parents('.post-row').attr('data-index'), 10); + var postIndex = parseInt(clickedElement.parents('[data-index]').attr('data-index'), 10); return '/' + parts[1] + '/' + parts[2] + (parts[3] ? '/' + parts[3] : '') + (postIndex ? '/' + (postIndex + 1) : ''); } diff --git a/public/src/modules/sort.js b/public/src/modules/sort.js new file mode 100644 index 0000000000..3aad14dc44 --- /dev/null +++ b/public/src/modules/sort.js @@ -0,0 +1,26 @@ +'use strict'; +/* globals define, config, socket, app, ajaxify, translator, templates */ + +define('sort', function() { + var module = {}; + + module.handleSort = function (field, method, gotoOnSave) { + var threadSort = $('.thread-sort'); + threadSort.find('i').removeClass('fa-check'); + var currentSetting = threadSort.find('a[data-sort="' + config[field] + '"]'); + currentSetting.find('i').addClass('fa-check'); + + $('.thread-sort').on('click', 'a', function() { + var newSetting = $(this).attr('data-sort'); + socket.emit(method, newSetting, function(err) { + if (err) { + return app.alertError(err.message); + } + config[field] = newSetting; + ajaxify.go(gotoOnSave); + }); + }); + }; + + return module; +}); diff --git a/public/src/modules/sounds.js b/public/src/modules/sounds.js index 5dfac33613..fa0eade2b5 100644 --- a/public/src/modules/sounds.js +++ b/public/src/modules/sounds.js @@ -57,7 +57,9 @@ define('sounds', ['buzz'], function(buzz) { }; Sounds.playFile = function(fileName) { - if (!fileName) return; + if (!fileName) { + return; + } function play() { if (loadedSounds[fileName]) { diff --git a/public/src/modules/templates.js b/public/src/modules/templates.js deleted file mode 100644 index 2c25dbdb64..0000000000 --- a/public/src/modules/templates.js +++ /dev/null @@ -1,14 +0,0 @@ -define('templates', function() { - var Templates = {}; - - Templates.refresh = function(callback) { - $.getJSON(RELATIVE_PATH + '/api/get_templates_listing', function (data) { - Templates.config = data.templatesConfig; - Templates.available = data.availableTemplates; - - if (callback) callback(); - }); - }; - - return Templates; -}); \ No newline at end of file diff --git a/public/src/modules/topicSelect.js b/public/src/modules/topicSelect.js index 842cf7f8b6..3e3ae58d46 100644 --- a/public/src/modules/topicSelect.js +++ b/public/src/modules/topicSelect.js @@ -9,7 +9,7 @@ define('topicSelect', function() { var topicsContainer; TopicSelect.init = function(onSelect) { - topicsContainer = $('#topics-container'); + topicsContainer = $('[component="category"]'); topicsContainer.on('selectstart', function() { return false; }); @@ -18,12 +18,12 @@ define('topicSelect', function() { var select = $(this); if (ev.shiftKey) { - selectRange($(this).parents('.category-item').attr('data-tid')); + selectRange($(this).parents('[component="category/topic"]').attr('data-tid')); lastSelected = select; return false; } - var isSelected = select.hasClass('fa-check-square-o'); + var isSelected = select.parents('[data-tid]').hasClass('selected'); toggleSelect(select, !isSelected); lastSelected = select; if (typeof onSelect === 'function') { @@ -35,32 +35,32 @@ define('topicSelect', function() { function toggleSelect(select, isSelected) { select.toggleClass('fa-check-square-o', isSelected); select.toggleClass('fa-square-o', !isSelected); - select.parents('.category-item').toggleClass('selected', isSelected); + select.parents('[component="category/topic"]').toggleClass('selected', isSelected); } TopicSelect.getSelectedTids = function() { var tids = []; - topicsContainer.find('.category-item.selected').each(function() { + topicsContainer.find('[component="category/topic"].selected').each(function() { tids.push($(this).attr('data-tid')); }); return tids; }; TopicSelect.unselectAll = function() { - topicsContainer.find('.category-item.selected').removeClass('selected'); + topicsContainer.find('[component="category/topic"].selected').removeClass('selected'); topicsContainer.find('.select').toggleClass('fa-check-square-o', false).toggleClass('fa-square-o', true); }; function selectRange(clickedTid) { if(!lastSelected) { - lastSelected = $('.category-item[data-tid]').first().find('.select'); + lastSelected = $('[component="category/topic"]').first().find('.select'); } - var isClickedSelected = $('.category-item[data-tid="' + clickedTid + '"]').hasClass('selected'); + var isClickedSelected = components.get('category/topic', 'tid', clickedTid).hasClass('selected'); var clickedIndex = getIndex(clickedTid); - var lastIndex = getIndex(lastSelected.parents('.category-item[data-tid]').attr('data-tid')); + var lastIndex = getIndex(lastSelected.parents('[component="category/topic"]').attr('data-tid')); selectIndexRange(clickedIndex, lastIndex, !isClickedSelected); } @@ -72,13 +72,13 @@ define('topicSelect', function() { } for(var i=start; i<=end; ++i) { - var topic = $('.category-item[data-tid]').eq(i); + var topic = $('[component="category/topic"]').eq(i); toggleSelect(topic.find('.select'), isSelected); } } function getIndex(tid) { - return $('.category-item[data-tid="' + tid + '"]').index('#topics-container .category-item'); + return components.get('category/topic', 'tid', tid).index('[component="category/topic"]'); } return TopicSelect; diff --git a/public/src/modules/uploader.js b/public/src/modules/uploader.js index 4156507683..6efdbd988c 100644 --- a/public/src/modules/uploader.js +++ b/public/src/modules/uploader.js @@ -1,16 +1,10 @@ +'use strict'; + +/* globals define */ + define('uploader', ['csrf'], function(csrf) { - var module = {}, - maybeParse = function(response) { - if (typeof response == 'string') { - try { - return $.parseJSON(response); - } catch (e) { - return {error: 'Something went wrong while parsing server response'}; - } - } - return response; - }; + var module = {}; module.open = function(route, params, fileSize, callback) { var uploadModal = $('#upload-picture-modal'); @@ -20,9 +14,8 @@ define('uploader', ['csrf'], function(csrf) { uploadForm[0].reset(); uploadForm.attr('action', route); uploadForm.find('#params').val(JSON.stringify(params)); - // uploadForm.find('#csrfToken').val(csrf.get()); - if(fileSize) { + if (fileSize) { uploadForm.find('#upload-file-size').html(fileSize); uploadForm.find('#file-size-block').removeClass('hide'); } else { @@ -35,28 +28,18 @@ define('uploader', ['csrf'], function(csrf) { uploadForm.off('submit').submit(function() { - function status(message) { + function showAlert(type, message) { module.hideAlerts(); - uploadModal.find('#alert-status').text(message).removeClass('hide'); + uploadModal.find('#alert-' + type).translateText(message).removeClass('hide'); } - function success(message) { - module.hideAlerts(); - uploadModal.find('#alert-success').text(message).removeClass('hide'); - } - - function error(message) { - module.hideAlerts(); - uploadModal.find('#alert-error').text(message).removeClass('hide'); - } - - status('uploading the file ...'); + showAlert('status', '[[uploads:uploading-file]]'); uploadModal.find('#upload-progress-bar').css('width', '0%'); uploadModal.find('#upload-progress-box').show().removeClass('hide'); if (!$('#userPhotoInput').val()) { - error('select an image to upload!'); + showAlert('error', '[[uploads:select-file-to-upload]]'); return false; } @@ -66,7 +49,7 @@ define('uploader', ['csrf'], function(csrf) { }, error: function(xhr) { xhr = maybeParse(xhr); - error('Error: ' + xhr.status); + showAlert('error', xhr.responseJSON ? xhr.responseJSON.error : 'error uploading, code : ' + xhr.status); }, uploadProgress: function(event, position, total, percent) { @@ -77,12 +60,13 @@ define('uploader', ['csrf'], function(csrf) { response = maybeParse(response); if (response.error) { - error(response.error); + showAlert('error', response.error); return; } - callback(response.path); - success('File uploaded successfully!'); + callback(response[0].url); + + showAlert('success', '[[uploads:upload-success]]'); setTimeout(function() { module.hideAlerts(); uploadModal.modal('hide'); @@ -94,12 +78,19 @@ define('uploader', ['csrf'], function(csrf) { }); }; + function maybeParse(response) { + if (typeof response === 'string') { + try { + return $.parseJSON(response); + } catch (e) { + return {error: '[[error:parse-error]]'}; + } + } + return response; + } + module.hideAlerts = function() { - var uploadModal = $('#upload-picture-modal'); - uploadModal.find('#alert-status').addClass('hide'); - uploadModal.find('#alert-success').addClass('hide'); - uploadModal.find('#alert-error').addClass('hide'); - uploadModal.find('#upload-progress-box').addClass('hide'); + $('#upload-picture-modal').find('#alert-status, #alert-success, #alert-error, #upload-progress-box').addClass('hide'); }; return module; diff --git a/public/src/overrides.js b/public/src/overrides.js index 978dea0720..afe5003b3c 100644 --- a/public/src/overrides.js +++ b/public/src/overrides.js @@ -1,5 +1,8 @@ 'use strict'; +/*globals translator*/ + + if ('undefined' !== typeof window) { (function ($, undefined) { @@ -91,7 +94,8 @@ if ('undefined' !== typeof window) { .off('click.data-api.dropdown', _clearMenus) .on('click.data-api.dropdown', function (e) { // call the handler only when not right-click - e.button === 2 || _clearMenus(); + if (e.button !== 2) { + _clearMenus(); + } }); - } diff --git a/public/src/translator.js b/public/src/translator.js index 1802e858d8..d1b85e300c 100644 --- a/public/src/translator.js +++ b/public/src/translator.js @@ -21,6 +21,24 @@ languages[language].loading = languages[language].loading || {}; }; + translator.getTranslations = function(language, filename, callback) { + if (languages[language] && languages[language].loaded[filename]) { + callback(languages[language].loaded[filename]); + } else { + translator.load(language, filename, function() { + callback(languages[language].loaded[filename]); + }); + } + }; + + translator.escape = function(text) { + return typeof text === 'string' ? text.replace(/\[\[([\S]*?)\]\]/g, '\\[\\[$1\\]\\]') : text; + }; + + translator.unescape = function(text) { + return typeof text === 'string' ? text.replace(/\\\[\\\[([\S]*?)\\\]\\\]/g, '[[$1]]') : text; + }; + translator.getLanguage = function() { return config.defaultLang; }; @@ -61,7 +79,7 @@ } $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js').success(function() { - $('span.timeago').timeago(); + $('.timeago').timeago(); }).fail(function() { $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.en.js'); }); @@ -75,6 +93,34 @@ } }; + translator.toggleTimeagoShorthand = function() { + if (!translator.timeagoStrings) { + translator.timeagoStrings = $.extend({}, jQuery.timeago.settings.strings); + jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "", + suffixFromNow: "", + seconds: "1m", + minute: "1m", + minutes: "%dm", + hour: "1h", + hours: "%dh", + day: "1d", + days: "%dd", + month: "1mo", + months: "%dmo", + year: "1yr", + years: "%dyr", + wordSeparator: " ", + numbers: [] + }; + } else { + jQuery.timeago.settings.strings = $.extend({}, translator.timeagoStrings); + delete translator.timeagoStrings; + } + }; + translator.translate = function (text, language, callback) { if (typeof language === 'function') { callback = language; @@ -123,7 +169,7 @@ var parsedKey = key.replace('[[', '').replace(']]', '').split(':'); if (!(parsedKey[0] && parsedKey[1])) { - return; + return callback(data); } var languageFile = parsedKey[0]; @@ -180,7 +226,7 @@ callback(translations); } - while (languages[language].callbacks[filename] && languages[language].callbacks[filename].length) { + while (languages[language].callbacks && languages[language].callbacks[filename] && languages[language].callbacks[filename].length) { languages[language].callbacks[filename].pop()(translations); } diff --git a/public/src/utils.js b/public/src/utils.js index a3f3be9648..930e03501f 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -63,44 +63,6 @@ }); }, - relativeTime: function(timestamp, min) { - var now = +new Date(), - difference = now - Math.floor(parseFloat(timestamp)); - - if(difference < 0) { - difference = 0; - } - - difference = Math.floor(difference / 1000); - - if (difference < 60) { - return difference + (min ? 's' : ' second') + (difference !== 1 && !min ? 's' : ''); - } - - difference = Math.floor(difference / 60); - if (difference < 60) { - return difference + (min ? 'm' : ' minute') + (difference !== 1 && !min ? 's' : ''); - } - - difference = Math.floor(difference / 60); - if (difference < 24) { - return difference + (min ? 'h' : ' hour') + (difference !== 1 && !min ? 's' : ''); - } - - difference = Math.floor(difference / 24); - if (difference < 30) { - return difference + (min ? 'd' : ' day') + (difference !== 1 && !min ? 's' : ''); - } - - difference = Math.floor(difference / 30); - if (difference < 12) { - return difference + (min ? 'mon' : ' month') + (difference !== 1 && !min ? 's' : ''); - } - - difference = Math.floor(difference / 12); - return difference + (min ? 'y' : ' year') + (difference !== 1 && !min ? 's' : ''); - }, - invalidUnicodeChars: XRegExp('[^\\p{L}\\s\\d\\-_]', 'g'), invalidLatinChars: /[^\w\s\d\-_]/g, trimRegex: /^\s+|\s+$/g, @@ -108,18 +70,22 @@ collapseDash: /-+/g, trimTrailingDash: /-$/g, trimLeadingDash: /^-/g, - isLatin: /^[\w]+$/, + isLatin: /^[\w\d\s.,\-@]+$/, + languageKeyRegex: /\[\[[\w]+:.+\]\]/, //http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/ - slugify: function(str) { + slugify: function(str, preserveCase) { + if (!str) { + return ''; + } str = str.replace(utils.trimRegex, ''); if(utils.isLatin.test(str)) { str = str.replace(utils.invalidLatinChars, '-'); } else { str = XRegExp.replace(str, utils.invalidUnicodeChars, '-'); } - str = str.toLocaleLowerCase(); - str = str.replace(utils.collapseWhitespace, '-') + str = !preserveCase ? str.toLocaleLowerCase() : str; + str = str.replace(utils.collapseWhitespace, '-'); str = str.replace(utils.collapseDash, '-'); str = str.replace(utils.trimTrailingDash, ''); str = str.replace(utils.trimLeadingDash, ''); @@ -146,6 +112,10 @@ return !isNaN(parseFloat(n)) && isFinite(n); }, + hasLanguageKey: function(input) { + return utils.languageKeyRegex.test(input); + }, + // shallow objects merge merge: function() { var result = {}, obj, keys; @@ -163,38 +133,39 @@ return ('' + path).split('.').pop(); }, - fileMimeType: (function () { - // we only care about images, for now - var map = { - "bmp": "image/bmp", - "cmx": "image/x-cmx", - "cod": "image/cis-cod", - "gif": "image/gif", - "ico": "image/x-icon", - "ief": "image/ief", - "jfif": "image/pipeg", - "jpe": "image/jpeg", - "jpeg": "image/jpeg", - "jpg": "image/jpeg", - "pbm": "image/x-portable-bitmap", - "pgm": "image/x-portable-graymap", - "pnm": "image/x-portable-anymap", - "ppm": "image/x-portable-pixmap", - "ras": "image/x-cmu-raster", - "rgb": "image/x-rgb", - "svg": "image/svg+xml", - "tif": "image/tiff", - "tiff": "image/tiff", - "xbm": "image/x-xbitmap", - "xpm": "image/x-xpixmap", - "xwd": "image/x-xwindowdump" - }; - - return function (path) { - var extension = utils.fileExtension(path); - return map[extension] || '*'; - } - })(), + extensionMimeTypeMap: { + "bmp": "image/bmp", + "cmx": "image/x-cmx", + "cod": "image/cis-cod", + "gif": "image/gif", + "ico": "image/x-icon", + "ief": "image/ief", + "jfif": "image/pipeg", + "jpe": "image/jpeg", + "jpeg": "image/jpeg", + "jpg": "image/jpeg", + "png": "image/png", + "pbm": "image/x-portable-bitmap", + "pgm": "image/x-portable-graymap", + "pnm": "image/x-portable-anymap", + "ppm": "image/x-portable-pixmap", + "ras": "image/x-cmu-raster", + "rgb": "image/x-rgb", + "svg": "image/svg+xml", + "tif": "image/tiff", + "tiff": "image/tiff", + "xbm": "image/x-xbitmap", + "xpm": "image/x-xpixmap", + "xwd": "image/x-xwindowdump" + }, + + fileMimeType: function (path) { + utils.extensionToMimeType(utils.fileExtension(path)); + }, + + extensionToMimeType: function(extension) { + return utils.extensionMimeTypeMap[extension] || '*'; + }, isRelativeUrl: function(url) { var firstChar = url.slice(0, 1); @@ -242,12 +213,24 @@ tags : ['a', 'abbr', 'acronym', 'address', 'applet', 'area', 'article', 'aside', 'audio', 'b', 'base', 'basefont', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'command', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'map', 'mark', 'menu', 'meta', 'meter', 'nav', 'noframes', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr'], - stripTags : ['abbr', 'acronym', 'address', 'applet', 'area', 'article', 'aside', 'audio', 'base', 'basefont', 'bdi', 'bdo', 'big', 'body', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'command', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hr', 'html', 'iframe', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'map', 'mark', 'menu', 'meta', 'meter', 'nav', 'noframes', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'param', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'source', 'span', 'strike', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr'], + stripTags : ['abbr', 'acronym', 'address', 'applet', 'area', 'article', 'aside', 'audio', 'base', 'basefont', + 'bdi', 'bdo', 'big', 'blink', 'body', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', + 'command', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'embed', + 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'head', 'header', 'hr', 'html', 'iframe', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', + 'map', 'mark', 'marquee', 'menu', 'meta', 'meter', 'nav', 'noframes', 'noscript', 'object', 'ol', 'optgroup', 'option', + 'output', 'param', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', + 'source', 'span', 'strike', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', + 'th', 'thead', 'time', 'title', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr'], escapeRegexChars: function(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); }, + escapeHTML: function(raw) { + return raw.replace(/&/gm,"&").replace(//gm,">"); + }, + isAndroidBrowser: function() { // http://stackoverflow.com/questions/9286355/how-to-detect-only-the-native-android-browser var nua = navigator.userAgent; @@ -289,8 +272,19 @@ key = decodeURI(val[0]), value = options.skipToType[key] ? decodeURI(val[1]) : utils.toType(decodeURI(val[1])); - if (key) - hash[key] = value; + if (key) { + if (key.substr(-2, 2) === '[]') { + key = key.slice(0, -2); + } + if (!hash[key]) { + hash[key] = value; + } else { + if (!$.isArray(hash[key])) { + hash[key] = [hash[key]]; + } + hash[key].push(value); + } + } }); return hash; }, @@ -305,24 +299,6 @@ return a; }, - getQueryParams: function() { - var search = window.location.search.slice(1), - data = {}; - - search = search.split('&'); - for(var x=0,numParams=search.length,temp;x= 0) && (this[i] === prefix[i]); --i) + } + for (var i = prefix.length - 1; (i >= 0) && (this[i] === prefix[i]); --i) { continue; + } return i < 0; }; } + if (typeof String.prototype.endsWith != 'function') { + String.prototype.endsWith = function(suffix) { + if (this.length < suffix.length) { + return false; + } + var len = this.length; + var suffixLen = suffix.length; + for (var i=1; (i <= suffixLen && this[len - i] === suffix[suffixLen - i]); ++i) { + continue; + } + return i > suffixLen; + }; + } + if ('undefined' !== typeof window) { window.utils = module.exports; } diff --git a/public/src/widgets.js b/public/src/widgets.js index 9e34ba9513..e83353ec1b 100644 --- a/public/src/widgets.js +++ b/public/src/widgets.js @@ -51,12 +51,11 @@ if (!area.length && window.location.pathname.indexOf('/admin') === -1 && renderedWidgets.length) { if (location === 'footer' && !$('#content [widget-area="footer"]').length) { - $('#content').append($('
    ')); + $('#content').append($('
    ')); } else if (location === 'sidebar' && !$('#content [widget-area="sidebar"]').length) { - $('#content > *').wrapAll($('
    ')); - $('#content').append($('
    ')); + $('#content > *').wrapAll($('
    ')); } else if (location === 'header' && !$('#content [widget-area="header"]').length) { - $('#content').prepend($('
    ')); + $('#content').prepend($('
    ')); } area = $('#content [widget-area="' + location + '"]'); @@ -68,12 +67,19 @@ area.addClass('hidden'); ajaxify.widgets.reposition(location); } - - $('#content [widget-area] img:not(.user-img)').addClass('img-responsive'); } - + + var widgetAreas = $('#content [widget-area]'); + widgetAreas.find('img:not(.user-img)').addClass('img-responsive'); + widgetAreas.find('.timeago').timeago(); + widgetAreas.find('img[title].teaser-pic,img[title].user-img').each(function() { + $(this).tooltip({ + placement: 'top', + title: $(this).attr('title') + }); + }); $(window).trigger('action:widgets.loaded', {}); - + if (typeof callback === 'function') { callback(); } diff --git a/public/uploads/system/.gitignore b/public/uploads/system/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/public/vendor/autosize.js b/public/vendor/autosize.js new file mode 100644 index 0000000000..b6a5c39af8 --- /dev/null +++ b/public/vendor/autosize.js @@ -0,0 +1,155 @@ +/*! + Autosize 2.0.0 + license: MIT + http://www.jacklmoore.com/autosize +*/ +'use strict'; +/*globals define*/ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define('autosize', factory); + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals (root is window) + root.autosize = factory(); + } +}(this, function () { + function main(ta) { + if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || ta.hasAttribute('data-autosize-on')) { return; } + + var maxHeight; + var heightOffset; + var amountOfCR; + + function init() { + var style = window.getComputedStyle(ta, null); + + if (style.resize === 'vertical') { + ta.style.resize = 'none'; + } else if (style.resize === 'both') { + ta.style.resize = 'horizontal'; + } + + // horizontal overflow is hidden, so break-word is necessary for handling words longer than the textarea width + ta.style.wordWrap = 'break-word'; + + // Chrome/Safari-specific fix: + // When the textarea y-overflow is hidden, Chrome/Safari doesn't reflow the text to account for the space + // made available by removing the scrollbar. This workaround will cause the text to reflow. + var width = ta.style.width; + ta.style.width = '0px'; + // Force reflow: + /* jshint ignore:start */ + ta.offsetWidth; + /* jshint ignore:end */ + ta.style.width = width; + + maxHeight = style.maxHeight !== 'none' ? parseFloat(style.maxHeight) : false; + + if (style.boxSizing === 'content-box') { + heightOffset = -(parseFloat(style.paddingTop)+parseFloat(style.paddingBottom)); + } else { + heightOffset = parseFloat(style.borderTopWidth)+parseFloat(style.borderBottomWidth); + } + + amountOfCR = (ta.value.match(/\n/g) || []).length; + adjust(); + } + + function adjust() { + var startHeight = ta.style.height; + var htmlTop = document.documentElement.scrollTop; + var bodyTop = document.body.scrollTop; + + var newAmountOfCR = (ta.value.match(/\n/g) || []).length; + if (newAmountOfCR === amountOfCR) { + return; + } + + amountOfCR = newAmountOfCR; + + ta.style.height = 'auto'; + + var endHeight = ta.scrollHeight+heightOffset; + + if (maxHeight !== false && maxHeight < endHeight) { + endHeight = maxHeight; + if (ta.style.overflowY !== 'scroll') { + ta.style.overflowY = 'scroll'; + } + } else if (ta.style.overflowY !== 'hidden') { + ta.style.overflowY = 'hidden'; + } + + ta.style.height = endHeight+'px'; + + // prevents scroll-position jumping + document.documentElement.scrollTop = htmlTop; + document.body.scrollTop = bodyTop; + + if (startHeight !== ta.style.height) { + var evt = document.createEvent('Event'); + evt.initEvent('autosize.resized', true, false); + ta.dispatchEvent(evt); + } + } + + // IE9 does not fire onpropertychange or oninput for deletions, + // so binding to onkeyup to catch most of those events. + // There is no way that I know of to detect something like 'cut' in IE9. + if ('onpropertychange' in ta && 'oninput' in ta) { + ta.addEventListener('keyup', adjust); + } + + window.addEventListener('resize', adjust); + ta.addEventListener('input', adjust); + + ta.addEventListener('autosize.update', adjust); + + ta.addEventListener('autosize.destroy', function(style){ + window.removeEventListener('resize', adjust); + ta.removeEventListener('input', adjust); + ta.removeEventListener('keyup', adjust); + ta.removeEventListener('autosize.destroy'); + + Object.keys(style).forEach(function(key){ + ta.style[key] = style[key]; + }); + + ta.removeAttribute('data-autosize-on'); + }.bind(ta, { + height: ta.style.height, + overflow: ta.style.overflow, + overflowY: ta.style.overflowY, + wordWrap: ta.style.wordWrap, + resize: ta.style.resize + })); + + ta.setAttribute('data-autosize-on', true); + ta.style.overflow = 'hidden'; + ta.style.overflowY = 'hidden'; + + init(); + } + + // Do nothing in IE8 or lower + if (typeof window.getComputedStyle !== 'function') { + return function(elements) { + return elements; + }; + } else { + return function(elements) { + if (elements && elements.length) { + Array.prototype.forEach.call(elements, main); + } else if (elements && elements.nodeName) { + main(elements); + } + return elements; + }; + } +})); \ No newline at end of file diff --git a/public/vendor/bootstrap/js/bootstrap.min.js b/public/vendor/bootstrap/js/bootstrap.min.js index 1a6258efcb..d839865900 100644 --- a/public/vendor/bootstrap/js/bootstrap.min.js +++ b/public/vendor/bootstrap/js/bootstrap.min.js @@ -1,7 +1,7 @@ /*! - * Bootstrap v3.0.3 (http://getbootstrap.com) - * Copyright 2013 Twitter, Inc. - * Licensed under http://www.apache.org/licenses/LICENSE-2.0 + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ - -if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]'),b=!0;if(a.length){var c=this.$element.find("input");"radio"===c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?b=!1:a.find(".active").removeClass("active")),b&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}b&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); \ No newline at end of file +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.1",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.1",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(' -
    -
    +
    +
    Logs Control Panel
    diff --git a/src/views/admin/appearance/skins.tpl b/src/views/admin/appearance/skins.tpl index e3e91680af..10211893f5 100644 --- a/src/views/admin/appearance/skins.tpl +++ b/src/views/admin/appearance/skins.tpl @@ -12,7 +12,7 @@
    -
    +
    Revert to Default
    @@ -29,4 +29,4 @@ t.render(data); }); }; - \ No newline at end of file + diff --git a/src/views/admin/development/logger.tpl b/src/views/admin/development/logger.tpl index 826f9e5bcc..6e9a932230 100644 --- a/src/views/admin/development/logger.tpl +++ b/src/views/admin/development/logger.tpl @@ -40,7 +40,7 @@
    -
    +
    Logger Control Panel
    diff --git a/src/views/admin/extend/plugins.tpl b/src/views/admin/extend/plugins.tpl index eb709885a2..dc39b80103 100644 --- a/src/views/admin/extend/plugins.tpl +++ b/src/views/admin/extend/plugins.tpl @@ -9,7 +9,11 @@
  • + + Themes + +
    @@ -79,11 +83,21 @@
  • -
    +
    Plugin Search
    - +
    +
    +
    + +
    +
    Re-order Plugins
    +
    + +

    + Certain plugins work ideally when they are initialised before/after other plugins. You can alter this loading behaviour here. +

    @@ -96,4 +110,30 @@
    -
    \ No newline at end of file + + + + + +
    + + diff --git a/src/views/admin/extend/rewards.tpl b/src/views/admin/extend/rewards.tpl new file mode 100644 index 0000000000..29bf0b8288 --- /dev/null +++ b/src/views/admin/extend/rewards.tpl @@ -0,0 +1,80 @@ +
    +
    +
    +
    Rewards
    +
    +
      + +
    • +
      +
      +
      + +
      +
      +
      + + +
      +
      +
      + +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      + + Enter 0 for infinite +
      +
      +
      + + + + + + +
      +
      +
      +
    • + +
    + + + + +
    +
    +
    + +
    +
    +
    Rewards Control
    +
    + + +
    +
    +
    +
    \ No newline at end of file diff --git a/src/views/admin/extend/widgets.tpl b/src/views/admin/extend/widgets.tpl index 4571f70d1f..91fc127d89 100644 --- a/src/views/admin/extend/widgets.tpl +++ b/src/views/admin/extend/widgets.tpl @@ -3,29 +3,31 @@
    Widget Areas
    -
    - -
    - -
    - -
    -

    {templates.areas.name} {templates.template} / {templates.areas.location}

    -
    + + +
    +
    +
    + +
    + +
    +

    {areas.name} {template} / {areas.location}

    +
    +
    +
    - +
    - +
    - -
    @@ -42,7 +44,7 @@
    -
    +
    {widgets.name} @@ -70,18 +72,18 @@
    None
    -
    +
    Well
    -
    +
    Jumbotron
    -
    +
    Panel
    -
    +
    Panel Header
    @@ -98,7 +100,7 @@
    -
    +
    Alert
    diff --git a/src/views/admin/footer.tpl b/src/views/admin/footer.tpl index 92aba3d202..e81d9e6a1a 100644 --- a/src/views/admin/footer.tpl +++ b/src/views/admin/footer.tpl @@ -13,7 +13,7 @@
    - +

    @@ -43,7 +43,7 @@
    diff --git a/src/views/admin/general/dashboard.tpl b/src/views/admin/general/dashboard.tpl index d5334fffb1..759144152d 100644 --- a/src/views/admin/general/dashboard.tpl +++ b/src/views/admin/general/dashboard.tpl @@ -1,5 +1,6 @@
    -
    + +
    Forum Traffic
    @@ -87,7 +88,8 @@
    -
    + +
    Anonymous vs Registered Users
    diff --git a/src/views/admin/general/homepage.tpl b/src/views/admin/general/homepage.tpl new file mode 100644 index 0000000000..d17593f15a --- /dev/null +++ b/src/views/admin/general/homepage.tpl @@ -0,0 +1,31 @@ +
    +
    +
    Home Page
    +
    + + + + +
    +
    +
    + +
    +
    +
    Save Settings
    +
    + + +
    +
    +
    + + diff --git a/src/views/admin/general/languages.tpl b/src/views/admin/general/languages.tpl index bc75b2fee4..b2365e91a3 100644 --- a/src/views/admin/general/languages.tpl +++ b/src/views/admin/general/languages.tpl @@ -25,7 +25,7 @@
    -
    +
    Languages Control Panel
    @@ -37,4 +37,4 @@ \ No newline at end of file + diff --git a/src/views/admin/general/navigation.tpl b/src/views/admin/general/navigation.tpl new file mode 100644 index 0000000000..fe956cc5bc --- /dev/null +++ b/src/views/admin/general/navigation.tpl @@ -0,0 +1,72 @@ + \ No newline at end of file diff --git a/src/views/admin/general/sounds.tpl b/src/views/admin/general/sounds.tpl index 3556bcbb7d..fb43c138aa 100644 --- a/src/views/admin/general/sounds.tpl +++ b/src/views/admin/general/sounds.tpl @@ -58,7 +58,7 @@
    -
    +
    Sounds Control Panel
    @@ -66,4 +66,4 @@
    -
    \ No newline at end of file +
    diff --git a/src/views/admin/header.tpl b/src/views/admin/header.tpl index dfa2dc9c89..a2b3a4c8e7 100644 --- a/src/views/admin/header.tpl +++ b/src/views/admin/header.tpl @@ -5,103 +5,113 @@ - - - - - - - - - - - - - - - + + + + - - - - - +
    +
    + -
    -