diff --git a/.gitignore b/.gitignore index 2f966c4535..82ed213c66 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ public/css/*.css *.sublime-project *.sublime-workspace .project -.idea *.swp Vagrantfile .vagrant @@ -31,4 +30,14 @@ pidfile /public/stylesheet.css /public/admin.css /public/nodebb.min.js -/public/nodebb.min.js.map \ No newline at end of file +/public/nodebb.min.js.map + +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio +*.iml + +## Directory-based project format: +.idea/ + +## File-based project format: +*.ipr +*.iws \ No newline at end of file diff --git a/app.js b/app.js index 78afb10b9e..0a963230b0 100644 --- a/app.js +++ b/app.js @@ -43,7 +43,7 @@ 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' || nconf.get('log-level') === 'info') ? 'info' : 'verbose' + level: nconf.get('log-level') || (global.env === 'production' ? 'info' : 'verbose') }); if(os.platform() === 'linux') { @@ -182,16 +182,13 @@ function start() { function(next) { require('./src/meta').configs.init(next); }, + function(next) { + require('./src/meta').dependencies.check(next); + }, function(next) { require('./src/upgrade').check(next); }, - function(schema_ok, next) { - if (!schema_ok && nconf.get('check-schema') !== false) { - winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:'); - winston.warn(' ./nodebb upgrade'); - process.exit(); - return; - } + function(next) { var webserver = require('./src/webserver'); require('./src/socket.io').init(webserver.server); @@ -204,12 +201,25 @@ function start() { } ], function(err) { if (err) { - if (err.stacktrace !== false) { - winston.error(err.stack); - } else { - winston.error(err.message); + switch(err.message) { + case 'schema-out-of-date': + winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:'); + winston.warn(' ./nodebb upgrade'); + break; + case 'dependencies-out-of-date': + winston.warn('One or more of NodeBB\'s dependent packages are out-of-date. Please run the following command to update them:'); + winston.warn(' ./nodebb upgrade'); + break; + default: + if (err.stacktrace !== false) { + winston.error(err.stack); + } else { + winston.error(err.message); + } + break; } + // Either way, bad stuff happened. Abort start. process.exit(); } }); @@ -403,4 +413,4 @@ function restart() { winston.error('[app] Could not restart server. Shutting down.'); shutdown(1); } -} \ No newline at end of file +} diff --git a/minifier.js b/minifier.js index 3cd1c81ff8..bca79e68f1 100644 --- a/minifier.js +++ b/minifier.js @@ -30,9 +30,10 @@ Minifier.js.minify = function (scripts, minify, callback) { process.on('message', function(payload) { switch(payload.action) { case 'js': - Minifier.js.minify(payload.scripts, payload.minify, function(minified) { + Minifier.js.minify(payload.scripts, payload.minify, function(minified/*, sourceMap*/) { process.send({ type: 'end', + // sourceMap: sourceMap, minified: minified }); }); @@ -41,8 +42,11 @@ process.on('message', function(payload) { }); function minifyScripts(scripts, callback) { + // The portions of code involving the source map are commented out as they're broken in UglifyJS2 + // Follow along here: https://github.com/mishoo/UglifyJS2/issues/700 try { var minified = uglifyjs.minify(scripts, { + // outSourceMap: "nodebb.min.js.map", compress: false }), hasher = crypto.createHash('md5'), @@ -56,7 +60,7 @@ function minifyScripts(scripts, callback) { payload: hash.slice(0, 8) }); - callback(minified.code); + callback(minified.code/*, minified.map*/); } catch(err) { process.send({ type: 'error', diff --git a/nodebb b/nodebb index 8e6a32ddfa..a93e40c785 100755 --- a/nodebb +++ b/nodebb @@ -35,7 +35,7 @@ switch(process.argv[2]) { process.stdout.write('\t"' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'); } else { process.stdout.write('\nNodeBB is not running\n'.bold); - process.stdout.write('\t"' + './nodebb start'.yellow + '" to launch the NodeBB server\n\n'); + process.stdout.write('\t"' + './nodebb start'.yellow + '" to launch the NodeBB server\n\n'.reset); } }) break; @@ -44,7 +44,7 @@ switch(process.argv[2]) { process.stdout.write('\nStarting NodeBB\n'.bold); process.stdout.write(' "' + './nodebb stop'.yellow + '" to stop the NodeBB server\n'); process.stdout.write(' "' + './nodebb log'.yellow + '" to view server output\n'); - process.stdout.write(' "' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'); + process.stdout.write(' "' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'.reset); // Spawn a new NodeBB process cproc.fork(__dirname + '/loader.js', { @@ -91,7 +91,8 @@ switch(process.argv[2]) { break; case 'log': - process.stdout.write('\nType '.red + 'Ctrl-C '.bold + 'to exit\n\n'.red); + process.stdout.write('\nType '.red + 'Ctrl-C '.bold + 'to exit'.red); + process.stdout.write('\n\n'.reset); cproc.spawn('tail', ['-F', './logs/output.log'], { cwd: __dirname, stdio: 'inherit' @@ -144,7 +145,7 @@ switch(process.argv[2]) { } else { var message = 'NodeBB Upgrade Complete!', spaces = new Array(Math.floor(process.stdout.columns / 2) - (message.length / 2) + 1).join(' '); - process.stdout.write('\n' + spaces + message.green.bold + '\n\n'); + process.stdout.write('\n' + spaces + message.green.bold + '\n\n'.reset); } }); break; @@ -162,6 +163,6 @@ switch(process.argv[2]) { process.stdout.write('\t' + 'upgrade'.yellow + '\tRun NodeBB upgrade scripts, ensure packages are up-to-date\n'); process.stdout.write('\t' + 'dev'.yellow + '\tStart NodeBB in interactive development mode\n'); process.stdout.write('\t' + 'watch'.yellow + '\tStart NodeBB in development mode and watch for changes\n'); - process.stdout.write('\n'); + process.stdout.write('\n'.reset); break; } diff --git a/package.json b/package.json index 60b101277c..b84816767f 100644 --- a/package.json +++ b/package.json @@ -28,18 +28,19 @@ "daemon": "~1.1.0", "express": "^4.9.5", "express-session": "^1.8.2", - "lwip": "0.0.7", "gravatar": "^1.1.0", "heapdump": "^0.3.0", "less": "^2.0.0", "logrotate-stream": "^0.2.3", "lru-cache": "^2.6.1", + "lwip": "0.0.7", "mime": "^1.3.4", "minimist": "^1.1.1", "mkdirp": "~0.5.0", "mmmagic": "^0.3.13", "morgan": "^1.3.2", "nconf": "~0.7.1", + "nodebb-plugin-composer-default": "^1.0.2", "nodebb-plugin-dbsearch": "^0.2.12", "nodebb-plugin-emoji-extended": "^0.4.8", "nodebb-plugin-markdown": "^3.0.0", @@ -48,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "^0.4.0", "nodebb-rewards-essentials": "^0.0.1", "nodebb-theme-lavender": "^1.0.42", - "nodebb-theme-persona": "^0.2.0", - "nodebb-theme-vanilla": "^1.1.0", + "nodebb-theme-persona": "^1.0.0", + "nodebb-theme-vanilla": "^2.0.0", "nodebb-widget-essentials": "^1.0.2", "npm": "^2.1.4", "passport": "^0.2.1", @@ -68,7 +69,7 @@ "string": "^3.0.0", "templates.js": "^0.2.6", "touch": "0.0.3", - "uglify-js": "git+https://github.com/julianlam/UglifyJS2.git", + "uglify-js": "^2.4.23", "underscore": "~1.8.3", "underscore.deep": "^0.5.1", "validator": "^3.30.0", diff --git a/public/language/ar/category.json b/public/language/ar/category.json index b1732ff8ba..430a82390d 100644 --- a/public/language/ar/category.json +++ b/public/language/ar/category.json @@ -3,10 +3,10 @@ "guest-login-post": "يجب عليك تسجيل الدخول للرد", "no_topics": "لا توجد مواضيع في هذه الفئةلم لا تحاول إنشاء موضوع؟
", "browsing": "تصفح", - "no_replies": "لم يرد أحد", + "no_replies": "لا توجد ردود.", "share_this_category": "انشر هذه الفئة", "watch": "متابعة", "ignore": "تجاهل", - "watch.message": "You are now watching updates from this category", - "ignore.message": "You are now ignoring updates from this category" + "watch.message": "أنت اﻷن متابع لتحديثات هذه الفئة", + "ignore.message": "أنت اﻷن تتجاهل تحديثات هذه الفئة" } \ No newline at end of file diff --git a/public/language/ar/email.json b/public/language/ar/email.json index 2eeef2c6cc..3970ae01c7 100644 --- a/public/language/ar/email.json +++ b/public/language/ar/email.json @@ -6,8 +6,8 @@ "welcome.text1": "شكرًا على تسجيلك في %1!", "welcome.text2": "لتفعيل حسابك، نحتاج إلى التأكد من صحة عنوان البريد الإلكتروني الذي تسجلت به.", "welcome.cta": "انقر هنا لتفعيل عنوان بريدك الإلكتروني", - "reset.text1": "لقد توصلنا بطلب إعادة تعيين كلمة السرالخاصة بك، ربما لكونك قد نسيتها, إن لم يكن الأمر كذلك، المرجو تجاهل هذه الرسالة.", - "reset.text2": "لمواصلة طلب إعاة تعيين كلمة السر، المرجو تتبع هذا الرابط.", + "reset.text1": "لقد توصلنا بطلب إعادة تعيين كلمة المرور الخاصة بك، ربما لكونك قد نسيتها, إن لم يكن الأمر كذلك، المرجو تجاهل هذه الرسالة.", + "reset.text2": "لمواصلة طلب إعاة تعيين كلمة المرور، الرجاء تتبع هذا الرابط.", "reset.cta": "انقر هنا لإعادة تعيين كلمة السر الخاصة بك.", "reset.notify.subject": "تم تغيير كلمة المرور بنجاح", "reset.notify.text1": "نحيطك علما أن كلمة مرورك قد تم تغييرها في %1", diff --git a/public/language/ar/error.json b/public/language/ar/error.json index 2e6908cbe4..055cd22c48 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -2,7 +2,7 @@ "invalid-data": "بيانات غير صالحة", "not-logged-in": "لم تقم بتسجيل الدخول", "account-locked": "تم حظر حسابك مؤقتًا.", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "البحث في المنتدى يتطلب حساب - الرجاء تسجيل الدخول أو التسجيل", "invalid-cid": "قائمة غير موجودة", "invalid-tid": "موضوع غير متواجد", "invalid-pid": "رد غير موجود", @@ -18,10 +18,10 @@ "username-taken": "اسم المستخدم مأخوذ", "email-taken": "البريد الالكتروني مأخوذ", "email-not-confirmed": "عنوان بريدك الإلكتروني غير مفعل بعد. انقر هنا لتفعيله من فضلك.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", + "email-not-confirmed-chat": "لا يمكنك الدردشة حتى تقوم بتأكيد بريدك الإلكتروني، الرجاء إضغط هنا لتأكيد بريدك اﻹلكتروني.", "no-email-to-confirm": "هذا المنتدى يستلزم تفعيل بريدك الإلكتروني، انقر هنا من فضلك لإدخاله.", "email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.", - "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", + "confirm-email-already-sent": "لقد تم ارسال بريد التأكيد، الرجاء اﻹنتظار 1% دقائق لإعادة اﻹرسال", "username-too-short": "اسم المستخدم قصير.", "username-too-long": "اسم المستخدم طويل", "user-banned": "المستخدم محظور", @@ -57,8 +57,8 @@ "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", + "group-already-member": "أنت بالفعل عضو في هذه المجموعة ", + "group-needs-owner": "هذه المجموعة تتطلب مالك واحد على اﻷقل", "post-already-deleted": "سبق وتم حذف هذا الرد", "post-already-restored": "سبق وتم إلغاء حذف هذا الرد", "topic-already-deleted": "سبق وتم حذف هذا الموضوع", @@ -67,7 +67,7 @@ "topic-thumbnails-are-disabled": "الصور المصغرة غير مفعلة.", "invalid-file": "ملف غير مقبول", "uploads-are-disabled": "رفع الملفات غير مفعل", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", + "signature-too-long": "عذرا، توقيعك يجب ألا يتجاوز %1 حرفًا.", "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", "cant-chat-with-yourself": "لايمكنك فتح محادثة مع نفسك", "chat-restricted": "هذا المستخدم عطل المحادثات الواردة عليه. يجب أن يتبعك حتى تتمكن من فتح محادثة معه.", @@ -78,7 +78,7 @@ "not-enough-reputation-to-flag": "ليس لديك سمعة تكفي للإشعار بموضوع مخل", "reload-failed": "المنتدى واجه مشكلة أثناء إعادة التحميل: \"%1\". سيواصل المنتدى خدمة العملاء السابقين لكن يجب عليك إلغاء أي تغيير قمت به قبل إعادة التحميل.", "registration-error": "حدث خطأ أثناء التسجيل", - "parse-error": "Something went wrong while parsing server response", + "parse-error": "حدث خطأ ما أثناء تحليل استجابة الخادم", "wrong-login-type-email": "الرجاء استعمال بريدك اﻹلكتروني للدخول", "wrong-login-type-username": "الرجاء استعمال اسم المستخدم الخاص بك للدخول" } \ No newline at end of file diff --git a/public/language/ar/global.json b/public/language/ar/global.json index 15275ddc39..9d99717966 100644 --- a/public/language/ar/global.json +++ b/public/language/ar/global.json @@ -3,7 +3,7 @@ "search": "بحث", "buttons.close": "أغلق", "403.title": "غير مسموح بالدخول", - "403.message": "You seem to have stumbled upon a page that you do not have access to.", + "403.message": "يبدو أنك قد تعثرت على صفحة لا تمتلك الصلاحية للدخول إليها", "403.login": "Perhaps you should try logging in?", "404.title": "لم يتم العثور", "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", diff --git a/public/language/ar/modules.json b/public/language/ar/modules.json index 061fc4430c..56ff907b18 100644 --- a/public/language/ar/modules.json +++ b/public/language/ar/modules.json @@ -15,7 +15,7 @@ "chat.seven_days": "7 أيام", "chat.thirty_days": "30 يومًا", "chat.three_months": "3 أشهر", - "composer.compose": "Compose", + "composer.compose": "اكتب", "composer.show_preview": "عرض المعاينة", "composer.hide_preview": "إخفاء المعاينة", "composer.user_said_in": "%1 كتب في %2", diff --git a/public/language/ar/pages.json b/public/language/ar/pages.json index 4b4e1af182..cf230fc28a 100644 --- a/public/language/ar/pages.json +++ b/public/language/ar/pages.json @@ -12,7 +12,7 @@ "user.followers": "المستخدمون الذين يتبعون %1", "user.posts": "ردود %1", "user.topics": "مواضيع %1", - "user.groups": "%1's Groups", + "user.groups": "مجموعات %1", "user.favourites": "مفضلات %1", "user.settings": "خيارات المستخدم", "user.watched": "المواضيع المتابعة من قبل %1 ", diff --git a/public/language/ar/reset_password.json b/public/language/ar/reset_password.json index f6107ec45b..fe35f3569c 100644 --- a/public/language/ar/reset_password.json +++ b/public/language/ar/reset_password.json @@ -11,7 +11,7 @@ "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.", - "password_expired": "Your password has expired, please choose a new password" + "password_too_short": "كلمة المرور التي أدخلتها قصيرة، الرجاء اختر كلمة مرور مختلفة", + "passwords_do_not_match": "كلمتا السر التي أدخلتهما غير متطابقتان", + "password_expired": "لقد انتهت صلاحية كلمة المرور الخاصة بك، الرجاء اختيار كلمة مرور جديدة" } \ No newline at end of file diff --git a/public/language/ar/search.json b/public/language/ar/search.json index c126f78f86..39a6b89927 100644 --- a/public/language/ar/search.json +++ b/public/language/ar/search.json @@ -1,11 +1,11 @@ { - "results_matching": "%1 نتيجة (نتائج) موافقة ل \"%2\", (%3 ثواني)", - "no-matches": "No matches found", + "results_matching": "%1 نتيجة (نتائج) موافقة لـ \"%2\", (%3 ثواني)", + "no-matches": "لم يتم العثور على نتائج.", "advanced-search": "بحث متقدم", "in": "في", "titles": "العناوين", "titles-posts": "العناوين والمشاركات", - "posted-by": "Posted by", + "posted-by": "مشاركة من طرف", "in-categories": "في الفئات", "search-child-categories": "بحث في الفئات الفرعية", "reply-count": "عدد المشاركات", @@ -22,7 +22,7 @@ "three-months": "ثلاثة أشهر", "six-months": "ستة أشهر", "one-year": "عام", - "sort-by": "Sort by", + "sort-by": "عرض حسب", "last-reply-time": "تاريخ آخر رد", "topic-title": "عنوان الموضوع", "number-of-replies": "عدد الردود", @@ -30,8 +30,8 @@ "topic-start-date": "تاريخ بدأ الموضوع", "username": "اسم المستخدم", "category": "فئة", - "descending": "In descending order", - "ascending": "In ascending order", + "descending": "في ترتيب تنازلي", + "ascending": "في ترتيب تصاعدي", "save-preferences": "حفظ التفضيلات", "clear-preferences": "ازالة التفضيلات", "search-preferences-saved": "تم حفظ تفضيلات البحث", diff --git a/public/language/ar/user.json b/public/language/ar/user.json index f3a33a5c59..6d4e87c773 100644 --- a/public/language/ar/user.json +++ b/public/language/ar/user.json @@ -79,6 +79,6 @@ "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", "follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد فيها", "follow_topics_you_create": "متابعة المواضيع التي تنشئها", - "grouptitle": "Select the group title you would like to display", + "grouptitle": "حدد عنوان المجموعة الذي تريد عرضه", "no-group-title": "لا يوجد عنوان للمجموعة" } \ No newline at end of file diff --git a/public/language/ar/users.json b/public/language/ar/users.json index e10ab98e61..1c08cd3176 100644 --- a/public/language/ar/users.json +++ b/public/language/ar/users.json @@ -5,7 +5,7 @@ "search": "بحث", "enter_username": "أدخل اسم مستخدم للبحث", "load_more": "حمل المزيد", - "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "users-found-search-took": "تم إيجاد %1 مستخدمـ(ين)! استغرق البحث %2 ثانية.", "filter-by": "Filter By", "online-only": "المتصلون فقط", "picture-only": "صورة فقط" diff --git a/public/language/de/error.json b/public/language/de/error.json index 61cb1fa3f9..30af2d7c65 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": "Searching requires an account - please login or register.", + "search-requires-login": "Die Suche erfordert ein Konto, bitte einloggen oder registrieren.", "invalid-cid": "Ungültige Kategorie-ID", "invalid-tid": "Ungültige Themen-ID", "invalid-pid": "Ungültige Beitrags-ID", @@ -21,11 +21,11 @@ "email-not-confirmed-chat": "Deine E-Mail wurde noch nicht bestätigt. Bitte klicke hier, um deine E-Mail zu bestätigen.", "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", - "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", + "confirm-email-already-sent": "Bestätigungsmail wurde verschickt, bitte warten %1 Minute(n) warten um eine weitere zu verschicken.", "username-too-short": "Benutzername ist zu kurz", "username-too-long": "Der Benutzername ist zu lang", "user-banned": "Der Benutzer ist gesperrt", - "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "user-too-new": "Entschuldigung, Sie müssen %1 Sekunde(n) warten, bevor Sie ihren ersten Beitrag schreiben können.", "no-category": "Die Kategorie existiert nicht", "no-topic": "Das Thema existiert nicht", "no-post": "Der Beitrag existiert nicht", @@ -36,17 +36,17 @@ "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": "You are only allowed to edit posts for %1 second(s) after posting", + "post-edit-duration-expired": "Entschuldigung, Sie dürfen Beiträge nur %1 Sekunde(n) nach dem veröffentlichen editieren.", "still-uploading": "Bitte warte bis der Vorgang abgeschlossen ist.", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", + "content-too-short": "Bitte schreiben Sie einen längeren Beitrag. Beiträge sollten mindestens %1 Zeichen enthalten.", + "content-too-long": "Bitte schreiben Sie einen kürzeren Beitrag. Beiträge können nicht länger als %1 Zeichen sein.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) 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 character(s)", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", - "file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file", + "tag-too-short": "Bitte geben Sie ein längeres Schlagwort ein. Tags sollten mindestens %1 Zeichen enthalten.", + "tag-too-long": "Bitte geben Sie ein kürzeres Schlagwort ein. Tags können nicht länger als %1 Zeichen sein.", + "file-too-big": "Die maximale Dateigröße ist %1 kB, bitte laden Sie 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", @@ -67,8 +67,8 @@ "topic-thumbnails-are-disabled": "Vorschaubilder für Themen sind deaktiviert", "invalid-file": "Datei ungültig", "uploads-are-disabled": "Uploads sind deaktiviert", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Entschuldigung, Ihre Signatur kann nicht länger als %1 Zeichen sein.", + "about-me-too-long": "Entschuldigung, Ihr \"über mich\" kann nicht länger als %1 Zeichen sein.", "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.", diff --git a/public/language/de/topic.json b/public/language/de/topic.json index 43d59ecb73..5334700f39 100644 --- a/public/language/de/topic.json +++ b/public/language/de/topic.json @@ -1,37 +1,37 @@ { "topic": "Thema", - "topic_id": "Topic ID", - "topic_id_placeholder": "Topic ID eingeben", - "no_topics_found": "Keine passenden Themen gefunden.", + "topic_id": "Themen-ID", + "topic_id_placeholder": "Themen-ID eingeben", + "no_topics_found": "Keine passenden Themen gefunden!", "no_posts_found": "Keine Beiträge gefunden!", "post_is_deleted": "Dieser Beitrag wurde gelöscht!", - "topic_is_deleted": "This topic is deleted!", + "topic_is_deleted": "Dieses Thema wurde gelöscht!", "profile": "Profil", - "posted_by": "Geschrieben von %1", + "posted_by": "Verfasst von %1", "posted_by_guest": "Verfasst von einem Gast", "chat": "Chat", "notify_me": "Erhalte eine Benachrichtigung bei neuen Antworten zu diesem Thema.", - "quote": "zitieren", - "reply": "antworten", + "quote": "Zitieren", + "reply": "Antworten", "guest-login-reply": "Anmelden zum Antworten", - "edit": "bearbeiten", - "delete": "löschen", - "purge": "säubern", + "edit": "Bearbeiten", + "delete": "Löschen", + "purge": "Bereinigen", "restore": "Wiederherstellen", - "move": "verschieben", + "move": "Verschieben", "fork": "Aufspalten", "link": "Link", "share": "Teilen", - "tools": "Tools", + "tools": "Werkzeuge", "flag": "Markieren", "locked": "Gesperrt", - "bookmark_instructions": "Klicke hier um zur letzten Position zurückzukehren oder schließe zum Abbrechen.", + "bookmark_instructions": "Klicke hier, um zur letzten Position zurückzukehren oder schließe zum Abbrechen.", "flag_title": "Diesen Beitrag zur Moderation markieren", "flag_confirm": "Sind Sie sicher, dass Sie diesen Post markieren möchten?", "flag_success": "Dieser Beitrag wurde erfolgreich für die Moderation markiert.", "deleted_message": "Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.", "following_topic.message": "Du erhälst nun eine Benachrichtigung, wenn jemand einen Beitrag zu diesem Thema verfasst.", - "not_following_topic.message": "Du erhälst keine weiteren Benachrichtigungen zu diesem Thema.", + "not_following_topic.message": "Du erhälst keine weiteren Benachrichtigungen zu diesem Thema mehr.", "login_to_subscribe": "Bitte registrieren oder einloggen um dieses Thema zu abonnieren", "markAsUnreadForAll.success": "Thema für Alle als ungelesen markiert.", "watch": "Beobachten", @@ -39,10 +39,10 @@ "watch.title": "Bei neuen Antworten benachrichtigen", "unwatch.title": "Dieses Thema nicht mehr beobachten", "share_this_post": "Diesen Beitrag teilen", - "thread_tools.title": "Themen-Tools", + "thread_tools.title": "Themen-Werkzeuge", "thread_tools.markAsUnreadForAll": "Als ungelesen markieren", - "thread_tools.pin": "Thema anpinnen", - "thread_tools.unpin": "Thema nicht mehr anpinnen", + "thread_tools.pin": "Thema anheften", + "thread_tools.unpin": "Thema nicht mehr anheften", "thread_tools.lock": "Thema schließen", "thread_tools.unlock": "Thema öffnen", "thread_tools.move": "Thema verschieben", @@ -53,11 +53,11 @@ "thread_tools.restore": "Thema wiederherstellen", "thread_tools.restore_confirm": "Bist du sicher, dass du dieses Thema wiederherstellen möchtest?", "thread_tools.purge": "Thema säubern", - "thread_tools.purge_confirm": "Bist du sicher, dass du dieses Thema säubern möchtest?", - "topic_move_success": "Thema wurde erfolgreich zu %1 verschoben.", + "thread_tools.purge_confirm": "Bist du sicher, dass du dieses Thema bereinigen möchtest?", + "topic_move_success": "Thema wurde erfolgreich nach %1 verschoben.", "post_delete_confirm": "Sind Sie sicher, dass Sie diesen Beitrag löschen möchten?", "post_restore_confirm": "Sind Sie sicher, dass Sie diesen Beitrag wiederherstellen möchten?", - "post_purge_confirm": "Sind Sie sicher, das Sie diesen Beitrag säubern möchten?", + "post_purge_confirm": "Sind Sie sicher, das Sie diesen Beitrag bereinigen möchten?", "load_categories": "Kategorien laden", "disabled_categories_note": "Deaktivierte Kategorien sind ausgegraut.", "confirm_move": "Verschieben", @@ -72,29 +72,29 @@ "post_moved": "Beitrag wurde verschoben!", "fork_topic": "Thema aufspalten", "topic_will_be_moved_to": "Dieses Thema wird verschoben nach", - "fork_topic_instruction": "Klicke auf die Beiträge, die du aufspalten willst", + "fork_topic_instruction": "Klicke auf die Beiträge, die aufgespaltet werden sollen", "fork_no_pids": "Keine Beiträge ausgewählt!", - "fork_success": "Thema erfolgreich abgespalten! Klicke hier, um zum abgespalteten Thema zu gelangen.", + "fork_success": "Thema erfolgreich aufgespalten! Klicke hier, um zum aufgespalteten 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", "composer.new_topic": "Neues Thema", - "composer.uploading": "Upload läuft...", + "composer.uploading": "Lade hoch...", "composer.thumb_url_label": "Vorschaubild-URL hier einfügen", "composer.thumb_title": "Vorschaubild zu diesem Thema hinzufügen", "composer.thumb_url_placeholder": "http://example.com/thumb.png", "composer.thumb_file_label": "Oder eine Datei hochladen", "composer.thumb_remove": "Felder leeren", - "composer.drag_and_drop_images": "Bilder hier reinziehen", + "composer.drag_and_drop_images": "Bilder hierher ziehen", "more_users_and_guests": "%1 weitere(r) Nutzer und %2 Gäste", "more_users": "%1 weitere(r) Nutzer", "more_guests": "%1 weitere Gäste", "users_and_others": "%1 und %2 andere", "sort_by": "Sortieren nach", "oldest_to_newest": "Älteste zuerst", - "newest_to_oldest": "Neuster zuerst", + "newest_to_oldest": "Neuste zuerst", "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 d1677c7609..0e6d4e08c4 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -21,7 +21,7 @@ "watched": "Beobachtet", "followers": "Folger", "following": "Folgt", - "aboutme": "About me", + "aboutme": "Über mich", "signature": "Signatur", "gravatar": "Gravatar", "birthday": "Geburtstag", diff --git a/public/language/es/category.json b/public/language/es/category.json index dcb03b8ef3..edf0773adc 100644 --- a/public/language/es/category.json +++ b/public/language/es/category.json @@ -1,7 +1,7 @@ { "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?", + "no_topics": "No hay temas en esta categoría.
¿Por qué no te animas y publicas uno?", "browsing": "viendo ahora", "no_replies": "Nadie ha respondido aún", "share_this_category": "Compartir esta categoría", diff --git a/public/language/es/email.json b/public/language/es/email.json index fd42293e1b..cc9c02500c 100644 --- a/public/language/es/email.json +++ b/public/language/es/email.json @@ -5,18 +5,18 @@ "greeting_with_name": "Hola %1", "welcome.text1": "Gracias por registrarte con %1!", "welcome.text2": "Para activar completamente tu cuenta, necesitamos verificar que la dirección email con la que te registraste te pertenece.", - "welcome.cta": "Cliquea aquí para confirmar tu dirección email.", - "reset.text1": "Recibimos una solicitud para reiniciar tu contraseña, posiblemente porque la olvidaste. Si no es así, por favor ignora este email.", + "welcome.cta": "Cliquea aquí para confirmar tu dirección de email.", + "reset.text1": "Hemos recibido 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", "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.", + "reset.notify.text1": "Te estamos notificando que en %1, tu contraseña ha sido cambiada correctamente.", + "reset.notify.text2": "Si no has sido tú, 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": "No han habido temas activos en el pasado %1", + "digest.no_topics": "No han habido temas activos anteriores %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.", diff --git a/public/language/es/user.json b/public/language/es/user.json index be3ad91ed8..730b29bafa 100644 --- a/public/language/es/user.json +++ b/public/language/es/user.json @@ -77,7 +77,7 @@ "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' sustituirá el comportamiento por defecto del navegador y le permitirá buscar en el tema al completo, en vez de hacer una búsqueda únicamente sobre el contenido mostrado en pantalla", - "follow_topics_you_reply_to": "Seguir los temas en las que respondes", + "follow_topics_you_reply_to": "Seguir los temas en los que respondes", "follow_topics_you_create": "Seguir publicaciones que creas", "grouptitle": "Selecciona el título del grupo que deseas visualizar", "no-group-title": "Sin título de grupo" diff --git a/public/language/et/email.json b/public/language/et/email.json index 1f1c1e853a..6c89d2a386 100644 --- a/public/language/et/email.json +++ b/public/language/et/email.json @@ -1,16 +1,16 @@ { - "password-reset-requested": "Parooli muutmise taotlus - %1!", - "welcome-to": "Tere tulemast foorumisse %1", + "password-reset-requested": "Parooli muutmise taotlus - %1", + "welcome-to": "Tere tulemast %1 foorumisse", "greeting_no_name": "Tere", "greeting_with_name": "Tere %1", - "welcome.text1": "Täname et oled registreerinud foorumisse %1!", + "welcome.text1": "Täname et oled registreerinud %1 foorumisse!", "welcome.text2": "Konto täielikuks aktiveerimiseks peame me kinnitama, et registreerimisel kasutatud e-mail kuulub teile.", "welcome.cta": "Vajuta siia, et kinnitada oma e-maili aadress", "reset.text1": "Meile laekus päring parooli muutmiseks. Kui päring ei ole teie poolt esitatud või te ei soovi parooli muuta, siis võite antud kirja ignoreerida.", "reset.text2": "Selleks, et jätkata parooli muutmisega vajuta järgnevale lingile:", "reset.cta": "Vajuta siia, et taotleda uut parooli", "reset.notify.subject": "Parool edukalt muudetud", - "reset.notify.text1": "Teavitame sind, et sinu parool %1 foorumis on edukalt muudetud.", + "reset.notify.text1": "Teatame, et sinu parooli muutmine kuupäeval %1 oli edukas.", "reset.notify.text2": "Kui te ei ole lubanud seda, siis teavitage koheselt administraatorit.", "digest.notifications": "Sul on lugemata teateid %1 poolt:", "digest.latest_topics": "Viimased teemad %1 poolt", diff --git a/public/language/et/global.json b/public/language/et/global.json index b383959064..bc66223d36 100644 --- a/public/language/et/global.json +++ b/public/language/et/global.json @@ -45,7 +45,7 @@ "alert.follow": "Sa jälgid nüüd %1!", "online": "Sees", "users": "Kasutajad", - "topics": "Teemad", + "topics": "Teemat", "posts": "Postitust", "views": "Vaatamist", "reputation": "Reputatsioon", diff --git a/public/language/et/notifications.json b/public/language/et/notifications.json index 24c90fce91..720cd93bf7 100644 --- a/public/language/et/notifications.json +++ b/public/language/et/notifications.json @@ -21,7 +21,7 @@ "user_mentioned_you_in": "%1 mainis sind postituses %2", "user_started_following_you": "%1 hakkas sind jälgima.", "email-confirmed": "Emaili aadress kinnitatud", - "email-confirmed-message": "Täname, et kinnitasite oma emaili aadressi. Teie kasutaja omn nüüd täielikult aktiveeritud.", + "email-confirmed-message": "Täname, et kinnitasite oma emaili aadressi. Teie kasutaja on nüüd täielikult aktiveeritud.", "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/ko/category.json b/public/language/ko/category.json index f7ccdba720..e2a4059181 100644 --- a/public/language/ko/category.json +++ b/public/language/ko/category.json @@ -1,11 +1,11 @@ { "new_topic_button": "새 주제 생성", - "guest-login-post": "Log in to post", + "guest-login-post": "로그인", "no_topics": "이 카테고리에는 생성된 주제가 없습니다.
먼저 주제를 생성해 보세요.", "browsing": "이 주제를 읽고 있는 사용자", "no_replies": "답글이 없습니다.", "share_this_category": "이 카테고리를 공유", - "watch": "Watch", + "watch": "관심 주제", "ignore": "관심 해제", "watch.message": "You are now watching updates from this category", "ignore.message": "You are now ignoring updates from this category" diff --git a/public/language/nb/category.json b/public/language/nb/category.json index 673aec04c3..f4b2298a0d 100644 --- a/public/language/nb/category.json +++ b/public/language/nb/category.json @@ -1,7 +1,7 @@ { "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?", + "no_topics": "Det er ingen emner i denne kategorien
Hvorfor ikke lage et?", "browsing": "leser", "no_replies": "Ingen har svart", "share_this_category": "Del denne kategorien", diff --git a/public/language/nb/email.json b/public/language/nb/email.json index 37b5df85d0..a51c87c7fc 100644 --- a/public/language/nb/email.json +++ b/public/language/nb/email.json @@ -4,8 +4,8 @@ "greeting_no_name": "Hallo", "greeting_with_name": "Hallo, %1", "welcome.text1": "Takk for at du registrerte deg hos %1!", - "welcome.text2": "For å aktivere kontoen din må vi verifisere at du eier epost-adressen du registrerte med.", - "welcome.cta": "Klikk her for å verifisere epost-adressen din", + "welcome.text2": "For å aktivere kontoen din må vi verifisere at du eier e-postadressen du registrerte med.", + "welcome.cta": "Klikk her for å verifisere e-postadressen din", "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", diff --git a/public/language/nb/error.json b/public/language/nb/error.json index fad46d11e6..e9c1e39447 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -1,8 +1,8 @@ { - "invalid-data": "Ugyldig data", + "invalid-data": "Ugyldige data", "not-logged-in": "Du ser ikke ut til å være logget inn.", "account-locked": "Kontoen din har blitt midlertidig låst", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "Søking krever en konto - vennligst logg inn eller registrer deg.", "invalid-cid": "Ugyldig kategori-ID", "invalid-tid": "Ugyldig emne-ID", "invalid-pid": "Ugyldig innlegg-ID", @@ -21,11 +21,11 @@ "email-not-confirmed-chat": "Du kan ikke chatte før e-posten din er bekreftet, vennligst klikk her for å bekrefte e-postadressen.", "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.", - "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", + "confirm-email-already-sent": "Bekreftelsesepost allerede sendt, vennligst vent %1 minutt(er) for å sende enn til.", "username-too-short": "Brukernavnet er for kort", "username-too-long": "Brukernavnet er for langt", "user-banned": "Bruker utestengt", - "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "user-too-new": "Beklager, du må vente %1 sekund(er) før du lager ditt første innlegg", "no-category": "Kategorien eksisterer ikke.", "no-topic": "Emne eksisterer ikke", "no-post": "Innlegg eksisterer ikke", @@ -36,24 +36,24 @@ "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": "You are only allowed to edit posts for %1 second(s) after posting", + "post-edit-duration-expired": "Du har bare lov til å redigere innlegg i %1 sekund(er) etter posting", "still-uploading": "Vennligst vent til opplastingene blir fullført.", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", - "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", - "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) 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 character(s)", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", - "file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file", + "content-too-short": "Vennligst skriv et lengre innlegg. Innlegg må inneholde minst %1 tegn.", + "content-too-long": "Vennligst skriv et kortere innlegg. Innlegg kan ikke være lengre enn %1 tegn.", + "title-too-short": "Vennligst skriv en lengre tittel. Titler må inneholde minst %1 tegn.", + "title-too-long": "Vennligst skriv en kortere tittel. Tittel kan ikke være lengre enn %1 tegn.", + "too-many-posts": "Du kan bare poste hvert %1 sekund – vennligst vent før du poster igjen", + "too-many-posts-newbie": "Som en ny bruker kan du bare poste en gang hvert %1. sekund, før du har opparbeidet %2 rykte – vennligst vent før du poster igjen", + "tag-too-short": "Vennligst skriv en lengre tag. Tagger må være på minst %1 tegn", + "tag-too-long": "Vennligst skriv en kortere tag. Tagger kan ikke være lengre enn %1 tegn", + "file-too-big": "Største tillatte filstørrelse er %1 kB – 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. Tilatte typer er: %1", "invalid-image-extension": "Ugyldig bildefiltype", - "invalid-file-type": "Invalid file type. Allowed types are: %1", + "invalid-file-type": "Ugyldig filtype. Tillatte typer er: %1", "group-name-too-short": "Gruppenavnet er for kort", "group-already-exists": "Gruppe eksisterer allerede", "group-name-change-not-allowed": "Gruppenavn ikke tillatt", @@ -63,12 +63,12 @@ "post-already-restored": "Dette innlegget har allerede blitt gjenopprettet", "topic-already-deleted": "Dette emnet har allerede blitt slettet", "topic-already-restored": "Dette emnet har allerede blitt gjenopprettet", - "cant-purge-main-post": "You can't purge the main post, please delete the topic instead", + "cant-purge-main-post": "Du kan ikke slette hovedinnlegget. Vennligst slett emnet i stedet.", "topic-thumbnails-are-disabled": "Emne-minatyrbilder har blitt deaktivert", "invalid-file": "Ugyldig fil", "uploads-are-disabled": "Opplastninger er deaktivert", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Beklager, din signatur kan ikke være lengre enn %1 tegn", + "about-me-too-long": "Beklager, din om meg kan ikke være lengre enn %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": "Du har sendt for mange meldinger, vennligst vent en stund.", diff --git a/public/language/nb/groups.json b/public/language/nb/groups.json index 0668648206..e9ab0aed41 100644 --- a/public/language/nb/groups.json +++ b/public/language/nb/groups.json @@ -20,8 +20,8 @@ "details.kick": "Kast ut", "details.owner_options": "Gruppeadministrasjon", "details.group_name": "Gruppenavn", - "details.member_count": "Member Count", - "details.creation_date": "Creation Date", + "details.member_count": "Antall medlemmer", + "details.creation_date": "Opprettelsesdato", "details.description": "Beskrivelse", "details.badge_preview": "Forhåndsvisning av skilt", "details.change_icon": "Endre ikon", diff --git a/public/language/nb/notifications.json b/public/language/nb/notifications.json index 33ff86eff6..fdc6100309 100644 --- a/public/language/nb/notifications.json +++ b/public/language/nb/notifications.json @@ -2,7 +2,7 @@ "title": "Varsler", "no_notifs": "Du har ingen nye varsler", "see_all": "Se alle varsler", - "mark_all_read": "Mark all notifications read", + "mark_all_read": "Merk alle varsler som lest", "back_to_home": "Tilbake til %1", "outgoing_link": "Utgående link", "outgoing_link_message": "Du forlater nå %1.", diff --git a/public/language/nb/recent.json b/public/language/nb/recent.json index 3b980f6f02..bdee8a1f58 100644 --- a/public/language/nb/recent.json +++ b/public/language/nb/recent.json @@ -6,7 +6,7 @@ "year": "År", "alltime": "All tid", "no_recent_topics": "Det er ingen nye tråder.", - "no_popular_topics": "There are no popular topics.", + "no_popular_topics": "Det er ingen populære emner.", "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.", diff --git a/public/language/nb/reset_password.json b/public/language/nb/reset_password.json index f9cd7bdf72..bf51d99140 100644 --- a/public/language/nb/reset_password.json +++ b/public/language/nb/reset_password.json @@ -11,7 +11,7 @@ "enter_email_address": "Skriv e-post", "password_reset_sent": "Passord-tilbakestilling sendt", "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.", - "password_expired": "Your password has expired, please choose a new password" + "password_too_short": "Passordet du skrev inn er for kort, velg et lengre passord.", + "passwords_do_not_match": "Passordene du har skrevet inn stemmer ikke overens.", + "password_expired": "Passordet ditt er utgått, velg et nytt passord" } \ No newline at end of file diff --git a/public/language/nb/search.json b/public/language/nb/search.json index 51c3d113da..a62f2d9cb5 100644 --- a/public/language/nb/search.json +++ b/public/language/nb/search.json @@ -1,7 +1,7 @@ { "results_matching": "%1 resultat(er) samsvarer med \"%2\", (%3 sekunder)", "no-matches": "Ingen matcher funnet", - "advanced-search": "Advanced Search", + "advanced-search": "Avansert søk", "in": "I", "titles": "Titler", "titles-posts": "Titler og innlegg", @@ -30,11 +30,11 @@ "topic-start-date": "Starttid for emne", "username": "Brukernavn", "category": "Kategori", - "descending": "In descending order", - "ascending": "In ascending order", + "descending": "I synkende rekkefølge", + "ascending": "I stigende rekkefølge", "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" + "show-results-as": "Vis resultater som" } \ No newline at end of file diff --git a/public/language/nb/tags.json b/public/language/nb/tags.json index 5287b6125a..c9a6efbab7 100644 --- a/public/language/nb/tags.json +++ b/public/language/nb/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Det er ingen emnet med denne taggen.", "tags": "Tagger", - "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", + "enter_tags_here": "Skriv tagger her, mellom %1 og %2 tegn hver.", "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 3863fd48ae..49afb62941 100644 --- a/public/language/nb/topic.json +++ b/public/language/nb/topic.json @@ -5,7 +5,7 @@ "no_topics_found": "Ingen emner funnet!", "no_posts_found": "Ingen innlegg funnet!", "post_is_deleted": "Dette innlegget er slettet!", - "topic_is_deleted": "This topic is deleted!", + "topic_is_deleted": "Dette emnet er slettet!", "profile": "Profil", "posted_by": "Skapt av %1", "posted_by_guest": "Skapt av Gjest", @@ -13,7 +13,7 @@ "notify_me": "Bli varslet om nye svar i dette emnet", "quote": "Siter", "reply": "Svar", - "guest-login-reply": "Log in to reply", + "guest-login-reply": "Logg inn for å besvare", "edit": "Endre", "delete": "Slett", "purge": "Tøm", diff --git a/public/language/nb/user.json b/public/language/nb/user.json index be80c50470..e6cd7c41ed 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -21,14 +21,14 @@ "watched": "Overvåkede", "followers": "Følgere", "following": "Følger", - "aboutme": "About me", + "aboutme": "Om meg", "signature": "Signatur", "gravatar": "Gravatar", "birthday": "Bursdag", - "chat": "Chatt", + "chat": "Chat", "follow": "Følg", "unfollow": "Avfølg", - "more": "More", + "more": "Mer", "profile_update_success": "Profilen ble oppdatert!", "change_picture": "Bytt bilde", "edit": "Endre", @@ -60,8 +60,8 @@ "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", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", + "send_post_notifications": "Send en e-post når svar postes til emner jeg abonnerer på", + "settings-require-reload": "Noen innstillingsendringer krever at du laster siden på nytt. Klikk her for å laste på nytt.", "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.", @@ -69,16 +69,16 @@ "has_no_watched_topics": "Denne brukeren overvåker ingen innlegg foreløpig.", "email_hidden": "E-post skjult", "hidden": "skjult", - "paginate_description": "Paginate topics and posts instead of using infinite scroll", + "paginate_description": "Bruk sidevelger for emner og innlegg istedet for uendelig scrolling", "topics_per_page": "Tråd per side", "posts_per_page": "Innlegg per side", - "notification_sounds": "Play a sound when you receive a notification", + "notification_sounds": "Spill en lyd når du mottar et varsel", "browsing": "Surfeinnstillinger", - "open_links_in_new_tab": "Open outgoing links in new tab", + "open_links_in_new_tab": "Åpne utgående lenker i en ny fane", "enable_topic_searching": "Aktiver søk-i-emne", - "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", - "grouptitle": "Select the group title you would like to display", - "no-group-title": "No group title" + "topic_search_help": "Hvis søk-i-emne er aktivert, overstyres nettleserens standard sidesøk og gir mulighet til å søke gjennom hele emnet, ikke bare det som vises på skjermen", + "follow_topics_you_reply_to": "Følg emner du besvarer", + "follow_topics_you_create": "Følg emner du oppretter", + "grouptitle": "Velg gruppetittelen du vil vise", + "no-group-title": "Ingen gruppetittel" } \ No newline at end of file diff --git a/public/language/nb/users.json b/public/language/nb/users.json index 661479fbf1..5f19a09507 100644 --- a/public/language/nb/users.json +++ b/public/language/nb/users.json @@ -5,7 +5,7 @@ "search": "Søk", "enter_username": "Skriv ett brukernavn for å søke", "load_more": "Last flere", - "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", + "users-found-search-took": "%1 bruker(e) funnet. Søket tok %2 sekunder.", "filter-by": "Filtrer etter", "online-only": "Bare påloggede", "picture-only": "Bare bilde" diff --git a/public/language/nl/error.json b/public/language/nl/error.json index 95f7d04f1d..686603759f 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -2,7 +2,7 @@ "invalid-data": "Ongeldige Data", "not-logged-in": "De account lijkt op dit moment niet aangemeld te zijn.", "account-locked": "De account is tijdelijk vergrendeld", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "Zoeken vereist een account - gelieve aan te melden of te registreren.", "invalid-cid": "Ongeldig categoriesleutel", "invalid-tid": "Ongeldig id voor onderwerp", "invalid-pid": "Ongeldig berichtkenmerk", @@ -67,8 +67,8 @@ "topic-thumbnails-are-disabled": "Miniatuurweergaven bij onderwerpen uitgeschakeld. ", "invalid-file": "Ongeldig bestand", "uploads-are-disabled": "Uploads zijn uitgeschakeld", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Sorry, je onderschrift kan niet langer zijn da %1 karakter(s).", + "about-me-too-long": "Sorry, je over mij kan niet langer zijn da %1 karakter(s).", "cant-chat-with-yourself": "Het is niet mogelijk met jezelf een chatgesprek te houden.", "chat-restricted": "Deze gebruiker heeft beperkingen aan de chatfunctie opgelegd waardoor deze eerst iemand moet volgen voordat deze persoon een nieuwe chat mag initiëren.", "too-many-messages": "Er zijn in korte tijd teveel berichten verzonden, een moment geduld.", diff --git a/public/language/nl/topic.json b/public/language/nl/topic.json index 38593ecca8..ab67cf9cb5 100644 --- a/public/language/nl/topic.json +++ b/public/language/nl/topic.json @@ -5,7 +5,7 @@ "no_topics_found": "Geen onderwerpen gevonden!", "no_posts_found": "Geen berichten gevonden!", "post_is_deleted": "Dit bericht is verwijderd!", - "topic_is_deleted": "This topic is deleted!", + "topic_is_deleted": "Dit onderwerp is verwijderd!", "profile": "Profiel", "posted_by": "Geplaatst door %1", "posted_by_guest": "Geplaatst door gast", diff --git a/public/language/nl/user.json b/public/language/nl/user.json index 4822209b05..d461f1b8a6 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -21,7 +21,7 @@ "watched": "Bekeken", "followers": "Volgers", "following": "Volgend", - "aboutme": "About me", + "aboutme": "Over mij", "signature": "Handtekening", "gravatar": "Gravatar", "birthday": "Verjaardag", diff --git a/public/language/sv/unread.json b/public/language/sv/unread.json index 583d912781..d9b02eabd0 100644 --- a/public/language/sv/unread.json +++ b/public/language/sv/unread.json @@ -1,6 +1,6 @@ { "title": "Olästa", - "no_unread_topics": "Det finns inga ilästa ämnen.", + "no_unread_topics": "Det finns inga olästa ämnen.", "load_more": "Ladda fler", "mark_as_read": "Markerad som läst", "selected": "Vald", diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index c316ae6e19..7489f1ffd3 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -16,6 +16,7 @@ @import "./modules/alerts"; @import "./modules/selectable"; +@import "./modules/checkboxes"; .admin { padding-top: 70px; @@ -358,10 +359,4 @@ max-width: 24px; max-height: 24px; } -} - -.groups-list { - .description { - font-size: 1rem; - } -} +} \ No newline at end of file diff --git a/public/less/admin/manage/categories.less b/public/less/admin/manage/categories.less index acc730e081..5f8cc4fcd0 100644 --- a/public/less/admin/manage/categories.less +++ b/public/less/admin/manage/categories.less @@ -1,71 +1,78 @@ div.categories { + ul { + .no-select; + list-style-type: none; + margin: 0; + padding: 0; - ul { - .no-select; - list-style-type: none; - margin: 0; - padding: 0; + > li > ul > li { + margin-left: 4.5rem; + } - > li > ul > li { - margin-left: 4.5rem; - } - } + .row { + margin-left: -15px; + margin-right: -15px; + border-bottom: 1px dashed #ddd; + padding-bottom: 12px; + margin-bottom: 12px; + } + } - .stats { - display: inline-block; + .stats { + display: inline-block; - li { - min-height: 0; - display: inline; - margin: 0 @acp-margin 0 0; - left: 0; - } - } + li { + min-height: 0; + display: inline; + margin: 0 @acp-margin 0 0; + left: 0; + } + } - li { - min-height: @acp-line-height; - margin: @acp-base-line 0; + li { + min-height: @acp-line-height; + margin: @acp-base-line 0; - &.placeholder { - border: 1px dashed #2196F3; - background-color: #E1F5FE; - } - } + &.placeholder { + border: 1px dashed #2196F3; + background-color: #E1F5FE; + } + } - .disabled { + .disabled { - .icon, .header, .description { - opacity: 0.5; - } + .icon, .header, .description { + opacity: 0.5; + } - .stats { - opacity: 0.3; - } - } + .stats { + opacity: 0.3; + } + } - .icon { - width: @acp-line-height; - height: @acp-line-height; - border-radius: 50%; - line-height: @acp-line-height; - text-align: center; - vertical-align: bottom; - background-size: cover; - float: left; - margin-right: @acp-margin; - cursor: move; - } + .icon { + width: @acp-line-height; + height: @acp-line-height; + border-radius: 50%; + line-height: @acp-line-height; + text-align: center; + vertical-align: bottom; + background-size: cover; + float: left; + margin-right: @acp-margin; + cursor: move; + } - .information { - float: left; - } + .information { + float: left; + } - .header { - margin-top: 0; - margin-bottom: @acp-base-line; - } + .header { + margin-top: 0; + margin-bottom: @acp-base-line; + } - .description { - margin: 0; - } + .description { + margin: 0; + } } \ No newline at end of file diff --git a/public/less/admin/modules/checkboxes.less b/public/less/admin/modules/checkboxes.less new file mode 100644 index 0000000000..f05f1427ca --- /dev/null +++ b/public/less/admin/modules/checkboxes.less @@ -0,0 +1,22 @@ +[type=checkbox] { + display: none; +} + +label { + cursor: pointer; +} + +.checkbox label { + padding-left: 2px; +} + +.admin { + .fa-toggle-on, .fa-toggle-off { + font-size: 21px; + vertical-align: -3px; + } + + .fa-toggle-on { + color: @brand-success; + } +} \ No newline at end of file diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index fe411adeb3..c5cd21d748 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -1,5 +1,5 @@ "use strict"; -/*global define, socket, app, ajaxify, utils, Mousetrap, Hammer, RELATIVE_PATH*/ +/*global define, socket, app, ajaxify, utils, bootbox, Mousetrap, Hammer, RELATIVE_PATH*/ (function() { $(document).ready(function() { @@ -20,6 +20,7 @@ selectMenuItem(data.url); setupHeaderMenu(); setupRestartLinks(); + setupCheckboxes(); }); $('[component="logout"]').on('click', app.logout); @@ -75,15 +76,6 @@ socket.emit('admin.restart'); }); - Mousetrap.bind('ctrl+shift+a d', function() { - var tid = ajaxify.variables.get('topic_id'), - cid = ajaxify.variables.get('category_id'); - - if (tid && cid) { - socket.emit('topics.delete', { tids: [tid], cid: cid }); - } - }); - Mousetrap.bind('/', function(e) { $('#acp-search input').focus(); @@ -177,4 +169,26 @@ }); }); } + + function setupCheckboxes() { + $('[type=checkbox]').each(function() { + var checkbox = $(this), + checked = checkbox.is(':checked'); + + if (checked) { + checkbox.after(''); + } + else { + checkbox.after(''); + } + }); + + $('[type=checkbox]').change(function() { + var checked = $(this).is(':checked'); + + $(this).siblings('[class*=fa-]').toggleClass('fa-toggle-off', !checked) + .toggleClass('fa-toggle-on', checked); + }); + } + }()); \ No newline at end of file diff --git a/public/src/admin/extend/plugins.js b/public/src/admin/extend/plugins.js index 4987d87552..c12e9f02d7 100644 --- a/public/src/admin/extend/plugins.js +++ b/public/src/admin/extend/plugins.js @@ -181,28 +181,32 @@ define('admin/extend/plugins', function() { socket.emit('admin.plugins.toggleInstall', { id: pluginID, version: version - }, function(err, status) { + }, function(err, pluginData) { if (err) { return app.alertError(err.message); } - if (status.installed) { - btn.html(' Uninstall'); - } else { - btn.html(' Install'); - } + var targetList = (pluginData.installed ? 'installed' : 'download'), + otherList = (pluginData.installed ? 'download' : 'installed'), + payload = {}; - activateBtn.toggleClass('hidden', !status.installed); + payload[targetList] = pluginData; + templates.parse('admin/partials/' + targetList + '_plugin_item', payload, function(html) { + var pluginList = $('ul.' + targetList); - btn.toggleClass('btn-danger', status.installed) - .toggleClass('btn-success', !status.installed) - .attr('disabled', false) - .attr('data-installed', status.installed ? 1 : 0); + pluginList.append(html); + $('ul.' + otherList).find('li[data-plugin-id="' + pluginID + '"]').slideUp('slow', function() { + $(this).remove(); + $('html,body').animate({ + scrollTop: pluginList.find('li').last().offset().top - 48 + }, 1000); + }); + }); app.alert({ alert_id: 'plugin_toggled', - title: 'Plugin ' + (status.installed ? 'Installed' : 'Uninstalled'), - message: status.installed ? 'Plugin successfully installed, please activate the plugin.' : 'The plugin has been successfully deactivated and uninstalled.', + title: 'Plugin ' + (pluginData.installed ? 'Installed' : 'Uninstalled'), + message: pluginData.installed ? 'Plugin successfully installed, please activate the plugin.' : 'The plugin has been successfully deactivated and uninstalled.', type: 'info', timeout: 5000 }); diff --git a/public/src/admin/extend/rewards.js b/public/src/admin/extend/rewards.js index 967e098bf7..d93741d76b 100644 --- a/public/src/admin/extend/rewards.js +++ b/public/src/admin/extend/rewards.js @@ -11,10 +11,10 @@ define('admin/extend/rewards', function() { 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')); + available = ajaxify.data.rewards; + active = ajaxify.data.active; + conditions = ajaxify.data.conditions; + conditionals = ajaxify.data.conditionals; $('[data-selected]').each(function() { select($(this)); @@ -96,7 +96,7 @@ define('admin/extend/rewards', function() { inputs.forEach(function(input) { html += '