Merge remote-tracking branch 'origin/master' into develop

v1.18.x
Julian Lam 7 years ago
commit ec07247854

@ -19,23 +19,23 @@
"dependencies": { "dependencies": {
"ace-builds": "^1.2.9", "ace-builds": "^1.2.9",
"async": "2.6.0", "async": "2.6.0",
"autoprefixer": "7.1.6", "autoprefixer": "7.2.4",
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
"benchpressjs": "^1.2.0", "benchpressjs": "^1.2.0",
"body-parser": "^1.18.2", "body-parser": "^1.18.2",
"bootstrap": "^3.3.7", "bootstrap": "^3.3.7",
"chart.js": "^2.7.0", "chart.js": "^2.7.1",
"colors": "^1.1.2", "colors": "^1.1.2",
"compression": "^1.7.1", "compression": "^1.7.1",
"commander": "^2.11.0", "commander": "^2.12.2",
"connect-ensure-login": "^0.1.1", "connect-ensure-login": "^0.1.1",
"connect-flash": "^0.1.1", "connect-flash": "^0.1.1",
"connect-mongo": "2.0.0", "connect-mongo": "2.0.1",
"connect-multiparty": "^2.1.0", "connect-multiparty": "^2.1.0",
"connect-redis": "3.3.2", "connect-redis": "3.3.3",
"cookie-parser": "^1.4.3", "cookie-parser": "^1.4.3",
"cron": "^1.3.0", "cron": "^1.3.0",
"cropperjs": "^1.1.3", "cropperjs": "^1.2.2",
"csurf": "^1.9.0", "csurf": "^1.9.0",
"daemon": "^1.1.0", "daemon": "^1.1.0",
"express": "^4.16.2", "express": "^4.16.2",
@ -48,12 +48,12 @@
"jquery": "^3.2.1", "jquery": "^3.2.1",
"jsesc": "2.5.1", "jsesc": "2.5.1",
"json-2-csv": "^2.1.2", "json-2-csv": "^2.1.2",
"less": "^2.7.2", "less": "^2.7.3",
"lodash": "^4.17.4", "lodash": "^4.17.4",
"logrotate-stream": "^0.2.5", "logrotate-stream": "^0.2.5",
"lru-cache": "4.1.1", "lru-cache": "4.1.1",
"material-design-lite": "^1.3.0", "material-design-lite": "^1.3.0",
"mime": "^2.0.3", "mime": "^2.2.0",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"mongodb": "2.2.33", "mongodb": "2.2.33",
"morgan": "^1.9.0", "morgan": "^1.9.0",
@ -69,22 +69,22 @@
"nodebb-plugin-spam-be-gone": "0.5.1", "nodebb-plugin-spam-be-gone": "0.5.1",
"nodebb-rewards-essentials": "0.0.9", "nodebb-rewards-essentials": "0.0.9",
"nodebb-theme-lavender": "5.0.0", "nodebb-theme-lavender": "5.0.0",
"nodebb-theme-persona": "7.2.9", "nodebb-theme-persona": "7.2.10",
"nodebb-theme-slick": "1.1.2", "nodebb-theme-slick": "1.1.2",
"nodebb-theme-vanilla": "8.1.4", "nodebb-theme-vanilla": "8.1.4",
"nodebb-widget-essentials": "4.0.1", "nodebb-widget-essentials": "4.0.1",
"nodemailer": "4.4.0", "nodemailer": "4.4.1",
"passport": "^0.4.0", "passport": "^0.4.0",
"passport-local": "1.0.0", "passport-local": "1.0.0",
"postcss": "6.0.14", "postcss": "6.0.15",
"postcss-clean": "1.1.0", "postcss-clean": "1.1.0",
"promise-polyfill": "^6.0.2", "promise-polyfill": "^7.0.0",
"prompt": "^1.0.0", "prompt": "^1.0.0",
"redis": "2.8.0", "redis": "2.8.0",
"request": "2.83.0", "request": "2.83.0",
"rimraf": "2.6.2", "rimraf": "2.6.2",
"rss": "^1.2.2", "rss": "^1.2.2",
"sanitize-html": "^1.14.1", "sanitize-html": "^1.16.3",
"semver": "^5.4.1", "semver": "^5.4.1",
"serve-favicon": "^2.4.5", "serve-favicon": "^2.4.5",
"sitemap": "^1.13.0", "sitemap": "^1.13.0",
@ -94,8 +94,8 @@
"socketio-wildcard": "2.0.0", "socketio-wildcard": "2.0.0",
"spdx-license-list": "^3.0.1", "spdx-license-list": "^3.0.1",
"toobusy-js": "^0.5.1", "toobusy-js": "^0.5.1",
"uglify-js": "^3.1.5", "uglify-js": "^3.3.4",
"validator": "9.1.2", "validator": "9.2.0",
"winston": "^2.4.0", "winston": "^2.4.0",
"xml": "^1.0.1", "xml": "^1.0.1",
"xregexp": "3.2.0", "xregexp": "3.2.0",
@ -103,16 +103,16 @@
}, },
"devDependencies": { "devDependencies": {
"coveralls": "^3.0.0", "coveralls": "^3.0.0",
"eslint": "^4.9.0", "eslint": "^4.14.0",
"eslint-config-airbnb-base": "^12.1.0", "eslint-config-airbnb-base": "^12.1.0",
"eslint-plugin-import": "^2.8.0", "eslint-plugin-import": "^2.8.0",
"grunt": "^1.0.1", "grunt": "^1.0.1",
"grunt-contrib-watch": "^1.0.0", "grunt-contrib-watch": "^1.0.0",
"jsdom": "^11.3.0", "jsdom": "^11.5.1",
"mocha": "^4.0.1", "mocha": "^4.1.0",
"mocha-lcov-reporter": "^1.3.0", "mocha-lcov-reporter": "^1.3.0",
"nyc": "^11.2.1", "nyc": "^11.4.1",
"smtp-server": "^3.3.0" "smtp-server": "^3.4.1"
}, },
"bugs": { "bugs": {
"url": "https://github.com/NodeBB/NodeBB/issues" "url": "https://github.com/NodeBB/NodeBB/issues"

@ -1,5 +1,5 @@
{ {
"notifications": "Notifications", "notifications": "التنبيهات",
"chat-messages": "Chat Messages", "chat-messages": "Chat Messages",
"play-sound": "Play", "play-sound": "Play",
"incoming-message": "Incoming Message", "incoming-message": "Incoming Message",

@ -1,6 +1,6 @@
{ {
"settings": "Category Settings", "settings": "اعدادات القسم",
"privileges": "Privileges", "privileges": "الصلاحيات",
"name": "Category Name", "name": "Category Name",
"description": "Category Description", "description": "Category Description",

@ -1,5 +1,5 @@
{ {
"name": "Group Name", "name": "اسم المجموعة",
"description": "Group Description", "description": "Group Description",
"member-count": "Member Count", "member-count": "Member Count",
"system": "System Group", "system": "System Group",

@ -1,6 +1,6 @@
{ {
"users": "Users", "users": "المستخدمين",
"edit": "Edit", "edit": "تحرير",
"make-admin": "Make Admin", "make-admin": "Make Admin",
"remove-admin": "Remove Admin", "remove-admin": "Remove Admin",
"validate-email": "Validate Email", "validate-email": "Validate Email",

@ -1,6 +1,6 @@
{ {
"eu-consent": "EU Consent", "eu-consent": "EU Consent",
"consent.enabled": "Enabled", "consent.enabled": "تفعيل",
"consent.message": "Notification message", "consent.message": "Notification message",
"consent.acceptance": "Acceptance message", "consent.acceptance": "Acceptance message",
"consent.link-text": "Policy Link Text", "consent.link-text": "Policy Link Text",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "أدوات الموضوع", "thread_tools.title": "أدوات الموضوع",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "علق الموضوع", "thread_tools.pin": "علق الموضوع",
"thread_tools.unpin": "إلغاء تعليق الموضوع", "thread_tools.unpin": "إلغاء تعليق الموضوع",
"thread_tools.lock": "أقفل الموضوع", "thread_tools.lock": "أقفل الموضوع",

@ -112,7 +112,7 @@
"topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.", "topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.",
"delay_image_loading": "تأخير عرض الصور", "delay_image_loading": "تأخير عرض الصور",
"image_load_delay_help": "إذا تم تمكينه، فلن يتم تحميل الصور في المواضيع حتى يتم تمريرها في الشاشة", "image_load_delay_help": "إذا تم تمكينه، فلن يتم تحميل الصور في المواضيع حتى يتم تمريرها في الشاشة",
"scroll_to_my_post": "After posting a reply, show the new post", "scroll_to_my_post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة",
"follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها", "follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها",
"follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها", "follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها",
"grouptitle": "عنوان المجموعة", "grouptitle": "عنوان المجموعة",

@ -52,7 +52,7 @@
"not-watching.description": "Не искам да получавам известия за новите отговори.<br/>Темата да се показва в списъка с непрочетени, само ако категорията не се пренебрегва.", "not-watching.description": "Не искам да получавам известия за новите отговори.<br/>Темата да се показва в списъка с непрочетени, само ако категорията не се пренебрегва.",
"ignoring.description": "Не искам да получавам известия за новите отговори.<br/>Не искам темата да се показва в списъка с непрочетени.", "ignoring.description": "Не искам да получавам известия за новите отговори.<br/>Не искам темата да се показва в списъка с непрочетени.",
"thread_tools.title": "Инструменти за темата", "thread_tools.title": "Инструменти за темата",
"thread_tools.markAsUnreadForAll": "Отбелязване като непрочетена за всички", "thread_tools.markAsUnreadForAll": "Отбелязване на всички като непрочетени",
"thread_tools.pin": "Закачане на темата", "thread_tools.pin": "Закачане на темата",
"thread_tools.unpin": "Откачане на темата", "thread_tools.unpin": "Откачане на темата",
"thread_tools.lock": "Заключване на темата", "thread_tools.lock": "Заключване на темата",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "টপিক সম্পর্কিত টুলস", "thread_tools.title": "টপিক সম্পর্কিত টুলস",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "টপিক পিন করুন", "thread_tools.pin": "টপিক পিন করুন",
"thread_tools.unpin": "টপিক আনপিন করুন", "thread_tools.unpin": "টপিক আনপিন করুন",
"thread_tools.lock": "টপিক বন্ধ করুন", "thread_tools.lock": "টপিক বন্ধ করুন",

@ -52,7 +52,7 @@
"not-watching.description": "Neupozorňovat na nové odpovědi. <br/>Zobrazit téma v nepřečtených, není-li tato kategorie ignorována", "not-watching.description": "Neupozorňovat na nové odpovědi. <br/>Zobrazit téma v nepřečtených, není-li tato kategorie ignorována",
"ignoring.description": "Neupozorňovat na nové odpovědi.<br/>Nezobrazovat téma v nepřečtených.", "ignoring.description": "Neupozorňovat na nové odpovědi.<br/>Nezobrazovat téma v nepřečtených.",
"thread_tools.title": "Nástroje tématu", "thread_tools.title": "Nástroje tématu",
"thread_tools.markAsUnreadForAll": "Označit jako nepřečtené pro všechny", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Připnout téma", "thread_tools.pin": "Připnout téma",
"thread_tools.unpin": "Odepnout téma", "thread_tools.unpin": "Odepnout téma",
"thread_tools.lock": "Zamknout téma", "thread_tools.lock": "Zamknout téma",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Emne værktøjer", "thread_tools.title": "Emne værktøjer",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Fastgør tråd", "thread_tools.pin": "Fastgør tråd",
"thread_tools.unpin": "Frigør tråd", "thread_tools.unpin": "Frigør tråd",
"thread_tools.lock": "Lås tråd", "thread_tools.lock": "Lås tråd",

@ -52,7 +52,7 @@
"not-watching.description": "Keine Benachrichtigung bei neuen Beiträgen.<br/>Ungelesen Beiträge anzeigen wenn die Kategorie nicht ignoriert wird.", "not-watching.description": "Keine Benachrichtigung bei neuen Beiträgen.<br/>Ungelesen Beiträge anzeigen wenn die Kategorie nicht ignoriert wird.",
"ignoring.description": "Keine Benachrichtigung bei neuen Beiträgen.<br/>Ungelesene Beiträge nicht anzeigen.", "ignoring.description": "Keine Benachrichtigung bei neuen Beiträgen.<br/>Ungelesene Beiträge nicht anzeigen.",
"thread_tools.title": "Themen-Werkzeuge", "thread_tools.title": "Themen-Werkzeuge",
"thread_tools.markAsUnreadForAll": "Für alle als ungelesen markiert.", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Thema anheften", "thread_tools.pin": "Thema anheften",
"thread_tools.unpin": "Thema nicht mehr anheften", "thread_tools.unpin": "Thema nicht mehr anheften",
"thread_tools.lock": "Thema schließen", "thread_tools.lock": "Thema schließen",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Εργαλεία Θέματος", "thread_tools.title": "Εργαλεία Θέματος",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Καρφίτσωμα Θέματος", "thread_tools.pin": "Καρφίτσωμα Θέματος",
"thread_tools.unpin": "Ξεκαρφίτσωμα Θέματος", "thread_tools.unpin": "Ξεκαρφίτσωμα Θέματος",
"thread_tools.lock": "Κλείδωμα Θέματος", "thread_tools.lock": "Κλείδωμα Θέματος",

@ -63,7 +63,7 @@
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Topic Tools", "thread_tools.title": "Topic Tools",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Pin Topic", "thread_tools.pin": "Pin Topic",
"thread_tools.unpin": "Unpin Topic", "thread_tools.unpin": "Unpin Topic",
"thread_tools.lock": "Lock Topic", "thread_tools.lock": "Lock Topic",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Topic Tools", "thread_tools.title": "Topic Tools",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Pin Topic", "thread_tools.pin": "Pin Topic",
"thread_tools.unpin": "Unpin Topic", "thread_tools.unpin": "Unpin Topic",
"thread_tools.lock": "Lock Topic", "thread_tools.lock": "Lock Topic",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Topic Tools", "thread_tools.title": "Topic Tools",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Pin Topic", "thread_tools.pin": "Pin Topic",
"thread_tools.unpin": "Unpin Topic", "thread_tools.unpin": "Unpin Topic",
"thread_tools.lock": "Lock Topic", "thread_tools.lock": "Lock Topic",

@ -52,7 +52,7 @@
"not-watching.description": "No notificarme de nuevas respuestas.<br/>Mostrar tema en no leídos si sigo esa categoría. ", "not-watching.description": "No notificarme de nuevas respuestas.<br/>Mostrar tema en no leídos si sigo esa categoría. ",
"ignoring.description": "No notificarme de nuevas respuestas.<br/>No mostrar tema en no leídos. ", "ignoring.description": "No notificarme de nuevas respuestas.<br/>No mostrar tema en no leídos. ",
"thread_tools.title": "Herramientas", "thread_tools.title": "Herramientas",
"thread_tools.markAsUnreadForAll": "Marcar todo como no leído.", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Adherir tema", "thread_tools.pin": "Adherir tema",
"thread_tools.unpin": "Despegar tema", "thread_tools.unpin": "Despegar tema",
"thread_tools.lock": "Cerrar tema", "thread_tools.lock": "Cerrar tema",

@ -52,7 +52,7 @@
"not-watching.description": "Ära teavita mind uutest vastustest.<br/>Näita teemat lugemata teemade hulgas, kui kategooria on ignoreeritud.", "not-watching.description": "Ära teavita mind uutest vastustest.<br/>Näita teemat lugemata teemade hulgas, kui kategooria on ignoreeritud.",
"ignoring.description": "Ära teavita mind uutest vastustest.<br/>Ära näita teemat lugemata teemade hulgas.", "ignoring.description": "Ära teavita mind uutest vastustest.<br/>Ära näita teemat lugemata teemade hulgas.",
"thread_tools.title": "Teema tööriistad", "thread_tools.title": "Teema tööriistad",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Tõsta esile teema", "thread_tools.pin": "Tõsta esile teema",
"thread_tools.unpin": "Märgista teema", "thread_tools.unpin": "Märgista teema",
"thread_tools.lock": "Lukusta teema", "thread_tools.lock": "Lukusta teema",

@ -52,7 +52,7 @@
"not-watching.description": "به من پس از ارسال هر پاسخی جدیدی اطلاع نده.<br/>تاپیک به صورت خوانده نشده قرار بگیرد ولی نادیده گرفته نشود.", "not-watching.description": "به من پس از ارسال هر پاسخی جدیدی اطلاع نده.<br/>تاپیک به صورت خوانده نشده قرار بگیرد ولی نادیده گرفته نشود.",
"ignoring.description": "به من پس از ارسال هر پاسخی جدیدی اطلاع نده.<br/>دیگر تاپیک را به صورت خوانده نشده نشان نده.", "ignoring.description": "به من پس از ارسال هر پاسخی جدیدی اطلاع نده.<br/>دیگر تاپیک را به صورت خوانده نشده نشان نده.",
"thread_tools.title": "ابزارهای موضوع", "thread_tools.title": "ابزارهای موضوع",
"thread_tools.markAsUnreadForAll": "علامت بزن به عنوان خوانده نشده برای همه", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "سنجاق زدن موضوع", "thread_tools.pin": "سنجاق زدن موضوع",
"thread_tools.unpin": "برداشتن سنجاق موضوع", "thread_tools.unpin": "برداشتن سنجاق موضوع",
"thread_tools.lock": "قفل کردن موضوع", "thread_tools.lock": "قفل کردن موضوع",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Aiheen työkalut", "thread_tools.title": "Aiheen työkalut",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Kiinnitä aihe", "thread_tools.pin": "Kiinnitä aihe",
"thread_tools.unpin": "Poista aiheen kiinnitys", "thread_tools.unpin": "Poista aiheen kiinnitys",
"thread_tools.lock": "Lukitse aihe", "thread_tools.lock": "Lukitse aihe",

@ -8,7 +8,7 @@
"custom-js.enable": "Activer le Javascript personnalisé", "custom-js.enable": "Activer le Javascript personnalisé",
"custom-header": "En-tête personnalisé", "custom-header": "En-tête personnalisé",
"custom-header.description": "Enter custom HTML here (ex. Meta Tags, etc.), which will be appended to the <code>&lt;head&gt;</code> section of your forum's markup. Script tags are allowed, but are discouraged, as the <a href=\"#custom-header\" data-toggle=\"tab\">Custom Javascript</a> tab is available.", "custom-header.description": "Entrez un code html personnalisé ici ( par exemple : Méta-Tags,...), qui sera rajouté à la section <code>&lt;head&gt;</code> du balisage de votre forum. Les balises de textes sont autorisés, mais sont déconseillés, l'onglet <a href=\"#custom-header\" data-toggle=\"tab\">Javascript personnalisé</a> étant prévu à cet effet.",
"custom-header.enable": "Activer les en-têtes personnalisés", "custom-header.enable": "Activer les en-têtes personnalisés",
"custom-css.livereload": "Activer le rechargement en direct", "custom-css.livereload": "Activer le rechargement en direct",

@ -39,7 +39,7 @@
"section-appearance": "Apparence", "section-appearance": "Apparence",
"appearance/themes": "Thèmes", "appearance/themes": "Thèmes",
"appearance/skins": "Skins", "appearance/skins": "Skins",
"appearance/customise": "Custom Content (HTML/JS/CSS)", "appearance/customise": "Contenu personnalisé (HTML/JS/CSS)",
"section-extend": "Extensions", "section-extend": "Extensions",
"extend/plugins": "Plugins", "extend/plugins": "Plugins",

@ -2,5 +2,5 @@
"notifications": "Notifications", "notifications": "Notifications",
"welcome-notification": "Notification de bienvenue", "welcome-notification": "Notification de bienvenue",
"welcome-notification-link": "Lien de notification de bienvenue", "welcome-notification-link": "Lien de notification de bienvenue",
"welcome-notification-uid": "Welcome Notification User (UID)" "welcome-notification-uid": "Notification de bienvenue de l'utilisateur (UID)"
} }

@ -4,7 +4,7 @@
"sorting.oldest-to-newest": "Du plus ancien au plus récent", "sorting.oldest-to-newest": "Du plus ancien au plus récent",
"sorting.newest-to-oldest": "Du plus récent au plus ancien", "sorting.newest-to-oldest": "Du plus récent au plus ancien",
"sorting.most-votes": "Avec le plus de votes", "sorting.most-votes": "Avec le plus de votes",
"sorting.most-posts": "Most Posts", "sorting.most-posts": "Avec le plus de messages",
"sorting.topic-default": "Tri des sujets par défaut", "sorting.topic-default": "Tri des sujets par défaut",
"restrictions": "Restrictions d'envoi", "restrictions": "Restrictions d'envoi",
"restrictions.post-queue": "Activer la file d'attente des messages", "restrictions.post-queue": "Activer la file d'attente des messages",

@ -19,8 +19,8 @@
"themes": "Thèmes", "themes": "Thèmes",
"disable-user-skins": "Empêcher les utilisateurs de choisir un skin personnalisé", "disable-user-skins": "Empêcher les utilisateurs de choisir un skin personnalisé",
"account-protection": "Protection du compte", "account-protection": "Protection du compte",
"admin-relogin-duration": "Admin relogin duration (minutes)", "admin-relogin-duration": "Temps de reconnexion pour le compte administrateur (en minutes)",
"admin-relogin-duration-help": "After a set amount of time accessing the admin section will require re-login, set to 0 to disable", "admin-relogin-duration-help": "Après un certain temps, l'accessibilité à la section d'administration nécessitera une reconnexion ; fixer le nombre à 0 pour désactiver cet effet.",
"login-attempts": "Tentatives de connexions par heure", "login-attempts": "Tentatives de connexions par heure",
"login-attempts-help": "Si le nombre de tentatives de connexion à un compte dépasse ce seuil, le compte sera bloqué pour une durée pré-configurée", "login-attempts-help": "Si le nombre de tentatives de connexion à un compte dépasse ce seuil, le compte sera bloqué pour une durée pré-configurée",
"lockout-duration": "Durée du blocage (minutes)", "lockout-duration": "Durée du blocage (minutes)",

@ -30,7 +30,7 @@
"notif.chat.unsub.info": "Cette notification de chat a été envoyé en raison de vos paramètres d'abonnement.", "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.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.", "notif.post.unsub.info": "La notification de ce message vous a été envoyé en raison de vos paramètres d'abonnement.",
"notif.cta": "Click here to go to forum", "notif.cta": "Cliquez ici pour accéder au forum",
"test.text1": "Ceci est un e-mail de test pour vérifier que l'e-mailer est correctement configuré pour NodeBB.", "test.text1": "Ceci est un e-mail de test pour vérifier que l'e-mailer est correctement configuré pour NodeBB.",
"unsub.cta": "Cliquez ici pour modifier ces paramètres", "unsub.cta": "Cliquez ici pour modifier ces paramètres",
"banned.subject": "Vous avez été banni de %1", "banned.subject": "Vous avez été banni de %1",

@ -125,7 +125,7 @@
"parse-error": "Une erreur est survenue en analysant la réponse du serveur", "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-email": "Veuillez utiliser votre adresse email pour vous connecter",
"wrong-login-type-username": "Veuillez utiliser votre identifiant pour vous connecter", "wrong-login-type-username": "Veuillez utiliser votre identifiant pour vous connecter",
"sso-registration-disabled": "Registration has been disabled for %1 accounts, please register with an email address first", "sso-registration-disabled": "L'enregistrement a été désactivé pour les comptes %1, s'il vous plaît, enregistrez vous avec un adresse mail en premier",
"invite-maximum-met": "Vous avez invité la quantité maximale de personnes (%1 de %2).", "invite-maximum-met": "Vous avez invité la quantité maximale de personnes (%1 de %2).",
"no-session-found": "Pas de session de connexion trouvé!", "no-session-found": "Pas de session de connexion trouvé!",
"not-in-room": "L'utilisateur n'est pas dans cette salle", "not-in-room": "L'utilisateur n'est pas dans cette salle",
@ -135,5 +135,5 @@
"invalid-home-page-route": "Route de page d'accueil invalide", "invalid-home-page-route": "Route de page d'accueil invalide",
"invalid-session": "Session Interrompue", "invalid-session": "Session Interrompue",
"invalid-session-text": "Il semble que votre session ne soit plus active, ou que le serveur ne la reconnaisse plus. Merci de rafraichir cette page.", "invalid-session-text": "Il semble que votre session ne soit plus active, ou que le serveur ne la reconnaisse plus. Merci de rafraichir cette page.",
"no-topics-selected": "No topics selected!" "no-topics-selected": "Aucun sujet sélectionné !"
} }

@ -9,7 +9,7 @@
"continue_to": "Continuer vers %1", "continue_to": "Continuer vers %1",
"return_to": "Revenir à %1", "return_to": "Revenir à %1",
"new_notification": "Nouvelle notification", "new_notification": "Nouvelle notification",
"new_notification_from": "You have a new Notification from %1", "new_notification_from": "Vous avez une nouvelle notification de %1",
"you_have_unread_notifications": "Vous avez des notifications non-lues", "you_have_unread_notifications": "Vous avez des notifications non-lues",
"all": "Tout", "all": "Tout",
"topics": "Sujets", "topics": "Sujets",
@ -47,18 +47,18 @@
"email-confirmed-message": "Merci pour la validation de votre adresse email. Votre compte est désormais activé.", "email-confirmed-message": "Merci pour la validation de votre adresse email. Votre compte est désormais activé.",
"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-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é.", "email-confirm-sent": "Email de vérification envoyé.",
"none": "None", "none": "aucun",
"notification_only": "Notification Only", "notification_only": "Seulement une notification",
"email_only": "Email Only", "email_only": "Seulement un email",
"notification_and_email": "Notification & Email", "notification_and_email": "Notification et email",
"notificationType_upvote": "When someone upvotes your post", "notificationType_upvote": "Lorsque quelqu'un a voté pour un de vos messages",
"notificationType_new-topic": "When someone you follow posts a topic", "notificationType_new-topic": "Lorsque quelqu'un que vous suivez publie un sujet",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching", "notificationType_new-reply": "Lorsqu'une nouvelle réponse est ajoutée dans un sujet que vous suivez",
"notificationType_follow": "When someone starts following you", "notificationType_follow": "Lorsque quelqu'un commence à vous suivre",
"notificationType_new-chat": "When you receive a chat message", "notificationType_new-chat": "Lorsque vous recevez un message du chat ",
"notificationType_group-invite": "When you receive a group invite", "notificationType_group-invite": "Lorsque vous recevez une invitation d'un groupe",
"notificationType_new-register": "When someone gets added to registration queue", "notificationType_new-register": "Lorsque quelqu'un est ajouté à la file d'attente d'inscription",
"notificationType_post-queue": "When a new post is queued", "notificationType_post-queue": "Lorsque un nouveau message est mis en file d'attente",
"notificationType_new-post-flag": "When a post is flagged", "notificationType_new-post-flag": "Lorsque un message est marqué",
"notificationType_new-user-flag": "When a user is flagged" "notificationType_new-user-flag": "Lorsque un utilisateur est marqué"
} }

@ -52,7 +52,7 @@
"not-watching.description": "Ne pas me notifier les nouvelles réponses.<br/>Afficher le sujet dans l'onglet \"Non lu\" si la catégorie n'est pas ignorée.", "not-watching.description": "Ne pas me notifier les nouvelles réponses.<br/>Afficher le sujet dans l'onglet \"Non lu\" si la catégorie n'est pas ignorée.",
"ignoring.description": "Ne pas me notifier les nouvelle réponses.<br/>Ne pas afficher ce sujet dans l'onglet \"Non lu\".", "ignoring.description": "Ne pas me notifier les nouvelle réponses.<br/>Ne pas afficher ce sujet dans l'onglet \"Non lu\".",
"thread_tools.title": "Outils pour sujets", "thread_tools.title": "Outils pour sujets",
"thread_tools.markAsUnreadForAll": "Marquer tous comme non-lus", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Épingler le sujet", "thread_tools.pin": "Épingler le sujet",
"thread_tools.unpin": "Désépingler le sujet", "thread_tools.unpin": "Désépingler le sujet",
"thread_tools.lock": "Verrouiller le sujet", "thread_tools.lock": "Verrouiller le sujet",
@ -68,8 +68,8 @@
"thread_tools.restore_confirm": "Êtes-vous sûr de bien vouloir restaurer ce sujet ?", "thread_tools.restore_confirm": "Êtes-vous sûr de bien vouloir restaurer ce sujet ?",
"thread_tools.purge": "Supprimer définitivement le(s) sujet(s)", "thread_tools.purge": "Supprimer définitivement le(s) sujet(s)",
"thread_tools.purge_confirm": "Êtes-vous sûr de bien vouloir supprimer définitivement ce sujet ?", "thread_tools.purge_confirm": "Êtes-vous sûr de bien vouloir supprimer définitivement ce sujet ?",
"thread_tools.merge_topics": "Merge Topics", "thread_tools.merge_topics": "Fusionner les Sujets",
"thread_tools.merge": "Merge", "thread_tools.merge": "Fusionner",
"topic_move_success": "Ce sujet a bien été déplacé vers %1.", "topic_move_success": "Ce sujet a bien été déplacé vers %1.",
"post_delete_confirm": "Êtes-vous sûr de bien vouloir supprimer ce message ?", "post_delete_confirm": "Êtes-vous sûr de bien vouloir supprimer ce message ?",
"post_restore_confirm": "Êtes-vous sûr de bien vouloir restaurer ce message ?", "post_restore_confirm": "Êtes-vous sûr de bien vouloir restaurer ce message ?",
@ -91,7 +91,7 @@
"fork_pid_count": "%1 message(s) sélectionné(s)", "fork_pid_count": "%1 message(s) sélectionné(s)",
"fork_success": "Sujet copié avec succès ! Cliquez ici pour aller au sujet copié.", "fork_success": "Sujet copié avec succès ! Cliquez ici pour aller au sujet copié.",
"delete_posts_instruction": "Sélectionnez les messages que vous souhaitez supprimer/vider", "delete_posts_instruction": "Sélectionnez les messages que vous souhaitez supprimer/vider",
"merge_topics_instruction": "Click the topics you want to merge", "merge_topics_instruction": "Cliquez sur les sujets que vous voulez fusionner",
"composer.title_placeholder": "Entrer le titre du sujet ici…", "composer.title_placeholder": "Entrer le titre du sujet ici…",
"composer.handle_placeholder": "Nom", "composer.handle_placeholder": "Nom",
"composer.discard": "Abandonner", "composer.discard": "Abandonner",

@ -52,7 +52,7 @@
"not-watching.description": "Non me notifiquedes as novas respostas. <br/>Amosa-lo fío en non lidos se a categoría non está ignorada.", "not-watching.description": "Non me notifiquedes as novas respostas. <br/>Amosa-lo fío en non lidos se a categoría non está ignorada.",
"ignoring.description": "Non me notifiquedes as novas respostas. <br/>Non amosa-lo fío en non lidos.", "ignoring.description": "Non me notifiquedes as novas respostas. <br/>Non amosa-lo fío en non lidos.",
"thread_tools.title": "Ferramentas do tema", "thread_tools.title": "Ferramentas do tema",
"thread_tools.markAsUnreadForAll": "Marcar todo como non lido", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Fixar Tema", "thread_tools.pin": "Fixar Tema",
"thread_tools.unpin": "Despegar Tema", "thread_tools.unpin": "Despegar Tema",
"thread_tools.lock": "Pechar Tema", "thread_tools.lock": "Pechar Tema",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "כלי נושא", "thread_tools.title": "כלי נושא",
"thread_tools.markAsUnreadForAll": "סמן הכל כלא נקרא", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "נעץ נושא", "thread_tools.pin": "נעץ נושא",
"thread_tools.unpin": "הסר נעץ", "thread_tools.unpin": "הסר נעץ",
"thread_tools.lock": "נעל נושא", "thread_tools.lock": "נעל נושא",

@ -52,7 +52,7 @@
"not-watching.description": "Ne obaviještavaj me o novim odgovorima.<br/>Prikaži temu u nepročitanim ako kategorija nije ignorirana.", "not-watching.description": "Ne obaviještavaj me o novim odgovorima.<br/>Prikaži temu u nepročitanim ako kategorija nije ignorirana.",
"ignoring.description": "Nemoj slati obavijesti o novim odgovorima.<br/>Ne prikazuj temu u nepročitanom.", "ignoring.description": "Nemoj slati obavijesti o novim odgovorima.<br/>Ne prikazuj temu u nepročitanom.",
"thread_tools.title": "Alati teme", "thread_tools.title": "Alati teme",
"thread_tools.markAsUnreadForAll": "Označi kao nepročitano za sve", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Zakači temu", "thread_tools.pin": "Zakači temu",
"thread_tools.unpin": "Otkači temu", "thread_tools.unpin": "Otkači temu",
"thread_tools.lock": "Zaključaj temu", "thread_tools.lock": "Zaključaj temu",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Topic Tools", "thread_tools.title": "Topic Tools",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Kiemel", "thread_tools.pin": "Kiemel",
"thread_tools.unpin": "Kiemelés megszűntetése", "thread_tools.unpin": "Kiemelés megszűntetése",
"thread_tools.lock": "Topik lezárása", "thread_tools.lock": "Topik lezárása",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Perangkat Topik", "thread_tools.title": "Perangkat Topik",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Tempel Topik", "thread_tools.pin": "Tempel Topik",
"thread_tools.unpin": "Copot Topik", "thread_tools.unpin": "Copot Topik",
"thread_tools.lock": "Kunci Topik", "thread_tools.lock": "Kunci Topik",

@ -52,7 +52,7 @@
"not-watching.description": "Non notificarmi sulle nuove risposte.<br/>Mostra la discussione fra le non lette se la categoria non è ignorata.", "not-watching.description": "Non notificarmi sulle nuove risposte.<br/>Mostra la discussione fra le non lette se la categoria non è ignorata.",
"ignoring.description": "Non notificarmi sulle nuove risposte.<br/>Non mostrare la discussione fra le non lette.", "ignoring.description": "Non notificarmi sulle nuove risposte.<br/>Non mostrare la discussione fra le non lette.",
"thread_tools.title": "Strumenti per la Discussione", "thread_tools.title": "Strumenti per la Discussione",
"thread_tools.markAsUnreadForAll": "Segna tutti come non letti", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Fissa Discussione", "thread_tools.pin": "Fissa Discussione",
"thread_tools.unpin": "Sblocca Discussione", "thread_tools.unpin": "Sblocca Discussione",
"thread_tools.lock": "Blocca Discussione", "thread_tools.lock": "Blocca Discussione",

@ -52,7 +52,7 @@
"not-watching.description": "新しく返信通知を受け取らない。<br/>カテゴリが無視されていない場合、未読のスレッドを表示します。", "not-watching.description": "新しく返信通知を受け取らない。<br/>カテゴリが無視されていない場合、未読のスレッドを表示します。",
"ignoring.description": "新しく返信通知を受け取らない。<br/>未読のスレッドは表示されません。", "ignoring.description": "新しく返信通知を受け取らない。<br/>未読のスレッドは表示されません。",
"thread_tools.title": "スレッドツール", "thread_tools.title": "スレッドツール",
"thread_tools.markAsUnreadForAll": "すべて未読にマーク", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "スレッドを最上部に固定", "thread_tools.pin": "スレッドを最上部に固定",
"thread_tools.unpin": "スレッドの固定を解除", "thread_tools.unpin": "スレッドの固定を解除",
"thread_tools.lock": "スレッドをロック", "thread_tools.lock": "スレッドをロック",

@ -52,7 +52,7 @@
"not-watching.description": "새로운 답글에 대해 알림 받지 않기. 해당 게시판을 팔로우 중이라면 \"읽지않은 게시물\" 에서 보여주기.", "not-watching.description": "새로운 답글에 대해 알림 받지 않기. 해당 게시판을 팔로우 중이라면 \"읽지않은 게시물\" 에서 보여주기.",
"ignoring.description": "새로운 답글에 대한 알림 받지 않기. \"읽지않은 게시물\"에서 보여주지 않기.", "ignoring.description": "새로운 답글에 대한 알림 받지 않기. \"읽지않은 게시물\"에서 보여주지 않기.",
"thread_tools.title": "게시물 관리", "thread_tools.title": "게시물 관리",
"thread_tools.markAsUnreadForAll": "모든 사용자에게 읽지 않음으로 표시", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "상단 고정", "thread_tools.pin": "상단 고정",
"thread_tools.unpin": "상단 고정 해제", "thread_tools.unpin": "상단 고정 해제",
"thread_tools.lock": "잠금", "thread_tools.lock": "잠금",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Temos priemonės", "thread_tools.title": "Temos priemonės",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Prisegti temą", "thread_tools.pin": "Prisegti temą",
"thread_tools.unpin": "Atsegti temą", "thread_tools.unpin": "Atsegti temą",
"thread_tools.lock": "Užrakinti temą", "thread_tools.lock": "Užrakinti temą",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Perkakas Topik", "thread_tools.title": "Perkakas Topik",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Pinkan topik", "thread_tools.pin": "Pinkan topik",
"thread_tools.unpin": "Batalkan pin topik", "thread_tools.unpin": "Batalkan pin topik",
"thread_tools.lock": "Kunci topik", "thread_tools.lock": "Kunci topik",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Emneverktøy", "thread_tools.title": "Emneverktøy",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Fest tråd", "thread_tools.pin": "Fest tråd",
"thread_tools.unpin": "Ufest tråd", "thread_tools.unpin": "Ufest tråd",
"thread_tools.lock": "Lås tråd", "thread_tools.lock": "Lås tråd",

@ -1,64 +1,64 @@
{ {
"state": "State", "state": "Status",
"reporter": "Reporter", "reporter": "Rapporteur",
"reported-at": "Reported At", "reported-at": "Gerapporteerd op",
"description": "Description", "description": "Beschrijving",
"no-flags": "Hooray! No flags found.", "no-flags": "Hooray! No flags found.",
"assignee": "Assignee", "assignee": "Toegekend aan",
"update": "Update", "update": "Bijwerken",
"updated": "Updated", "updated": "Bijgewerkt",
"target-purged": "The content this flag referred to has been purged and is no longer available.", "target-purged": "The content this flag referred to has been purged and is no longer available.",
"quick-filters": "Quick Filters", "quick-filters": "Quick Filters",
"filter-active": "There are one or more filters active in this list of flags", "filter-active": "Er zijn een of meer filters actief in deze lijst van markeringen",
"filter-reset": "Remove Filters", "filter-reset": "Filters verwijderen",
"filters": "Filter Options", "filters": "Filter opties",
"filter-reporterId": "Reporter UID", "filter-reporterId": "Rapporteur UID",
"filter-targetUid": "Flagged UID", "filter-targetUid": "Flagged UID",
"filter-type": "Flag Type", "filter-type": "Flag Type",
"filter-type-all": "All Content", "filter-type-all": "Alle inhoud",
"filter-type-post": "Post", "filter-type-post": "Bericht",
"filter-state": "State", "filter-state": "Status",
"filter-assignee": "Assignee UID", "filter-assignee": "Assignee UID",
"filter-cid": "Category", "filter-cid": "Categorie",
"filter-quick-mine": "Assigned to me", "filter-quick-mine": "Toegewezen aan mij",
"filter-cid-all": "All categories", "filter-cid-all": "Alle categorieën",
"apply-filters": "Apply Filters", "apply-filters": "Filters toepassen",
"quick-links": "Quick Links", "quick-links": "Quick Links",
"flagged-user": "Flagged User", "flagged-user": "Flagged User",
"view-profile": "View Profile", "view-profile": "Profiel bekijken",
"start-new-chat": "Start New Chat", "start-new-chat": "Begin een nieuwe chat",
"go-to-target": "View Flag Target", "go-to-target": "View Flag Target",
"user-view": "View Profile", "user-view": "Profiel bekijken",
"user-edit": "Edit Profile", "user-edit": "Profiel wijzigen",
"notes": "Flag Notes", "notes": "Flag Notes",
"add-note": "Add Note", "add-note": "Notitie toevoegen",
"no-notes": "No shared notes.", "no-notes": "Geen gedeelde notities",
"history": "Flag History", "history": "Flag History",
"back": "Back to Flags List", "back": "Back to Flags List",
"no-history": "No flag history.", "no-history": "No flag history.",
"state-all": "All states", "state-all": "Alle statussen",
"state-open": "New/Open", "state-open": "Nieuw/Open",
"state-wip": "Work in Progress", "state-wip": "Wordt aan gewerkt",
"state-resolved": "Resolved", "state-resolved": "Opgelost",
"state-rejected": "Rejected", "state-rejected": "Afgewezen",
"no-assignee": "Not Assigned", "no-assignee": "Niet toegewezen",
"note-added": "Note Added", "note-added": "Notitie toegevoegd",
"modal-title": "Report Inappropriate Content", "modal-title": "Rapporteer ongepaste content",
"modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.",
"modal-reason-spam": "Spam", "modal-reason-spam": "Spam",
"modal-reason-offensive": "Offensive", "modal-reason-offensive": "Aanstootgevend",
"modal-reason-other": "Other (specify below)", "modal-reason-other": "Anders (specificeer onder)",
"modal-reason-custom": "Reason for reporting this content...", "modal-reason-custom": "Reden voor het rapporteren van deze content...",
"modal-submit": "Submit Report", "modal-submit": "Rapport verzenden",
"modal-submit-success": "Content has been flagged for moderation.", "modal-submit-success": "Content has been flagged for moderation.",
"modal-submit-confirm": "Confirm Submission", "modal-submit-confirm": "Bevestig verzending",
"modal-submit-confirm-text": "You have a custom reason specified already. Are you sure you wish to submit via quick-report?", "modal-submit-confirm-text": "U hebt al een aangepaste reden gegegeven. Weet u zeker dat u een wilt verzenden via quick-report?",
"modal-submit-confirm-text-help": "Submitting a quick report will overwrite any custom reasons defined." "modal-submit-confirm-text-help": "Verzenden van een quick-report overschrijft reeds gedefinieerde aangepaste redenen."
} }

@ -52,7 +52,7 @@
"not-watching.description": "Stuur me geen melding van nieuwe reacties.<br/>Toon onderwerp in ongelezen mits de categorie niet genegeerd wordt.", "not-watching.description": "Stuur me geen melding van nieuwe reacties.<br/>Toon onderwerp in ongelezen mits de categorie niet genegeerd wordt.",
"ignoring.description": "Stuur me geen melding van nieuwe reacties.<br/>Toon dit onderwerp niet onder de ongelezen onderwerpen.", "ignoring.description": "Stuur me geen melding van nieuwe reacties.<br/>Toon dit onderwerp niet onder de ongelezen onderwerpen.",
"thread_tools.title": "Acties", "thread_tools.title": "Acties",
"thread_tools.markAsUnreadForAll": "Markeer alles als ongelezen", "thread_tools.markAsUnreadForAll": "Alles als ongelezen markeren",
"thread_tools.pin": "Onderwerp vastpinnen", "thread_tools.pin": "Onderwerp vastpinnen",
"thread_tools.unpin": "Onderwerp losmaken", "thread_tools.unpin": "Onderwerp losmaken",
"thread_tools.lock": "Onderwerp sluiten", "thread_tools.lock": "Onderwerp sluiten",

@ -126,9 +126,9 @@
"sso.title": "Single Sign-on Services", "sso.title": "Single Sign-on Services",
"sso.associated": "Geassocieerd met", "sso.associated": "Geassocieerd met",
"sso.not-associated": "Klik hier om geassocieerd te worden met", "sso.not-associated": "Klik hier om geassocieerd te worden met",
"sso.dissociate": "Dissociate", "sso.dissociate": "Ontkoppelen",
"sso.dissociate-confirm-title": "Confirm Dissociation", "sso.dissociate-confirm-title": "Bevestig ontkoppeling",
"sso.dissociate-confirm": "Are you sure you wish to dissociate your account from %1?", "sso.dissociate-confirm": "Weet u zeker dat u uw account wilt ontkoppelen van %1?",
"info.latest-flags": "Laatste markeringen", "info.latest-flags": "Laatste markeringen",
"info.no-flags": "Geen gemarkeerde berichten gevonden", "info.no-flags": "Geen gemarkeerde berichten gevonden",
"info.ban-history": "Recente verban-geschiedenis", "info.ban-history": "Recente verban-geschiedenis",

@ -52,7 +52,7 @@
"not-watching.description": "Nie informuj mnie o nowych odpowiedziach<br/> Pokazuj temat w nieprzeczytanych, jeśli kategoria nie jest ignorowana.", "not-watching.description": "Nie informuj mnie o nowych odpowiedziach<br/> Pokazuj temat w nieprzeczytanych, jeśli kategoria nie jest ignorowana.",
"ignoring.description": "Nie informuj mnie o nowych odpowiedziach.<br/>Nie pokazuj tematu w nieprzeczytanych.", "ignoring.description": "Nie informuj mnie o nowych odpowiedziach.<br/>Nie pokazuj tematu w nieprzeczytanych.",
"thread_tools.title": "Narzędzia tematu", "thread_tools.title": "Narzędzia tematu",
"thread_tools.markAsUnreadForAll": "Zaznacz wszystkie jako nieprzeczytane", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Przypnij temat", "thread_tools.pin": "Przypnij temat",
"thread_tools.unpin": "Odepnij temat", "thread_tools.unpin": "Odepnij temat",
"thread_tools.lock": "Zablokuj temat", "thread_tools.lock": "Zablokuj temat",

@ -52,7 +52,7 @@
"not-watching.description": "Não me notificar de novas respostas.<br/>Mostrar tópico em não-lido se a categoria não estiver sendo ignorada.", "not-watching.description": "Não me notificar de novas respostas.<br/>Mostrar tópico em não-lido se a categoria não estiver sendo ignorada.",
"ignoring.description": "Não me notificar de novas respostas.<br/>Não mostrar tópico em não-lido.", "ignoring.description": "Não me notificar de novas respostas.<br/>Não mostrar tópico em não-lido.",
"thread_tools.title": "Ferramentas de Tópico", "thread_tools.title": "Ferramentas de Tópico",
"thread_tools.markAsUnreadForAll": "Marcar como não-lido para todos", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Fixar Tópico", "thread_tools.pin": "Fixar Tópico",
"thread_tools.unpin": "Desfixar Tópico", "thread_tools.unpin": "Desfixar Tópico",
"thread_tools.lock": "Trancar Tópico", "thread_tools.lock": "Trancar Tópico",

@ -52,7 +52,7 @@
"not-watching.description": "Não me notificar de novas respostas.<br/>Mostrar tópico em \"não lidos\" se a categoria não está ignorada.", "not-watching.description": "Não me notificar de novas respostas.<br/>Mostrar tópico em \"não lidos\" se a categoria não está ignorada.",
"ignoring.description": "Não me notificar de novas respostas.<br/>Não mostrar este tópico em \"não lidos\".", "ignoring.description": "Não me notificar de novas respostas.<br/>Não mostrar este tópico em \"não lidos\".",
"thread_tools.title": "Ferramentas de tópicos", "thread_tools.title": "Ferramentas de tópicos",
"thread_tools.markAsUnreadForAll": "Marcar todas como não lidas", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Fixar tópico", "thread_tools.pin": "Fixar tópico",
"thread_tools.unpin": "Desafixar tópico", "thread_tools.unpin": "Desafixar tópico",
"thread_tools.lock": "Bloquear tópico", "thread_tools.lock": "Bloquear tópico",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Unelte pentru subiecte", "thread_tools.title": "Unelte pentru subiecte",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Pin Subiect", "thread_tools.pin": "Pin Subiect",
"thread_tools.unpin": "Unpin Subiect", "thread_tools.unpin": "Unpin Subiect",
"thread_tools.lock": "Închide Subiect", "thread_tools.lock": "Închide Subiect",

@ -52,7 +52,7 @@
"not-watching.description": "Не уведомлять меня о новых ответах.<br/>Показать тему в непрочитанных, если категория мной не игнорируется.", "not-watching.description": "Не уведомлять меня о новых ответах.<br/>Показать тему в непрочитанных, если категория мной не игнорируется.",
"ignoring.description": "Не уведомлять меня о новых ответах.<br/>Не отображать тему в непрочитанных.", "ignoring.description": "Не уведомлять меня о новых ответах.<br/>Не отображать тему в непрочитанных.",
"thread_tools.title": "Настройки темы", "thread_tools.title": "Настройки темы",
"thread_tools.markAsUnreadForAll": "Отметить все записи непрочитанными", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Прикрепить тему", "thread_tools.pin": "Прикрепить тему",
"thread_tools.unpin": "Открепить тему", "thread_tools.unpin": "Открепить тему",
"thread_tools.lock": "Закрыть тему", "thread_tools.lock": "Закрыть тему",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Ibikoresho by'Ikiganiro", "thread_tools.title": "Ibikoresho by'Ikiganiro",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Zamura Ikiganiro", "thread_tools.pin": "Zamura Ikiganiro",
"thread_tools.unpin": "Manura Ikiganiro", "thread_tools.unpin": "Manura Ikiganiro",
"thread_tools.lock": "Fungirana Ikiganiro", "thread_tools.lock": "Fungirana Ikiganiro",

@ -52,7 +52,7 @@
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "Topic Tools", "thread_tools.title": "Topic Tools",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Pone in evidèntzia s'Arresonda", "thread_tools.pin": "Pone in evidèntzia s'Arresonda",
"thread_tools.unpin": "Boga dae s'Evidèntzia s'Arresonasa", "thread_tools.unpin": "Boga dae s'Evidèntzia s'Arresonasa",
"thread_tools.lock": "Bloca Arresonada", "thread_tools.lock": "Bloca Arresonada",

@ -52,7 +52,7 @@
"not-watching.description": "Vypnúť upozornenia na nové odpovede.<br/> Zobraziť tému v neprečítaných ak kategória nie je ignorovaná.", "not-watching.description": "Vypnúť upozornenia na nové odpovede.<br/> Zobraziť tému v neprečítaných ak kategória nie je ignorovaná.",
"ignoring.description": "Neupozorňovať na nové upozornenia.<br/>Nezobrazovať témy v neprečítaných.", "ignoring.description": "Neupozorňovať na nové upozornenia.<br/>Nezobrazovať témy v neprečítaných.",
"thread_tools.title": "Nástroje témy", "thread_tools.title": "Nástroje témy",
"thread_tools.markAsUnreadForAll": "Označiť všetko ako neprečítané", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Zviditeľniť tému", "thread_tools.pin": "Zviditeľniť tému",
"thread_tools.unpin": "Odstrániť zviditeľnenie témy", "thread_tools.unpin": "Odstrániť zviditeľnenie témy",
"thread_tools.lock": "Uzamknúť tému", "thread_tools.lock": "Uzamknúť tému",

@ -52,7 +52,7 @@
"not-watching.description": "Ne obvesti me o novih odgovorih.<br/>Teme prikaži v Neprebrano le če kategorija ni prezrta.", "not-watching.description": "Ne obvesti me o novih odgovorih.<br/>Teme prikaži v Neprebrano le če kategorija ni prezrta.",
"ignoring.description": "Ne obvesti me o novih odgovorih.<br/>Teme ne prikaži v Neprebrano.", "ignoring.description": "Ne obvesti me o novih odgovorih.<br/>Teme ne prikaži v Neprebrano.",
"thread_tools.title": "Orodja teme", "thread_tools.title": "Orodja teme",
"thread_tools.markAsUnreadForAll": "Označi vse kot neprebrano", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Pripni temo", "thread_tools.pin": "Pripni temo",
"thread_tools.unpin": "Odpni temo", "thread_tools.unpin": "Odpni temo",
"thread_tools.lock": "Zakleni temo", "thread_tools.lock": "Zakleni temo",

@ -52,7 +52,7 @@
"not-watching.description": "Немој ме обавештавати о новим одговорима.<br/>Прикажи тему у непрочитаним ако категорија није игнорисана.", "not-watching.description": "Немој ме обавештавати о новим одговорима.<br/>Прикажи тему у непрочитаним ако категорија није игнорисана.",
"ignoring.description": "Немој ме обавештавати о новим одговорима.<br/>Не приказуј тему у непрочитаним", "ignoring.description": "Немој ме обавештавати о новим одговорима.<br/>Не приказуј тему у непрочитаним",
"thread_tools.title": "Алатке теме", "thread_tools.title": "Алатке теме",
"thread_tools.markAsUnreadForAll": "Означи свима као непрочитано", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Закачи тему", "thread_tools.pin": "Закачи тему",
"thread_tools.unpin": "Откачи тему", "thread_tools.unpin": "Откачи тему",
"thread_tools.lock": "Закључај тему", "thread_tools.lock": "Закључај тему",

@ -52,7 +52,7 @@
"not-watching.description": "Meddela mig inte om nya svar. <br/> Visa ämne i oläst ifall kategorin är ignorerad.", "not-watching.description": "Meddela mig inte om nya svar. <br/> Visa ämne i oläst ifall kategorin är ignorerad.",
"ignoring.description": "Meddela mig inte om nya svar. <br/>Visa inte ämne i oläst.", "ignoring.description": "Meddela mig inte om nya svar. <br/>Visa inte ämne i oläst.",
"thread_tools.title": "Ämnesverktyg", "thread_tools.title": "Ämnesverktyg",
"thread_tools.markAsUnreadForAll": "Markera oläst för alla", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Nåla fast ämne", "thread_tools.pin": "Nåla fast ämne",
"thread_tools.unpin": "Lösgör ämne", "thread_tools.unpin": "Lösgör ämne",
"thread_tools.lock": "Lås ämne", "thread_tools.lock": "Lås ämne",

@ -52,7 +52,7 @@
"not-watching.description": "อย่าเตือนฉันเมือมีคำตอบใหม่ <br/> แสดงกระทู้ในรายการที่ยังไม่ได้อ่านหากหมวดหมู่นี้ไม่ได้รับการเมินเฉย", "not-watching.description": "อย่าเตือนฉันเมือมีคำตอบใหม่ <br/> แสดงกระทู้ในรายการที่ยังไม่ได้อ่านหากหมวดหมู่นี้ไม่ได้รับการเมินเฉย",
"ignoring.description": "อย่าเตือนฉันเมื่อมีคำตอบใหม่ <br/>อย่าแสดงกระทู้ในรายการที่ยังไม่ได้อ่าน", "ignoring.description": "อย่าเตือนฉันเมื่อมีคำตอบใหม่ <br/>อย่าแสดงกระทู้ในรายการที่ยังไม่ได้อ่าน",
"thread_tools.title": "เครื่องมือช่วยจัดการ Topic", "thread_tools.title": "เครื่องมือช่วยจัดการ Topic",
"thread_tools.markAsUnreadForAll": "มาร์คว่ายังไม่ยังอ่านทั้งหมด", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "ปักหมุดกระทู้", "thread_tools.pin": "ปักหมุดกระทู้",
"thread_tools.unpin": "เลิกปักหมุดกระทู้", "thread_tools.unpin": "เลิกปักหมุดกระทู้",
"thread_tools.lock": "ล็อคกระทู้", "thread_tools.lock": "ล็อคกระทู้",

@ -52,7 +52,7 @@
"not-watching.description": "Yeni bir ileti geldiğinde bildirme.<br/>Kategori susturulmamışsa okunmamış olarak göster.", "not-watching.description": "Yeni bir ileti geldiğinde bildirme.<br/>Kategori susturulmamışsa okunmamış olarak göster.",
"ignoring.description": "Yeni bir ileti geldiğinde bildirme.<br/>Okunmamış olarak gösterme.", "ignoring.description": "Yeni bir ileti geldiğinde bildirme.<br/>Okunmamış olarak gösterme.",
"thread_tools.title": "Konu Ayarları", "thread_tools.title": "Konu Ayarları",
"thread_tools.markAsUnreadForAll": "Hepsini okunmadı olarak işaretle", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Başlığı Sabitle", "thread_tools.pin": "Başlığı Sabitle",
"thread_tools.unpin": "Başlığı Sabitleme", "thread_tools.unpin": "Başlığı Sabitleme",
"thread_tools.lock": "Başlığı Kitle", "thread_tools.lock": "Başlığı Kitle",

@ -52,7 +52,7 @@
"not-watching.description": "Не сповіщати мене про нові відповіді.<br/>Показувати тему в непрочитаних якщо категорія не ігнорується.", "not-watching.description": "Не сповіщати мене про нові відповіді.<br/>Показувати тему в непрочитаних якщо категорія не ігнорується.",
"ignoring.description": "Не сповіщати мене про нові відповіді.<br/>Не показувати тему в непрочитаних.", "ignoring.description": "Не сповіщати мене про нові відповіді.<br/>Не показувати тему в непрочитаних.",
"thread_tools.title": "Інструменти теми", "thread_tools.title": "Інструменти теми",
"thread_tools.markAsUnreadForAll": "Відмітити всі непрочитаними", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Прикріпити тему", "thread_tools.pin": "Прикріпити тему",
"thread_tools.unpin": "Відкріпити тему", "thread_tools.unpin": "Відкріпити тему",
"thread_tools.lock": "Заблокувати тему", "thread_tools.lock": "Заблокувати тему",

@ -52,7 +52,7 @@
"not-watching.description": "Không thông báo tôi các trả lời mới. <br/>Hiển thị mục chưa đọc nếu danh mục bị bỏ qua.", "not-watching.description": "Không thông báo tôi các trả lời mới. <br/>Hiển thị mục chưa đọc nếu danh mục bị bỏ qua.",
"ignoring.description": "Không thông báo tôi các trả lời mới. <br/>Không hiển thị các mục chưa đọc.", "ignoring.description": "Không thông báo tôi các trả lời mới. <br/>Không hiển thị các mục chưa đọc.",
"thread_tools.title": "Công cụ", "thread_tools.title": "Công cụ",
"thread_tools.markAsUnreadForAll": "Đánh dấu tất cả thành chưa đọc", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "Pin chủ đề", "thread_tools.pin": "Pin chủ đề",
"thread_tools.unpin": "Bỏ pin chủ đề", "thread_tools.unpin": "Bỏ pin chủ đề",
"thread_tools.lock": "Khóa chủ đề", "thread_tools.lock": "Khóa chủ đề",

@ -52,7 +52,7 @@
"not-watching.description": "不要在有新回复时通知我。<br/>如果这个版块未被忽略则在未读主题中显示。", "not-watching.description": "不要在有新回复时通知我。<br/>如果这个版块未被忽略则在未读主题中显示。",
"ignoring.description": "不要在有新回复时通知我。<br/>不要在未读主题中显示该主题。", "ignoring.description": "不要在有新回复时通知我。<br/>不要在未读主题中显示该主题。",
"thread_tools.title": "主题工具", "thread_tools.title": "主题工具",
"thread_tools.markAsUnreadForAll": "标记全部未读", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "置顶主题", "thread_tools.pin": "置顶主题",
"thread_tools.unpin": "取消置顶主题", "thread_tools.unpin": "取消置顶主题",
"thread_tools.lock": "锁定主题", "thread_tools.lock": "锁定主题",

@ -52,7 +52,7 @@
"not-watching.description": "有新的回覆不用通知我。<br/>如果類別不是被忽略的,在未讀頁中顯示主題。", "not-watching.description": "有新的回覆不用通知我。<br/>如果類別不是被忽略的,在未讀頁中顯示主題。",
"ignoring.description": "有新的回覆不用通知我。<br/>在未讀頁中不顯示主題。", "ignoring.description": "有新的回覆不用通知我。<br/>在未讀頁中不顯示主題。",
"thread_tools.title": "主題工具箱", "thread_tools.title": "主題工具箱",
"thread_tools.markAsUnreadForAll": "Mark unread for all", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread_tools.pin": "釘選主題", "thread_tools.pin": "釘選主題",
"thread_tools.unpin": "取消釘選主題", "thread_tools.unpin": "取消釘選主題",
"thread_tools.lock": "鎖定主題", "thread_tools.lock": "鎖定主題",

@ -217,6 +217,10 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
}; };
trafficCanvas.width = $(trafficCanvas).parent().width(); trafficCanvas.width = $(trafficCanvas).parent().width();
data.datasets[0].yAxisID = 'left-y-axis';
data.datasets[1].yAxisID = 'right-y-axis';
graphs.traffic = new Chart(trafficCtx, { graphs.traffic = new Chart(trafficCtx, {
type: 'line', type: 'line',
data: data, data: data,
@ -227,9 +231,20 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
}, },
scales: { scales: {
yAxes: [{ yAxes: [{
id: 'left-y-axis',
ticks: {
beginAtZero: true,
},
type: 'linear',
position: 'left',
}, {
id: 'right-y-axis',
ticks: { ticks: {
beginAtZero: true, beginAtZero: true,
suggestedMax: 10,
}, },
type: 'linear',
position: 'right',
}], }],
}, },
tooltips: { tooltips: {

@ -107,7 +107,9 @@ app.cacheBuster = null;
}; };
app.logout = function (e) { app.logout = function (e) {
if (e) {
e.preventDefault(); e.preventDefault();
}
$(window).trigger('action:app.logout'); $(window).trigger('action:app.logout');
/* /*

@ -127,11 +127,11 @@
category.children.forEach(function (child) { category.children.forEach(function (child) {
if (child && !child.isSection) { if (child && !child.isSection) {
var link = child.link ? child.link : (relative_path + '/category/' + child.slug); var link = child.link ? child.link : (relative_path + '/category/' + child.slug);
html += '<a href="' + link + '">' + html += '<span class="category-children-item pull-left">' +
'<span class="fa-stack fa-lg">' + '<div class="icon pull-left" style="' + generateCategoryBackground(child) + '">' +
'<i style="color:' + child.bgColor + ';" class="fa fa-circle fa-stack-2x"></i>' + '<i class="fa fa-fw ' + child.icon + '"></i>' +
'<i style="color:' + child.color + ';" class="fa fa-stack-1x ' + child.icon + '"></i>' + '</div>' +
'</span><small>' + child.name + '</small></a> '; '<a href="' + link + '"><small>' + child.name + '</small></a></span>';
} }
}); });
html = html ? ('<span class="category-children">' + html + '</span>') : html; html = html ? ('<span class="category-children">' + html + '</span>') : html;

@ -61,6 +61,8 @@ module.exports = function (Categories) {
'topics:tag', 'topics:tag',
'posts:edit', 'posts:edit',
'posts:delete', 'posts:delete',
'posts:upvote',
'posts:downvote',
'topics:delete', 'topics:delete',
]; ];

@ -6,9 +6,11 @@ var path = require('path');
var packageInstall = require('./package-install'); var packageInstall = require('./package-install');
var dirname = require('./paths').baseDir; var dirname = require('./paths').baseDir;
var defaultPackage;
// check to make sure dependencies are installed // check to make sure dependencies are installed
try { try {
fs.readFileSync(path.join(dirname, 'package.json')); defaultPackage = JSON.parse(fs.readFileSync(path.join(dirname, 'install/package.json'), 'utf8'));
} catch (e) { } catch (e) {
if (e.code === 'ENOENT') { if (e.code === 'ENOENT') {
console.warn('package.json not found.'); console.warn('package.json not found.');
@ -29,13 +31,24 @@ try {
} }
try { try {
fs.readFileSync(path.join(dirname, 'node_modules/async/package.json'), 'utf8'); var semver = require('semver');
fs.readFileSync(path.join(dirname, 'node_modules/commander/package.json'), 'utf8');
fs.readFileSync(path.join(dirname, 'node_modules/colors/package.json'), 'utf8'); var checkVersion = function (packageName) {
fs.readFileSync(path.join(dirname, 'node_modules/nconf/package.json'), 'utf8'); var version = JSON.parse(fs.readFileSync(path.join(dirname, 'node_modules', packageName, 'package.json'), 'utf8')).version;
if (!semver.satisfies(version, defaultPackage.dependencies[packageName])) {
var e = new TypeError('Incorrect dependency version: ' + packageName);
e.code = 'DEP_WRONG_VERSION';
throw e;
}
};
checkVersion('nconf');
checkVersion('async');
checkVersion('commander');
checkVersion('colors');
} catch (e) { } catch (e) {
if (e.code === 'ENOENT') { if (['ENOENT', 'DEP_WRONG_VERSION', 'MODULE_NOT_FOUND'].indexOf(e.code) !== -1) {
console.warn('Dependencies not yet installed.'); console.warn('Dependencies outdated or not yet installed.');
console.log('Installing them now...\n'); console.log('Installing them now...\n');
packageInstall.installAll(); packageInstall.installAll();
@ -241,7 +254,7 @@ program
'When running particular upgrade scripts, options are ignored.', 'When running particular upgrade scripts, options are ignored.',
'By default all options are enabled. Passing any options disables that default.', 'By default all options are enabled. Passing any options disables that default.',
'Only package and dependency updates: ' + './nodebb upgrade -mi'.yellow, 'Only package and dependency updates: ' + './nodebb upgrade -mi'.yellow,
'Only database update: ' + './nodebb upgrade -d'.yellow, 'Only database update: ' + './nodebb upgrade -s'.yellow,
].join('\n')); ].join('\n'));
}) })
.action(function (scripts, options) { .action(function (scripts, options) {

@ -30,8 +30,6 @@ function updatePackageFile() {
exports.updatePackageFile = updatePackageFile; exports.updatePackageFile = updatePackageFile;
function installAll() { function installAll() {
process.stdout.write(' started\n'.green);
var prod = global.env !== 'development'; var prod = global.env !== 'development';
var command = 'npm install'; var command = 'npm install';
try { try {

@ -23,6 +23,7 @@ var steps = {
install: { install: {
message: 'Bringing base dependencies up to date...', message: 'Bringing base dependencies up to date...',
handler: function (next) { handler: function (next) {
process.stdout.write(' started\n'.green);
packageInstall.installAll(); packageInstall.installAll();
next(); next();
}, },

@ -8,7 +8,7 @@ var topics = require('../topics');
var pagination = require('../pagination'); var pagination = require('../pagination');
var helpers = require('./helpers'); var helpers = require('./helpers');
var tagsController = {}; var tagsController = module.exports;
tagsController.getTag = function (req, res, next) { tagsController.getTag = function (req, res, next) {
var tag = validator.escape(String(req.params.tag)); var tag = validator.escape(String(req.params.tag));
@ -33,7 +33,7 @@ tagsController.getTag = function (req, res, next) {
templateData.nextStart = stop + 1; templateData.nextStart = stop + 1;
async.parallel({ async.parallel({
topicCount: function (next) { topicCount: function (next) {
topics.getTagTopicCount(tag, next); topics.getTagTopicCount(req.params.tag, next);
}, },
tids: function (next) { tids: function (next) {
topics.getTagTids(req.params.tag, start, stop, next); topics.getTagTids(req.params.tag, start, stop, next);
@ -47,11 +47,7 @@ tagsController.getTag = function (req, res, next) {
topicCount = results.topicCount; topicCount = results.topicCount;
topics.getTopics(results.tids, req.uid, next); topics.getTopics(results.tids, req.uid, next);
}, },
], function (err, topics) { function (topics) {
if (err) {
return next(err);
}
res.locals.metaTags = [ res.locals.metaTags = [
{ {
name: 'title', name: 'title',
@ -68,14 +64,16 @@ tagsController.getTag = function (req, res, next) {
templateData.pagination = pagination.create(page, pageCount); templateData.pagination = pagination.create(page, pageCount);
res.render('tag', templateData); res.render('tag', templateData);
}); },
], next);
}; };
tagsController.getTags = function (req, res, next) { tagsController.getTags = function (req, res, next) {
topics.getTags(0, 99, function (err, tags) { async.waterfall([
if (err) { function (next) {
return next(err); topics.getTags(0, 99, next);
} },
function (tags) {
tags = tags.filter(Boolean); tags = tags.filter(Boolean);
var data = { var data = {
tags: tags, tags: tags,
@ -84,7 +82,6 @@ tagsController.getTags = function (req, res, next) {
title: '[[pages:tags]]', title: '[[pages:tags]]',
}; };
res.render('tags', data); res.render('tags', data);
}); },
], next);
}; };
module.exports = tagsController;

@ -90,11 +90,11 @@ module.exports = function (Groups) {
return callback(new Error('[[error:group-name-too-long]]')); return callback(new Error('[[error:group-name-too-long]]'));
} }
if (!Groups.isPrivilegeGroup(name) && name.indexOf(':') !== -1) { if (!Groups.isPrivilegeGroup(name) && name.includes(':')) {
return callback(new Error('[[error:invalid-group-name]]')); return callback(new Error('[[error:invalid-group-name]]'));
} }
if (name.indexOf('/') !== -1 || !utils.slugify(name)) { if (name.includes('/') || !utils.slugify(name)) {
return callback(new Error('[[error:invalid-group-name]]')); return callback(new Error('[[error:invalid-group-name]]'));
} }

@ -14,6 +14,7 @@ var JS = module.exports;
JS.scripts = { JS.scripts = {
base: [ base: [
'node_modules/promise-polyfill/dist/polyfill.js',
'node_modules/jquery/dist/jquery.js', 'node_modules/jquery/dist/jquery.js',
'node_modules/socket.io-client/dist/socket.io.js', 'node_modules/socket.io-client/dist/socket.io.js',
'public/vendor/jquery/timeago/jquery.timeago.js', 'public/vendor/jquery/timeago/jquery.timeago.js',
@ -36,7 +37,6 @@ JS.scripts = {
'public/src/ajaxify.js', 'public/src/ajaxify.js',
'public/src/overrides.js', 'public/src/overrides.js',
'public/src/widgets.js', 'public/src/widgets.js',
'node_modules/promise-polyfill/promise.js',
], ],
// files listed below are only available client-side, or are bundled in to reduce # of network requests on cold load // files listed below are only available client-side, or are bundled in to reduce # of network requests on cold load

@ -6,6 +6,7 @@ var meta = require('../meta');
var db = require('../database'); var db = require('../database');
var user = require('../user'); var user = require('../user');
var plugins = require('../plugins'); var plugins = require('../plugins');
var privileges = require('../privileges');
module.exports = function (Posts) { module.exports = function (Posts) {
var votesInProgress = {}; var votesInProgress = {};
@ -15,16 +16,27 @@ module.exports = function (Posts) {
return callback(new Error('[[error:reputation-system-disabled]]')); return callback(new Error('[[error:reputation-system-disabled]]'));
} }
async.waterfall([
function (next) {
privileges.posts.can('posts:upvote', pid, uid, next);
},
function (canUpvote, next) {
if (!canUpvote) {
return next(new Error('[[error:no-privileges]]'));
}
if (voteInProgress(pid, uid)) { if (voteInProgress(pid, uid)) {
return callback(new Error('[[error:already-voting-for-this-post]]')); return next(new Error('[[error:already-voting-for-this-post]]'));
} }
putVoteInProgress(pid, uid); putVoteInProgress(pid, uid);
toggleVote('upvote', pid, uid, function (err, data) { toggleVote('upvote', pid, uid, function (err, data) {
clearVoteProgress(pid, uid); clearVoteProgress(pid, uid);
callback(err, data); next(err, data);
}); });
},
], callback);
}; };
Posts.downvote = function (pid, uid, callback) { Posts.downvote = function (pid, uid, callback) {
@ -36,16 +48,27 @@ module.exports = function (Posts) {
return callback(new Error('[[error:downvoting-disabled]]')); return callback(new Error('[[error:downvoting-disabled]]'));
} }
async.waterfall([
function (next) {
privileges.posts.can('posts:downvote', pid, uid, next);
},
function (canUpvote, next) {
if (!canUpvote) {
return next(new Error('[[error:no-privileges]]'));
}
if (voteInProgress(pid, uid)) { if (voteInProgress(pid, uid)) {
return callback(new Error('[[error:already-voting-for-this-post]]')); return next(new Error('[[error:already-voting-for-this-post]]'));
} }
putVoteInProgress(pid, uid); putVoteInProgress(pid, uid);
toggleVote('downvote', pid, uid, function (err, data) { toggleVote('downvote', pid, uid, function (err, data) {
clearVoteProgress(pid, uid); clearVoteProgress(pid, uid);
callback(err, data); next(err, data);
}); });
},
], callback);
}; };
Posts.unvote = function (pid, uid, callback) { Posts.unvote = function (pid, uid, callback) {
@ -106,7 +129,7 @@ module.exports = function (Posts) {
}; };
function voteInProgress(pid, uid) { function voteInProgress(pid, uid) {
return Array.isArray(votesInProgress[uid]) && votesInProgress[uid].indexOf(parseInt(pid, 10)) !== -1; return Array.isArray(votesInProgress[uid]) && votesInProgress[uid].includes(parseInt(pid, 10));
} }
function putVoteInProgress(pid, uid) { function putVoteInProgress(pid, uid) {

@ -11,6 +11,8 @@ privileges.privilegeLabels = [
{ name: 'Tag Topics' }, { name: 'Tag Topics' },
{ name: 'Edit Posts' }, { name: 'Edit Posts' },
{ name: 'Delete Posts' }, { name: 'Delete Posts' },
{ name: 'Upvote Posts' },
{ name: 'Downvote Posts' },
{ name: 'Delete Topics' }, { name: 'Delete Topics' },
{ name: 'Purge' }, { name: 'Purge' },
{ name: 'Moderate' }, { name: 'Moderate' },
@ -25,6 +27,8 @@ privileges.userPrivilegeList = [
'topics:tag', 'topics:tag',
'posts:edit', 'posts:edit',
'posts:delete', 'posts:delete',
'posts:upvote',
'posts:downvote',
'topics:delete', 'topics:delete',
'purge', 'purge',
'moderate', 'moderate',

@ -64,6 +64,9 @@ module.exports = function (Topics) {
'cid:' + topicData.cid + ':uid:' + topicData.uid + ':tids', 'cid:' + topicData.cid + ':uid:' + topicData.uid + ':tids',
], timestamp, topicData.tid, next); ], timestamp, topicData.tid, next);
}, },
function (next) {
db.sortedSetAdd('cid:' + topicData.cid + ':tids:votes', 0, topicData.tid, next);
},
function (next) { function (next) {
categories.updateRecentTid(topicData.cid, topicData.tid, next); categories.updateRecentTid(topicData.cid, topicData.tid, next);
}, },

@ -250,6 +250,7 @@ module.exports = function (Topics) {
var topic; var topic;
var oldCid; var oldCid;
var cid = data.cid; var cid = data.cid;
async.waterfall([ async.waterfall([
function (next) { function (next) {
Topics.exists(tid, next); Topics.exists(tid, next);
@ -258,14 +259,18 @@ module.exports = function (Topics) {
if (!exists) { if (!exists) {
return next(new Error('[[error:no-topic]]')); return next(new Error('[[error:no-topic]]'));
} }
Topics.getTopicFields(tid, ['cid', 'lastposttime', 'pinned', 'deleted', 'postcount'], next); Topics.getTopicFields(tid, ['cid', 'lastposttime', 'pinned', 'deleted', 'postcount', 'upvotes', 'downvotes'], next);
}, },
function (topicData, next) { function (topicData, next) {
topic = topicData; topic = topicData;
if (parseInt(cid, 10) === parseInt(topic.cid, 10)) {
return next(new Error('[[error:cant-move-topic-to-same-category]]'));
}
db.sortedSetsRemove([ db.sortedSetsRemove([
'cid:' + topicData.cid + ':tids', 'cid:' + topicData.cid + ':tids',
'cid:' + topicData.cid + ':tids:pinned', 'cid:' + topicData.cid + ':tids:pinned',
'cid:' + topicData.cid + ':tids:posts', 'cid:' + topicData.cid + ':tids:posts',
'cid:' + topicData.cid + ':tids:votes',
'cid:' + topicData.cid + ':tids:lastposttime', 'cid:' + topicData.cid + ':tids:lastposttime',
'cid:' + topicData.cid + ':recent_tids', 'cid:' + topicData.cid + ':recent_tids',
], tid, next); ], tid, next);
@ -285,6 +290,10 @@ module.exports = function (Topics) {
topic.postcount = topic.postcount || 0; topic.postcount = topic.postcount || 0;
db.sortedSetAdd('cid:' + cid + ':tids:posts', topic.postcount, tid, next); db.sortedSetAdd('cid:' + cid + ':tids:posts', topic.postcount, tid, next);
}, },
function (next) {
var votes = (parseInt(topic.upvotes, 10) || 0) - (parseInt(topic.downvotes, 10) || 0);
db.sortedSetAdd('cid:' + cid + ':tids:votes', votes, tid, next);
},
], function (err) { ], function (err) {
next(err); next(err);
}); });

@ -16,7 +16,7 @@ module.exports = {
var topicData; var topicData;
async.waterfall([ async.waterfall([
function (next) { function (next) {
db.getObjectFields('topic:' + tid, ['mainPid', 'cid'], next); db.getObjectFields('topic:' + tid, ['mainPid', 'cid', 'pinned'], next);
}, },
function (_topicData, next) { function (_topicData, next) {
topicData = _topicData; topicData = _topicData;
@ -44,7 +44,11 @@ module.exports = {
db.sortedSetAdd('topics:votes', votes, tid, next); db.sortedSetAdd('topics:votes', votes, tid, next);
}, },
function (next) { function (next) {
if (parseInt(topicData.pinned, 10) !== 1) {
db.sortedSetAdd('cid:' + topicData.cid + ':tids:votes', votes, tid, next); db.sortedSetAdd('cid:' + topicData.cid + ':tids:votes', votes, tid, next);
} else {
next();
}
}, },
], function (err) { ], function (err) {
next(err); next(err);

@ -0,0 +1,53 @@
'use strict';
var async = require('async');
var batch = require('../../batch');
var db = require('../../database');
module.exports = {
name: 'Fix sort by votes for moved topics',
timestamp: Date.UTC(2018, 0, 8),
method: function (callback) {
var progress = this.progress;
batch.processSortedSet('topics:tid', function (tids, next) {
async.eachLimit(tids, 500, function (tid, _next) {
progress.incr();
var topicData;
async.waterfall([
function (next) {
db.getObjectFields('topic:' + tid, ['cid', 'oldCid', 'upvotes', 'downvotes', 'pinned'], next);
},
function (_topicData, next) {
topicData = _topicData;
if (!topicData.cid || !topicData.oldCid) {
return _next();
}
var upvotes = parseInt(topicData.upvotes, 10) || 0;
var downvotes = parseInt(topicData.downvotes, 10) || 0;
var votes = upvotes - downvotes;
async.series([
function (next) {
db.sortedSetRemove('cid:' + topicData.oldCid + ':tids:votes', tid, next);
},
function (next) {
if (parseInt(topicData.pinned, 10) !== 1) {
db.sortedSetAdd('cid:' + topicData.cid + ':tids:votes', votes, tid, next);
} else {
next();
}
},
], function (err) {
next(err);
});
},
], _next);
}, next);
}, {
progress: progress,
batch: 500,
}, callback);
},
};

@ -0,0 +1,22 @@
'use strict';
var async = require('async');
var privileges = require('../../privileges');
var db = require('../../database');
module.exports = {
name: 'Give vote privilege to registered-users on all categories',
timestamp: Date.UTC(2018, 0, 9),
method: function (callback) {
db.getSortedSetRange('categories:cid', 0, -1, function (err, cids) {
if (err) {
return callback(err);
}
async.eachSeries(cids, function (cid, next) {
privileges.categories.give(['posts:upvote', 'posts:downvote'], cid, 'registered-users', next);
}, callback);
});
},
};

@ -5,7 +5,7 @@
<th class="arrowed" colspan="3"> <th class="arrowed" colspan="3">
[[admin/manage/categories:privileges.section-viewing]] [[admin/manage/categories:privileges.section-viewing]]
</th> </th>
<th class="arrowed" colspan="6"> <th class="arrowed" colspan="8">
[[admin/manage/categories:privileges.section-posting]] [[admin/manage/categories:privileges.section-posting]]
</th> </th>
<th class="arrowed" colspan="2"> <th class="arrowed" colspan="2">
@ -61,7 +61,7 @@
<th class="arrowed" colspan="3"> <th class="arrowed" colspan="3">
[[admin/manage/categories:privileges.section-viewing]] [[admin/manage/categories:privileges.section-viewing]]
</th> </th>
<th class="arrowed" colspan="6"> <th class="arrowed" colspan="8">
[[admin/manage/categories:privileges.section-posting]] [[admin/manage/categories:privileges.section-posting]]
</th> </th>
<th class="arrowed" colspan="2"> <th class="arrowed" colspan="2">

@ -651,6 +651,8 @@ describe('Categories', function () {
'topics:tag': false, 'topics:tag': false,
'topics:delete': false, 'topics:delete': false,
'posts:edit': false, 'posts:edit': false,
'posts:upvote': false,
'posts:downvote': false,
purge: false, purge: false,
moderate: false, moderate: false,
}); });
@ -678,6 +680,8 @@ describe('Categories', function () {
assert.deepEqual(data, { assert.deepEqual(data, {
'groups:find': true, 'groups:find': true,
'groups:posts:edit': true, 'groups:posts:edit': true,
'groups:posts:upvote': true,
'groups:posts:downvote': true,
'groups:topics:delete': false, 'groups:topics:delete': false,
'groups:topics:create': true, 'groups:topics:create': true,
'groups:topics:reply': true, 'groups:topics:reply': true,

@ -112,6 +112,7 @@ describe('emailer', function () {
Meta.configs.setMultiple({ Meta.configs.setMultiple({
'email:smtpTransport:enabled': '1', 'email:smtpTransport:enabled': '1',
'email:smtpTransport:user': username, 'email:smtpTransport:user': username,
'email:smtpTransport:pass': 'anything',
'email:smtpTransport:service': 'nodebb-custom-smtp', 'email:smtpTransport:service': 'nodebb-custom-smtp',
'email:smtpTransport:port': 4000, 'email:smtpTransport:port': 4000,
'email:smtpTransport:host': 'localhost', 'email:smtpTransport:host': 'localhost',

@ -72,6 +72,22 @@ describe('Post\'s', function () {
}); });
describe('voting', function () { describe('voting', function () {
it('should fail to upvote post if group does not have upvote permission', function (done) {
privileges.categories.rescind(['posts:upvote', 'posts:downvote'], cid, 'registered-users', function (err) {
assert.ifError(err);
socketPosts.upvote({ uid: voterUid }, { pid: postData.pid, room_id: 'topic_1' }, function (err) {
assert.equal(err.message, '[[error:no-privileges]]');
socketPosts.downvote({ uid: voterUid }, { pid: postData.pid, room_id: 'topic_1' }, function (err) {
assert.equal(err.message, '[[error:no-privileges]]');
privileges.categories.give(['posts:upvote', 'posts:downvote'], cid, 'registered-users', function (err) {
assert.ifError(err);
done();
});
});
});
});
});
it('should upvote a post', function (done) { it('should upvote a post', function (done) {
socketPosts.upvote({ uid: voterUid }, { pid: postData.pid, room_id: 'topic_1' }, function (err, result) { socketPosts.upvote({ uid: voterUid }, { pid: postData.pid, room_id: 'topic_1' }, function (err, result) {
assert.ifError(err); assert.ifError(err);

@ -87,7 +87,7 @@ describe('helpers', function () {
], ],
}; };
var html = helpers.generateChildrenCategories(category); var html = helpers.generateChildrenCategories(category);
assert.equal(html, '<span class="category-children"><a href="' + nconf.get('relative_path') + '/category/undefined"><span class="fa-stack fa-lg"><i style="color:#ff0000;" class="fa fa-circle fa-stack-2x"></i><i style="color:#00ff00;" class="fa fa-stack-1x undefined"></i></span><small>children</small></a> </span>'); assert.equal(html, '<span class="category-children"><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #ff0000; color: #00ff00;"><i class="fa fa-fw undefined"></i></div><a href="' + nconf.get('relative_path') + '/category/undefined"><small>children</small></a></span></span>');
done(); done();
}); });

Loading…
Cancel
Save