Merge remote-tracking branch 'refs/remotes/origin/master' into chat-permission

v1.18.x
Barış Soner Uşaklı 7 years ago
commit 2b6410f201

@ -2,7 +2,7 @@
"name": "nodebb", "name": "nodebb",
"license": "GPL-3.0", "license": "GPL-3.0",
"description": "NodeBB Forum", "description": "NodeBB Forum",
"version": "1.7.2", "version": "1.7.3",
"homepage": "http://www.nodebb.org", "homepage": "http://www.nodebb.org",
"repository": { "repository": {
"type": "git", "type": "git",
@ -17,89 +17,89 @@
"coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage" "coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage"
}, },
"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.1.6",
"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.0",
"colors": "^1.1.2", "colors": "^1.1.2",
"compression": "^1.7.1", "compression": "^1.7.1",
"commander": "^2.11.0", "commander": "^2.11.0",
"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.0",
"connect-multiparty": "^2.1.0", "connect-multiparty": "^2.1.0",
"connect-redis": "3.3.2", "connect-redis": "3.3.2",
"cookie-parser": "^1.4.3", "cookie-parser": "^1.4.3",
"cron": "^1.3.0", "cron": "^1.3.0",
"cropperjs": "^1.1.3", "cropperjs": "^1.1.3",
"csurf": "^1.9.0", "csurf": "^1.9.0",
"daemon": "^1.1.0", "daemon": "^1.1.0",
"express": "^4.16.2", "express": "^4.16.2",
"express-session": "^1.15.6", "express-session": "^1.15.6",
"express-useragent": "1.0.8", "express-useragent": "1.0.8",
"graceful-fs": "^4.1.11", "graceful-fs": "^4.1.11",
"html-to-text": "3.3.0", "html-to-text": "3.3.0",
"ipaddr.js": "^1.5.4", "ipaddr.js": "^1.5.4",
"jimp": "0.2.28", "jimp": "0.2.28",
"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.2",
"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.0.3",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"mongodb": "2.2.33", "mongodb": "2.2.33",
"morgan": "^1.9.0", "morgan": "^1.9.0",
"mousetrap": "^1.6.1", "mousetrap": "^1.6.1",
"nconf": "^0.9.1", "nconf": "^0.9.1",
"nodebb-plugin-composer-default": "6.0.7", "nodebb-plugin-composer-default": "6.0.7",
"nodebb-plugin-dbsearch": "2.0.9", "nodebb-plugin-dbsearch": "2.0.9",
"nodebb-plugin-emoji": "2.0.7", "nodebb-plugin-emoji": "2.0.9",
"nodebb-plugin-emoji-android": "2.0.0", "nodebb-plugin-emoji-android": "2.0.0",
"nodebb-plugin-markdown": "8.2.2", "nodebb-plugin-markdown": "8.2.2",
"nodebb-plugin-mentions": "2.2.2", "nodebb-plugin-mentions": "2.2.2",
"nodebb-plugin-soundpack-default": "1.0.0", "nodebb-plugin-soundpack-default": "1.0.0",
"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.7", "nodebb-theme-persona": "7.2.8",
"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.0",
"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.14",
"postcss-clean": "1.1.0", "postcss-clean": "1.1.0",
"promise-polyfill": "^6.0.2", "promise-polyfill": "^6.0.2",
"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.14.1",
"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",
"socket.io": "2.0.4", "socket.io": "2.0.4",
"socket.io-client": "2.0.4", "socket.io-client": "2.0.4",
"socket.io-redis": "5.2.0", "socket.io-redis": "5.2.0",
"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.1.5",
"validator": "9.1.2", "validator": "9.1.2",
"winston": "^2.4.0", "winston": "^2.4.0",
"xml": "^1.0.1", "xml": "^1.0.1",
"xregexp": "3.2.0", "xregexp": "3.2.0",
"zxcvbn": "^4.4.2" "zxcvbn": "^4.4.2"
}, },
"devDependencies": { "devDependencies": {
"coveralls": "^3.0.0", "coveralls": "^3.0.0",

@ -3,12 +3,12 @@
"custom-css.description": "Zadejte vlastní deklarace CSS, které budou použity na všechny ostatních styly.", "custom-css.description": "Zadejte vlastní deklarace CSS, které budou použity na všechny ostatních styly.",
"custom-css.enable": "Povolit uživatelské CSS", "custom-css.enable": "Povolit uživatelské CSS",
"custom-js": "Custom Javascript", "custom-js": "Uživatelský Javascript",
"custom-js.description": "Enter your own javascript here. It will be executed after the page is loaded completely.", "custom-js.description": "Zadejte zde váš javascriptový kód. Bude spuštěn, jakmile se stránka plně načte.",
"custom-js.enable": "Enable Custom Javascript", "custom-js.enable": "Povolit uživatelský Javascript",
"custom-header": "Uživatelská hlavička", "custom-header": "Uživatelská hlavička",
"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": "Zde zadejte uživatelské HTML (mimo Meta Tags, atd.), které bude připojeno k části značek <code>&lt;head&gt;</code> vašeho fóra.. Značky pro „script” jsou povoleny, ale nedoporučujeme je, neboť je dostupný <a href=\"#custom-header\" data-toggle=\"tab\">Uživatelský Javascript</a> .",
"custom-header.enable": "Povolit uživatelskou hlavičku", "custom-header.enable": "Povolit uživatelskou hlavičku",
"custom-css.livereload": "Povolit aktuální znovu načtení", "custom-css.livereload": "Povolit aktuální znovu načtení",

@ -7,5 +7,5 @@
"content": "Obsah", "content": "Obsah",
"posted": "Přidáno", "posted": "Přidáno",
"reply-to": "Odpovědět na \"%1\"", "reply-to": "Odpovědět na \"%1\"",
"content-editable": "You can click on individual content to edit before posting." "content-editable": "Kvůli úpravám a před odesláním příspěvku můžete klikat na obsah."
} }

@ -39,7 +39,7 @@
"section-appearance": "Vzhled", "section-appearance": "Vzhled",
"appearance/themes": "Motivy", "appearance/themes": "Motivy",
"appearance/skins": "Vzhledy", "appearance/skins": "Vzhledy",
"appearance/customise": "Custom Content (HTML/JS/CSS)", "appearance/customise": "Uživatelský obsah (HTML/JS/CSS)",
"section-extend": "Rozšířit", "section-extend": "Rozšířit",
"extend/plugins": "Rozšíření", "extend/plugins": "Rozšíření",
@ -65,7 +65,7 @@
"logout": "Odhlásit", "logout": "Odhlásit",
"view-forum": "Zobrazit fórum", "view-forum": "Zobrazit fórum",
"search.placeholder": "Search for settings", "search.placeholder": "Hledat nastavení",
"search.no-results": "Žádné výsledky…", "search.no-results": "Žádné výsledky…",
"search.search-forum": "Prohledat fórum pro <strong></strong>", "search.search-forum": "Prohledat fórum pro <strong></strong>",
"search.keep-typing": "Pište dále pro zobrazení výsledků…", "search.keep-typing": "Pište dále pro zobrazení výsledků…",

@ -2,5 +2,5 @@
"notifications": "Oznámení", "notifications": "Oznámení",
"welcome-notification": "Uvítání", "welcome-notification": "Uvítání",
"welcome-notification-link": "Odkaz na uvítání", "welcome-notification-link": "Odkaz na uvítání",
"welcome-notification-uid": "Welcome Notification User (UID)" "welcome-notification-uid": "Uvítání uživatele (UID)"
} }

@ -3,9 +3,9 @@
"enable": "Stránkovat témata a příspěvky namísto nekonečného posouvání", "enable": "Stránkovat témata a příspěvky namísto nekonečného posouvání",
"topics": "Stránkování témat", "topics": "Stránkování témat",
"posts-per-page": "Příspěvků na stránku", "posts-per-page": "Příspěvků na stránku",
"max-posts-per-page": "Maximum posts per page", "max-posts-per-page": "Maximální množství příspěvků na stránku",
"categories": "Stránkování kategorii", "categories": "Stránkování kategorii",
"topics-per-page": "Témat na stránku", "topics-per-page": "Témat na stránku",
"max-topics-per-page": "Maximum topics per page", "max-topics-per-page": "Maximální množství témat na stránku",
"initial-num-load": "Počáteční počet témat pro načtení u nepřečtených, posledních a polulárních" "initial-num-load": "Počáteční počet témat pro načtení u nepřečtených, posledních a polulárních"
} }

@ -3,8 +3,8 @@
"sorting.post-default": "Výchozí třídění příspěvků", "sorting.post-default": "Výchozí třídění příspěvků",
"sorting.oldest-to-newest": "Od nejstarších po nejnovější", "sorting.oldest-to-newest": "Od nejstarších po nejnovější",
"sorting.newest-to-oldest": "Od nejnovějších po nejstarší", "sorting.newest-to-oldest": "Od nejnovějších po nejstarší",
"sorting.most-votes": "Dle hlasování", "sorting.most-votes": "Dle počtu hlasů",
"sorting.most-posts": "Most Posts", "sorting.most-posts": "Dle počtu příspěvků",
"sorting.topic-default": "Výchozí třídění tématu", "sorting.topic-default": "Výchozí třídění tématu",
"restrictions": "Omezení příspěvků", "restrictions": "Omezení příspěvků",
"restrictions.post-queue": "Povolit frontu pro příspěvky", "restrictions.post-queue": "Povolit frontu pro příspěvky",

@ -19,8 +19,8 @@
"themes": "Motivy", "themes": "Motivy",
"disable-user-skins": "Zabránit uživateli ve výběru vlastního vzhledu", "disable-user-skins": "Zabránit uživateli ve výběru vlastního vzhledu",
"account-protection": "Ochrana účtu", "account-protection": "Ochrana účtu",
"admin-relogin-duration": "Admin relogin duration (minutes)", "admin-relogin-duration": "Doba pro opětovné přihlášení správce (minuty)",
"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": "Po nastavení počtu přístupu do správcovské části, bude vyžadováno opětovné přihlášení. Pro zakázání, nastavte na 0.",
"login-attempts": "Počet pokusů o přihlášení za hodinu", "login-attempts": "Počet pokusů o přihlášení za hodinu",
"login-attempts-help": "Překročí-li pokusy o přihlášení uživatele/ů tuto hranici, účet bude uzamknut na určený čas", "login-attempts-help": "Překročí-li pokusy o přihlášení uživatele/ů tuto hranici, účet bude uzamknut na určený čas",
"lockout-duration": "Délka blokování účtu (v minutách)", "lockout-duration": "Délka blokování účtu (v minutách)",

@ -30,7 +30,7 @@
"notif.chat.unsub.info": "Toto upozornění na chat vám bylo odesláno na základě vašeho nastavení odběru.", "notif.chat.unsub.info": "Toto upozornění na chat vám bylo odesláno na základě vašeho nastavení odběru.",
"notif.post.cta": "Klikněte zde pro přečtené celého tématu", "notif.post.cta": "Klikněte zde pro přečtené celého tématu",
"notif.post.unsub.info": "Toto upozornění na příspěvek vám bylo odesláno na základě vašeho nastavení odběru.", "notif.post.unsub.info": "Toto upozornění na příspěvek vám bylo odesláno na základě vašeho nastavení odběru.",
"notif.cta": "Click here to go to forum", "notif.cta": "Pro přejití na fórum, klikněte zde",
"test.text1": "Tento testovací e-mail slouží k ověření, že je e-mailer správně nastaven pro práci s NodeBB.", "test.text1": "Tento testovací e-mail slouží k ověření, že je e-mailer správně nastaven pro práci s NodeBB.",
"unsub.cta": "Chcete-li změnit tyto nastavení, klikněte zde.", "unsub.cta": "Chcete-li změnit tyto nastavení, klikněte zde.",
"banned.subject": "Byl jste zablokován od %1", "banned.subject": "Byl jste zablokován od %1",

@ -11,7 +11,7 @@
"invalid-uid": "Neplatné ID uživatele", "invalid-uid": "Neplatné ID uživatele",
"invalid-username": "Neplatné uživatelské jméno", "invalid-username": "Neplatné uživatelské jméno",
"invalid-email": "Neplatný e-mail", "invalid-email": "Neplatný e-mail",
"invalid-title": "Invalid title", "invalid-title": "Neplatný název",
"invalid-user-data": "Neplatná uživatelská data", "invalid-user-data": "Neplatná uživatelská data",
"invalid-password": "Neplatné heslo", "invalid-password": "Neplatné heslo",
"invalid-login-credentials": "Neplatné přihlašovací údaje", "invalid-login-credentials": "Neplatné přihlašovací údaje",
@ -81,7 +81,7 @@
"cant-ban-other-admins": "Nemůžete zablokovat jiné správce.", "cant-ban-other-admins": "Nemůžete zablokovat jiné správce.",
"cant-remove-last-admin": "Jste jediným správcem. Před vlastním odebráním oprávnění správce nejdříve přidejte jiného uživatele jako správce", "cant-remove-last-admin": "Jste jediným správcem. Před vlastním odebráním oprávnění správce nejdříve přidejte jiného uživatele jako správce",
"cant-delete-admin": "Před odstraněním účtu mu nejprve odeberte oprávnění správce.", "cant-delete-admin": "Před odstraněním účtu mu nejprve odeberte oprávnění správce.",
"invalid-image": "Invalid image", "invalid-image": "Neplatný obrázek",
"invalid-image-type": "Neplatný typ obrázku. Povolené typy jsou: %1", "invalid-image-type": "Neplatný typ obrázku. Povolené typy jsou: %1",
"invalid-image-extension": "Neplatná přípona obrázku", "invalid-image-extension": "Neplatná přípona obrázku",
"invalid-file-type": "Neplatný typ souboru. Povolené typy jsou: %1", "invalid-file-type": "Neplatný typ souboru. Povolené typy jsou: %1",
@ -119,13 +119,13 @@
"not-enough-reputation-to-downvote": "Nemáte dostatečnou reputaci pro vyjádření nesouhlasu u tohoto příspěvku", "not-enough-reputation-to-downvote": "Nemáte dostatečnou reputaci pro vyjádření nesouhlasu u tohoto příspěvku",
"not-enough-reputation-to-flag": "Pro označení tohoto příspěvku nemáte dostatečnou reputaci", "not-enough-reputation-to-flag": "Pro označení tohoto příspěvku nemáte dostatečnou reputaci",
"already-flagged": "Tento příspěvek jste již označil", "already-flagged": "Tento příspěvek jste již označil",
"self-vote": "You cannot vote on your own post", "self-vote": "U svého vlastního příspěvku nemůžete hlasovat",
"reload-failed": "Vyskytla se chyba v NodeBB při znovu načtení: \"%1\". NodeBB bude pokračovat v běhu na straně klienta, nicméně byste měl/a přenastavit zpět to, co jste udělal/a před opětovným načtením.", "reload-failed": "Vyskytla se chyba v NodeBB při znovu načtení: \"%1\". NodeBB bude pokračovat v běhu na straně klienta, nicméně byste měl/a přenastavit zpět to, co jste udělal/a před opětovným načtením.",
"registration-error": "Chyba při registraci", "registration-error": "Chyba při registraci",
"parse-error": "Při analýze odpovědi serveru nastala chyba", "parse-error": "Při analýze odpovědi serveru nastala chyba",
"wrong-login-type-email": "Pro přihlášení použijte vaši e-mailovou adresu", "wrong-login-type-email": "Pro přihlášení použijte vaši e-mailovou adresu",
"wrong-login-type-username": "Pro přihlášení použijte vaše uživatelské jméno", "wrong-login-type-username": "Pro přihlášení použijte vaše uživatelské jméno",
"sso-registration-disabled": "Registration has been disabled for %1 accounts, please register with an email address first", "sso-registration-disabled": "Registrace byla zakázána pro účty - %1. Nejprve si zaregistrujte e-mailovou adresu",
"invite-maximum-met": "Již jste pozval/a maximálně možný počet lidí (%1 z %2).", "invite-maximum-met": "Již jste pozval/a maximálně možný počet lidí (%1 z %2).",
"no-session-found": "Nebyla nalezena relace s přihlášením.", "no-session-found": "Nebyla nalezena relace s přihlášením.",
"not-in-room": "Uživatel není přítomen v místnosti", "not-in-room": "Uživatel není přítomen v místnosti",
@ -135,5 +135,5 @@
"invalid-home-page-route": "Neplatná cesta k domovské stránkce", "invalid-home-page-route": "Neplatná cesta k domovské stránkce",
"invalid-session": "Nesoulad v relacích", "invalid-session": "Nesoulad v relacích",
"invalid-session-text": "Zdá se, že vše relace s přihlášením již není aktivní nebo již neodpovídá s relací na serveru. Obnovte prosím tuto stránku.", "invalid-session-text": "Zdá se, že vše relace s přihlášením již není aktivní nebo již neodpovídá s relací na serveru. Obnovte prosím tuto stránku.",
"no-topics-selected": "No topics selected!" "no-topics-selected": "Žádná vybraná témata."
} }

@ -54,11 +54,11 @@
"modal-body": "Zadejte váš důvod k označení %1 %2 pro kontrolu. Nebo použijte tlačítko je-li dostupné.", "modal-body": "Zadejte váš důvod k označení %1 %2 pro kontrolu. Nebo použijte tlačítko je-li dostupné.",
"modal-reason-spam": "Spam", "modal-reason-spam": "Spam",
"modal-reason-offensive": "Urážlivé", "modal-reason-offensive": "Urážlivé",
"modal-reason-other": "Other (specify below)", "modal-reason-other": "Jiné (popište níže)",
"modal-reason-custom": "Důvod ohlášení tohoto obsahu…", "modal-reason-custom": "Důvod ohlášení tohoto obsahu…",
"modal-submit": "Předat hlášení", "modal-submit": "Předat hlášení",
"modal-submit-success": "Obsah byl označen pro moderaci.", "modal-submit-success": "Obsah byl označen pro moderaci.",
"modal-submit-confirm": "Confirm Submission", "modal-submit-confirm": "Potvrdit hlášení",
"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": "Již jste zadal/a nějaký důvod. Jste si jist/a, že chcete nahlásit pomocí rychlé zprávy?",
"modal-submit-confirm-text-help": "Submitting a quick report will overwrite any custom reasons defined." "modal-submit-confirm-text-help": "Zaslání rychlé zprávy přepíše jiné zadané důvody."
} }

@ -8,8 +8,8 @@
"outgoing_link_message": "Opouštíte %1", "outgoing_link_message": "Opouštíte %1",
"continue_to": "Pokračovat na %1", "continue_to": "Pokračovat na %1",
"return_to": "Vrátit se na %1", "return_to": "Vrátit se na %1",
"new_notification": "Nové upozornění", "new_notification": "Nové oznámení",
"new_notification_from": "You have a new Notification from %1", "new_notification_from": "Máte nové upozornění od %1",
"you_have_unread_notifications": "Máte nepřečtená upozornění.", "you_have_unread_notifications": "Máte nepřečtená upozornění.",
"all": "Vše", "all": "Vše",
"topics": "Témata", "topics": "Témata",
@ -47,18 +47,18 @@
"email-confirmed-message": "Děkujeme za ověření vaší e-mailové adresy. Váš účet je nyní aktivní.", "email-confirmed-message": "Děkujeme za ověření vaší e-mailové adresy. Váš účet je nyní aktivní.",
"email-confirm-error-message": "Nastal problém s ověřením vaší e-mailové adresy. Kód je pravděpodobně neplatný nebo jeho platnost vypršela.", "email-confirm-error-message": "Nastal problém s ověřením vaší e-mailové adresy. Kód je pravděpodobně neplatný nebo jeho platnost vypršela.",
"email-confirm-sent": "Ověřovací e-mail odeslán.", "email-confirm-sent": "Ověřovací e-mail odeslán.",
"none": "None", "none": "Nic",
"notification_only": "Notification Only", "notification_only": "Jen oznámení",
"email_only": "Email Only", "email_only": "Jen e-mail",
"notification_and_email": "Notification & Email", "notification_and_email": "Oznámení a e-mail",
"notificationType_upvote": "When someone upvotes your post", "notificationType_upvote": "Vyjádří-li někdo souhlas s vaším příspěvkem",
"notificationType_new-topic": "When someone you follow posts a topic", "notificationType_new-topic": "Začne-li někdo sledovat příspěvky a téma",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching", "notificationType_new-reply": "Bude-li přidán nový příspěvek v tématu, které sledujete",
"notificationType_follow": "When someone starts following you", "notificationType_follow": "Začne-li vás někdo sledovat",
"notificationType_new-chat": "When you receive a chat message", "notificationType_new-chat": "Obdržíte-li novou konverzační zprávu",
"notificationType_group-invite": "When you receive a group invite", "notificationType_group-invite": "Obdržíte-li pozvání ke skupině",
"notificationType_new-register": "When someone gets added to registration queue", "notificationType_new-register": "Bude-li někdo přidán do registrační fronty",
"notificationType_post-queue": "When a new post is queued", "notificationType_post-queue": "Bude-li přidán nový příspěvek do fronty",
"notificationType_new-post-flag": "When a post is flagged", "notificationType_new-post-flag": "Bude-li příspěvek označen",
"notificationType_new-user-flag": "When a user is flagged" "notificationType_new-user-flag": "Bude-li uživatel označen"
} }

@ -44,7 +44,7 @@
"account/bookmarks": "%1's zazáložkované příspěvky", "account/bookmarks": "%1's zazáložkované příspěvky",
"account/settings": "Uživatelské nastavení", "account/settings": "Uživatelské nastavení",
"account/watched": "Témata sledovaná uživatelem %1", "account/watched": "Témata sledovaná uživatelem %1",
"account/ignored": "Topics ignored by %1", "account/ignored": "Témata ignorovaná uživatelem %1",
"account/upvoted": "Souhlasí s příspěvkem %1", "account/upvoted": "Souhlasí s příspěvkem %1",
"account/downvoted": "Nesouhlasí s příspěvkem %1", "account/downvoted": "Nesouhlasí s příspěvkem %1",
"account/best": "Nejlepší příspěvky od %1", "account/best": "Nejlepší příspěvky od %1",

@ -68,8 +68,8 @@
"thread_tools.restore_confirm": "Jste si jist/a, že chcete toto téma obnovit?", "thread_tools.restore_confirm": "Jste si jist/a, že chcete toto téma obnovit?",
"thread_tools.purge": "Vyčistit téma", "thread_tools.purge": "Vyčistit téma",
"thread_tools.purge_confirm": "Jste si jist/a, že chcete vyčistit toto téma?", "thread_tools.purge_confirm": "Jste si jist/a, že chcete vyčistit toto téma?",
"thread_tools.merge_topics": "Merge Topics", "thread_tools.merge_topics": "Sloučit témata",
"thread_tools.merge": "Merge", "thread_tools.merge": "Sloučit",
"topic_move_success": "Toto téma bylo úspěšně přesunuto do %1", "topic_move_success": "Toto téma bylo úspěšně přesunuto do %1",
"post_delete_confirm": "Jste si jist/a, že chcete odstranit tento příspěvek?", "post_delete_confirm": "Jste si jist/a, že chcete odstranit tento příspěvek?",
"post_restore_confirm": "Jste si jist/a, že chcete obnovit tento příspěvek?", "post_restore_confirm": "Jste si jist/a, že chcete obnovit tento příspěvek?",
@ -91,7 +91,7 @@
"fork_pid_count": "Vybráno %1 příspěvek/ů", "fork_pid_count": "Vybráno %1 příspěvek/ů",
"fork_success": "Téma úspěšně rozděleno. Pro přejití na rozdělené téma, zde klikněte.", "fork_success": "Téma úspěšně rozděleno. Pro přejití na rozdělené téma, zde klikněte.",
"delete_posts_instruction": "Klikněte na příspěvek, který chcete odstranit/vyčistit", "delete_posts_instruction": "Klikněte na příspěvek, který chcete odstranit/vyčistit",
"merge_topics_instruction": "Click the topics you want to merge", "merge_topics_instruction": "Pro sloučení témat, klikněte na ně",
"composer.title_placeholder": "Zadejte název tématu…", "composer.title_placeholder": "Zadejte název tématu…",
"composer.handle_placeholder": "Jméno", "composer.handle_placeholder": "Jméno",
"composer.discard": "Zrušit", "composer.discard": "Zrušit",

@ -10,6 +10,6 @@
"all-topics": "Všechna témata", "all-topics": "Všechna témata",
"new-topics": "Nová témata", "new-topics": "Nová témata",
"watched-topics": "Sledovaná témata", "watched-topics": "Sledovaná témata",
"unreplied-topics": "Unreplied Topics", "unreplied-topics": "Neodpovězené témata",
"multiple-categories-selected": "Multiple Selected" "multiple-categories-selected": "Vícenásobný výběr"
} }

@ -25,7 +25,7 @@
"reputation": "Reputace", "reputation": "Reputace",
"bookmarks": "Záložky", "bookmarks": "Záložky",
"watched": "Sledován", "watched": "Sledován",
"ignored": "Ignored", "ignored": "Ignorován",
"followers": "Sledují ho", "followers": "Sledují ho",
"following": "Sleduje", "following": "Sleduje",
"aboutme": "O mně", "aboutme": "O mně",
@ -85,7 +85,7 @@
"has_no_posts": "Tento uživatel ještě nic nenapsal.", "has_no_posts": "Tento uživatel ještě nic nenapsal.",
"has_no_topics": "Tento uživatel ještě nezaložil žádné téma.", "has_no_topics": "Tento uživatel ještě nezaložil žádné téma.",
"has_no_watched_topics": "Tento uživatel zatím nesleduje žádná témata.", "has_no_watched_topics": "Tento uživatel zatím nesleduje žádná témata.",
"has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_ignored_topics": "Tento uživatel ještě neignoruje žádné témata.",
"has_no_upvoted_posts": "Tento uživatel zatím nevyjádřil souhlas u žádného příspěvku.", "has_no_upvoted_posts": "Tento uživatel zatím nevyjádřil souhlas u žádného příspěvku.",
"has_no_downvoted_posts": "Tento uživatel zatím nevyjádřil nesouhlas u žádného příspěvku.", "has_no_downvoted_posts": "Tento uživatel zatím nevyjádřil nesouhlas u žádného příspěvku.",
"has_no_voted_posts": "Tento uživatel nemá žádné hlasovací příspěvky", "has_no_voted_posts": "Tento uživatel nemá žádné hlasovací příspěvky",
@ -101,11 +101,11 @@
"outgoing-message-sound": "Zvuk odchozí zprávy", "outgoing-message-sound": "Zvuk odchozí zprávy",
"notification-sound": "Zvuk oznámení", "notification-sound": "Zvuk oznámení",
"no-sound": "Bez zvuku", "no-sound": "Bez zvuku",
"upvote-notif-freq": "Upvote Notification Frequency", "upvote-notif-freq": "Frekvence upozornění na souhlasy",
"upvote-notif-freq.all": "All Upvotes", "upvote-notif-freq.all": "Všechny souhlasy",
"upvote-notif-freq.everyTen": "Every Ten Upvotes", "upvote-notif-freq.everyTen": "Každý desátý souhlas",
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...", "upvote-notif-freq.logarithmic": "Dle 10, 100, 1000...",
"upvote-notif-freq.disabled": "Disabled", "upvote-notif-freq.disabled": "Zakázáno",
"browsing": "Nastavení prohlížení", "browsing": "Nastavení prohlížení",
"open_links_in_new_tab": "Otevřít odchozí odkaz v nové záložce", "open_links_in_new_tab": "Otevřít odchozí odkaz v nové záložce",
"enable_topic_searching": "Povolit vyhledávání v tématu", "enable_topic_searching": "Povolit vyhledávání v tématu",
@ -126,9 +126,9 @@
"sso.title": "Služby jednotného přihlášení", "sso.title": "Služby jednotného přihlášení",
"sso.associated": "Přiřazeno k", "sso.associated": "Přiřazeno k",
"sso.not-associated": "Zde klikněte pro přiřazení k", "sso.not-associated": "Zde klikněte pro přiřazení k",
"sso.dissociate": "Dissociate", "sso.dissociate": "Odloučit",
"sso.dissociate-confirm-title": "Confirm Dissociation", "sso.dissociate-confirm-title": "Potvrdit odloučení",
"sso.dissociate-confirm": "Are you sure you wish to dissociate your account from %1?", "sso.dissociate-confirm": "Jste si jist/a, že chcete odloučit váš účet z %1?",
"info.latest-flags": "Poslední označené", "info.latest-flags": "Poslední označené",
"info.no-flags": "Nebyly nalezeny žádné označené příspěvky", "info.no-flags": "Nebyly nalezeny žádné označené příspěvky",
"info.ban-history": "Poslední historie blokovaných", "info.ban-history": "Poslední historie blokovaných",

@ -3,9 +3,9 @@
"custom-css.description": "Entrez vos propres déclarations de CSS ici, elles seront appliquées après tous les autres styles.", "custom-css.description": "Entrez vos propres déclarations de CSS ici, elles seront appliquées après tous les autres styles.",
"custom-css.enable": "Activer les CSS personnalisés", "custom-css.enable": "Activer les CSS personnalisés",
"custom-js": "Custom Javascript", "custom-js": "Javascript personnalisé",
"custom-js.description": "Enter your own javascript here. It will be executed after the page is loaded completely.", "custom-js.description": "Entrez votre Javascript ici. Celui-ci sera exécute après le chargement complet de la page.",
"custom-js.enable": "Enable Custom Javascript", "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": "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.",

@ -13,7 +13,7 @@
"reset.text1": "Abbiamo ricevuto una richiesta di reset della tua password, probabilmente perché l'hai dimenticata. Se non è così si prega di ignorare questa email.", "reset.text1": "Abbiamo ricevuto una richiesta di reset della tua password, probabilmente perché l'hai dimenticata. Se non è così si prega di ignorare questa email.",
"reset.text2": "Per confermare il reset della password per favore clicca il seguente link:", "reset.text2": "Per confermare il reset della password per favore clicca il seguente link:",
"reset.cta": "Clicca qui per resettare la tua password", "reset.cta": "Clicca qui per resettare la tua password",
"reset.notify.subject": "Possword modificata con successo.", "reset.notify.subject": "Password modificata con successo.",
"reset.notify.text1": "Ti informiamo che in data %1, la password è stata cambiata con successo.", "reset.notify.text1": "Ti informiamo che in data %1, la password è stata cambiata con successo.",
"reset.notify.text2": "Se non hai autorizzato questo, per favore notifica immediatamente un amministratore.", "reset.notify.text2": "Se non hai autorizzato questo, per favore notifica immediatamente un amministratore.",
"digest.notifications": "Hai una notifica non letta da %1:", "digest.notifications": "Hai una notifica non letta da %1:",
@ -33,9 +33,9 @@
"notif.cta": "Vai alla discussione", "notif.cta": "Vai alla discussione",
"test.text1": "Questa è una email di test per verificare che il servizio di invio email è configurato correttamente sul tuo NodeBB.", "test.text1": "Questa è una email di test per verificare che il servizio di invio email è configurato correttamente sul tuo NodeBB.",
"unsub.cta": "Clicca qui per modificare queste impostazioni", "unsub.cta": "Clicca qui per modificare queste impostazioni",
"banned.subject": "You have been banned from %1", "banned.subject": "Sei stato bannato da %1",
"banned.text1": "The user %1 has been banned from %2.", "banned.text1": "%1 è stato bannato da %2",
"banned.text2": "This ban will last until %1.", "banned.text2": "Questo ban durerà fino a %1.",
"banned.text3": "This is the reason why you have been banned:", "banned.text3": "Il motivo del ban è:",
"closing": "Grazie!" "closing": "Grazie!"
} }

@ -11,10 +11,10 @@
"invalid-uid": "ID Utente non valido", "invalid-uid": "ID Utente non valido",
"invalid-username": "Nome utente non valido", "invalid-username": "Nome utente non valido",
"invalid-email": "Email non valida", "invalid-email": "Email non valida",
"invalid-title": "Invalid title", "invalid-title": "Titolo non Valido",
"invalid-user-data": "Dati Utente non validi", "invalid-user-data": "Dati Utente non validi",
"invalid-password": "Password non valida", "invalid-password": "Password non valida",
"invalid-login-credentials": "Invalid login credentials", "invalid-login-credentials": "Credenziali non Valide",
"invalid-username-or-password": "Si prega di specificare sia un nome utente che una password", "invalid-username-or-password": "Si prega di specificare sia un nome utente che una password",
"invalid-search-term": "Termine di ricerca non valido", "invalid-search-term": "Termine di ricerca non valido",
"csrf-invalid": "Non siamo riusciti a farti connettere, probabilmente perché la sessione è scaduta. Per favore riprova.", "csrf-invalid": "Non siamo riusciti a farti connettere, probabilmente perché la sessione è scaduta. Per favore riprova.",
@ -66,7 +66,7 @@
"content-too-long": "Inserisci un post più breve. I post non possono essere più lunghi di %1 caratteri.", "content-too-long": "Inserisci un post più breve. I post non possono essere più lunghi di %1 caratteri.",
"title-too-short": "Inserisci un titolo più lungo. I titoli devono contenere almeno %1 caratteri.", "title-too-short": "Inserisci un titolo più lungo. I titoli devono contenere almeno %1 caratteri.",
"title-too-long": "Inserisci un titolo più corto. I titoli non possono essere più lunghi di %1 caratteri.", "title-too-long": "Inserisci un titolo più corto. I titoli non possono essere più lunghi di %1 caratteri.",
"category-not-selected": "Category not selected.", "category-not-selected": "Categoria non selezionata.",
"too-many-posts": "È possibile inserire un Post ogni %1 secondi - si prega di attendere prima di postare di nuovo", "too-many-posts": "È possibile inserire un Post ogni %1 secondi - si prega di attendere prima di postare di nuovo",
"too-many-posts-newbie": "Come nuovo utente puoi postare solamente una volta ogni %1 secondi finché non hai raggiunto un livello di reputazione %2 - per favore attendi prima di scrivere ancora", "too-many-posts-newbie": "Come nuovo utente puoi postare solamente una volta ogni %1 secondi finché non hai raggiunto un livello di reputazione %2 - per favore attendi prima di scrivere ancora",
"tag-too-short": "Inserisci un tag più lungo. I tag devono contenere almeno %1 caratteri.", "tag-too-short": "Inserisci un tag più lungo. I tag devono contenere almeno %1 caratteri.",
@ -76,12 +76,12 @@
"still-uploading": "Per favore attendere il completamento degli uploads.", "still-uploading": "Per favore attendere il completamento degli uploads.",
"file-too-big": "La dimensione massima consentita è di %1 kB - si prega di caricare un file più piccolo", "file-too-big": "La dimensione massima consentita è di %1 kB - si prega di caricare un file più piccolo",
"guest-upload-disabled": "Il caricamento da ospite è stato disattivato", "guest-upload-disabled": "Il caricamento da ospite è stato disattivato",
"already-bookmarked": "You have already bookmarked this post", "already-bookmarked": "Hai già aggiunto questa discussione ai preferiti.",
"already-unbookmarked": "You have already unbookmarked this post", "already-unbookmarked": "Hai già rimosso questa discussione dai preferiti",
"cant-ban-other-admins": "Non puoi bannare altri amministratori!", "cant-ban-other-admins": "Non puoi bannare altri amministratori!",
"cant-remove-last-admin": "Sei l'unico Amministratore. Aggiungi un altro amministratore prima di rimuovere il tuo ruolo", "cant-remove-last-admin": "Sei l'unico Amministratore. Aggiungi un altro amministratore prima di rimuovere il tuo ruolo",
"cant-delete-admin": "Togli i privilegi amministrativi da questo account prima di provare ad eliminarlo.", "cant-delete-admin": "Togli i privilegi amministrativi da questo account prima di provare ad eliminarlo.",
"invalid-image": "Invalid image", "invalid-image": "Immagine non Valida",
"invalid-image-type": "Tipo dell'immagine non valido. I tipi permessi sono: %1", "invalid-image-type": "Tipo dell'immagine non valido. I tipi permessi sono: %1",
"invalid-image-extension": "Estensione immagine non valida", "invalid-image-extension": "Estensione immagine non valida",
"invalid-file-type": "Tipo di file non valido. I formati consentiti sono: %1", "invalid-file-type": "Tipo di file non valido. I formati consentiti sono: %1",
@ -109,7 +109,7 @@
"chat-disabled": "Il sistema di chat è stato disabilitato", "chat-disabled": "Il sistema di chat è stato disabilitato",
"too-many-messages": "Hai inviato troppi messaggi, aspetta un attimo.", "too-many-messages": "Hai inviato troppi messaggi, aspetta un attimo.",
"invalid-chat-message": "Messaggio chat non valido", "invalid-chat-message": "Messaggio chat non valido",
"chat-message-too-long": "Chat messages can not be longer than %1 characters.", "chat-message-too-long": "I messaggi in chat non possono superare i %1 caratteri.",
"cant-edit-chat-message": "Non ti è permesso di modificare questo messaggio", "cant-edit-chat-message": "Non ti è permesso di modificare questo messaggio",
"cant-remove-last-user": "Non puoi rimuovere l'ultimo utente", "cant-remove-last-user": "Non puoi rimuovere l'ultimo utente",
"cant-delete-chat-message": "Non ti è permesso di eliminare questo messaggio", "cant-delete-chat-message": "Non ti è permesso di eliminare questo messaggio",
@ -119,7 +119,7 @@
"not-enough-reputation-to-downvote": "Non hai i privilegi per votare negativamente questo post", "not-enough-reputation-to-downvote": "Non hai i privilegi per votare negativamente questo post",
"not-enough-reputation-to-flag": "Tu non hai abbastanza reputazione per segnalare questo Post", "not-enough-reputation-to-flag": "Tu non hai abbastanza reputazione per segnalare questo Post",
"already-flagged": "Hai già messo marcato questo post", "already-flagged": "Hai già messo marcato questo post",
"self-vote": "You cannot vote on your own post", "self-vote": "Non puoi votare la tua stessa discussione",
"reload-failed": "NodeBB ha incontrato un problema durante il ricaricamento: \"%1\". NodeBB continuerà a servire gli assets esistenti lato client, così puoi annullare quello che hai fatto prima di ricaricare.", "reload-failed": "NodeBB ha incontrato un problema durante il ricaricamento: \"%1\". NodeBB continuerà a servire gli assets esistenti lato client, così puoi annullare quello che hai fatto prima di ricaricare.",
"registration-error": "Errore nella registrazione", "registration-error": "Errore nella registrazione",
"parse-error": "Qualcosa è andato storto durante l'analisi della risposta proveniente dal server", "parse-error": "Qualcosa è andato storto durante l'analisi della risposta proveniente dal server",
@ -135,5 +135,5 @@
"invalid-home-page-route": "Percorso della pagina iniziale non valido", "invalid-home-page-route": "Percorso della pagina iniziale non valido",
"invalid-session": "Discrepanza della sessione", "invalid-session": "Discrepanza della sessione",
"invalid-session-text": "Sembra che la tua sessione non sia più attiva, oppure non corrisponde con il server. Per favore ricarica la pagina.", "invalid-session-text": "Sembra che la tua sessione non sia più attiva, oppure non corrisponde con il server. Per favore ricarica la pagina.",
"no-topics-selected": "No topics selected!" "no-topics-selected": "Nessuna discussione selezionata!"
} }

@ -27,12 +27,12 @@
"quick-links": "Quick Links", "quick-links": "Quick Links",
"flagged-user": "Flagged User", "flagged-user": "Flagged User",
"view-profile": "View Profile", "view-profile": "Vedi Profilo",
"start-new-chat": "Start New Chat", "start-new-chat": "Start New Chat",
"go-to-target": "View Flag Target", "go-to-target": "View Flag Target",
"user-view": "View Profile", "user-view": "Vedi Profilo",
"user-edit": "Edit Profile", "user-edit": "Modifica Profilo",
"notes": "Flag Notes", "notes": "Flag Notes",
"add-note": "Add Note", "add-note": "Add Note",
@ -44,21 +44,21 @@
"state-all": "All states", "state-all": "All states",
"state-open": "New/Open", "state-open": "New/Open",
"state-wip": "Work in Progress", "state-wip": "Lavori in Corso",
"state-resolved": "Resolved", "state-resolved": "Risolto",
"state-rejected": "Rejected", "state-rejected": "Rejected",
"no-assignee": "Not Assigned", "no-assignee": "Non Assegnato",
"note-added": "Note Added", "note-added": "Note Added",
"modal-title": "Report Inappropriate Content", "modal-title": "Segnala Contenuto Inappropriato",
"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": "Offensivo",
"modal-reason-other": "Other (specify below)", "modal-reason-other": "Altro (Specificare di seguito)",
"modal-reason-custom": "Reason for reporting this content...", "modal-reason-custom": "Motivazione della segnalazione...",
"modal-submit": "Submit Report", "modal-submit": "Invia la Segnalazione",
"modal-submit-success": "Content has been flagged for moderation.", "modal-submit-success": "Il contenuto è stato segnalato.",
"modal-submit-confirm": "Confirm Submission", "modal-submit-confirm": "Conferma la Segnalazione",
"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": "You have a custom reason specified already. Are you sure you wish to submit via quick-report?",
"modal-submit-confirm-text-help": "Submitting a quick report will overwrite any custom reasons defined." "modal-submit-confirm-text-help": "Submitting a quick report will overwrite any custom reasons defined."
} }

@ -104,6 +104,6 @@
"cookies.accept": "Ho capito!", "cookies.accept": "Ho capito!",
"cookies.learn_more": "Scopri di più", "cookies.learn_more": "Scopri di più",
"edited": "Modificato", "edited": "Modificato",
"disabled": "Disabled", "disabled": "Disabilitato",
"select": "Select" "select": "Seleziona"
} }

@ -27,7 +27,7 @@
"details.disableJoinRequests": "Disabilita le richieste d'adesione", "details.disableJoinRequests": "Disabilita le richieste d'adesione",
"details.grant": "Concedi / Rimuovi la Proprietà", "details.grant": "Concedi / Rimuovi la Proprietà",
"details.kick": "Espelli", "details.kick": "Espelli",
"details.kick_confirm": "Are you sure you want to remove this member from the group?", "details.kick_confirm": "Sei sicuro di voler rimuovere questo membro dal gruppo?",
"details.owner_options": "Amministratore del Grupo", "details.owner_options": "Amministratore del Grupo",
"details.group_name": "Nome Gruppo", "details.group_name": "Nome Gruppo",
"details.member_count": "Totale Membri", "details.member_count": "Totale Membri",
@ -53,6 +53,6 @@
"new-group.group_name": "Nome Gruppo:", "new-group.group_name": "Nome Gruppo:",
"upload-group-cover": "Carica copertina del gruppo", "upload-group-cover": "Carica copertina del gruppo",
"bulk-invite-instructions": "Inserisci una lista di nomi utente da invitare in questo gruppo separati da virgole", "bulk-invite-instructions": "Inserisci una lista di nomi utente da invitare in questo gruppo separati da virgole",
"bulk-invite": "Bulk Invite", "bulk-invite": "Invita in Massa",
"remove_group_cover_confirm": "Sei sicuro di voler rimuovere l'immagine copertina?" "remove_group_cover_confirm": "Sei sicuro di voler rimuovere l'immagine copertina?"
} }

@ -20,7 +20,7 @@
"chat.three_months": "3 Mesi", "chat.three_months": "3 Mesi",
"chat.delete_message_confirm": "Sei sicuro di voler eliminare questo messaggio?", "chat.delete_message_confirm": "Sei sicuro di voler eliminare questo messaggio?",
"chat.add-users-to-room": "Aggiungi utenti alla stanza", "chat.add-users-to-room": "Aggiungi utenti alla stanza",
"chat.confirm-chat-with-dnd-user": "This user has set their status to DnD(Do not disturb). Do you still want to chat with them?", "chat.confirm-chat-with-dnd-user": "Questo utente ha impostato il suo stato su Non Disturbare. Sei sicuro di voler iniziare una conversazione?",
"composer.compose": "Componi", "composer.compose": "Componi",
"composer.show_preview": "Visualizza Anteprima", "composer.show_preview": "Visualizza Anteprima",
"composer.hide_preview": "Nascondi Anteprima", "composer.hide_preview": "Nascondi Anteprima",

@ -29,9 +29,9 @@
"user_flagged_post_in": "<strong>%1</strong> ha segnalato un post in <strong>%2</strong>", "user_flagged_post_in": "<strong>%1</strong> ha segnalato un post in <strong>%2</strong>",
"user_flagged_post_in_dual": "<strong>%1</strong> e <strong>%2</strong> hanno segnalato un post in <strong>%3</strong>", "user_flagged_post_in_dual": "<strong>%1</strong> e <strong>%2</strong> hanno segnalato un post in <strong>%3</strong>",
"user_flagged_post_in_multiple": "<strong>%1</strong> ed altri %2 hanno segnalato un post in <strong>%3</strong>", "user_flagged_post_in_multiple": "<strong>%1</strong> ed altri %2 hanno segnalato un post in <strong>%3</strong>",
"user_flagged_user": "<strong>%1</strong> flagged a user profile (%2)", "user_flagged_user": "<strong>%1</strong> ha segnalato un utente (%2)",
"user_flagged_user_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a user profile (%3)", "user_flagged_user_dual": "<strong>%1</strong> e <strong>%2</strong> hanno segnalato un utente (%3)",
"user_flagged_user_multiple": "<strong>%1</strong> and %2 others flagged a user profile (%3)", "user_flagged_user_multiple": "<strong>%1</strong> e altri %2 hanno segnalato un utente (%3)",
"user_posted_to": "<strong>%1</strong> ha postato una risposta a: <strong>%2</strong>", "user_posted_to": "<strong>%1</strong> ha postato una risposta a: <strong>%2</strong>",
"user_posted_to_dual": "<strong>%1</strong> e <strong>%2</strong> hanno postato una risposta su: <strong>%3</strong>", "user_posted_to_dual": "<strong>%1</strong> e <strong>%2</strong> hanno postato una risposta su: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> ed altri %2 hanno postato una risposta su: <strong>%3</strong>", "user_posted_to_multiple": "<strong>%1</strong> ed altri %2 hanno postato una risposta su: <strong>%3</strong>",
@ -42,23 +42,23 @@
"new_register": "<strong>%1</strong> ha inviato una richiesta di registrazione.", "new_register": "<strong>%1</strong> ha inviato una richiesta di registrazione.",
"new_register_multiple": "Ci sono <strong>%1</strong> richieste di registrazione che attendono di essere esaminate.", "new_register_multiple": "Ci sono <strong>%1</strong> richieste di registrazione che attendono di essere esaminate.",
"flag_assigned_to_you": "<strong>Flag %1</strong> has been assigned to you", "flag_assigned_to_you": "<strong>Flag %1</strong> has been assigned to you",
"post_awaiting_review": "Post awaiting review", "post_awaiting_review": "Post in attesa di revisione",
"email-confirmed": "Email Confermata", "email-confirmed": "Email Confermata",
"email-confirmed-message": "Grazie per aver validato la tua email. Il tuo account è ora completamente attivato.", "email-confirmed-message": "Grazie per aver validato la tua email. Il tuo account è ora completamente attivato.",
"email-confirm-error-message": "C'è stato un problema nella validazione del tuo indirizzo email. Potrebbe essere il codice non valido o scaduto.", "email-confirm-error-message": "C'è stato un problema nella validazione del tuo indirizzo email. Potrebbe essere il codice non valido o scaduto.",
"email-confirm-sent": "Email di conferma inviata.", "email-confirm-sent": "Email di conferma inviata.",
"none": "None", "none": "Nessuna Notifica",
"notification_only": "Notification Only", "notification_only": "Solo Notifiche",
"email_only": "Email Only", "email_only": "Solo Email",
"notification_and_email": "Notification & Email", "notification_and_email": "Email e Notifica",
"notificationType_upvote": "When someone upvotes your post", "notificationType_upvote": "Quando il tuo post riceve un Mi Piace",
"notificationType_new-topic": "When someone you follow posts a topic", "notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching", "notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_follow": "When someone starts following you", "notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message", "notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite", "notificationType_group-invite": "When you receive a group invite",
"notificationType_new-register": "When someone gets added to registration queue", "notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued", "notificationType_post-queue": "Quando un nuovo post è in attesa di revisione",
"notificationType_new-post-flag": "When a post is flagged", "notificationType_new-post-flag": "Quando un post viene segnalato",
"notificationType_new-user-flag": "When a user is flagged" "notificationType_new-user-flag": "Quando un utente viene segnalato"
} }

@ -7,7 +7,7 @@
"popular-alltime": "Discussioni più popolari di sempre", "popular-alltime": "Discussioni più popolari di sempre",
"recent": "Discussioni Recenti", "recent": "Discussioni Recenti",
"moderator-tools": "Moderator Tools", "moderator-tools": "Moderator Tools",
"flagged-content": "Flagged Content", "flagged-content": "Contenuti Segnalati",
"ip-blacklist": "Lista nera degli IP", "ip-blacklist": "Lista nera degli IP",
"post-queue": "Post Queue", "post-queue": "Post Queue",
"users/online": "Utenti Online", "users/online": "Utenti Online",
@ -44,7 +44,7 @@
"account/bookmarks": "%1 Post tra i favoriti", "account/bookmarks": "%1 Post tra i favoriti",
"account/settings": "Impostazioni Utente", "account/settings": "Impostazioni Utente",
"account/watched": "Discussioni osservate da %1", "account/watched": "Discussioni osservate da %1",
"account/ignored": "Topics ignored by %1", "account/ignored": "Discussioni ignorate da %1",
"account/upvoted": "Post apprezzati da %1", "account/upvoted": "Post apprezzati da %1",
"account/downvoted": "Post votati negativamente da %1", "account/downvoted": "Post votati negativamente da %1",
"account/best": "I migliori post di %1", "account/best": "I migliori post di %1",

@ -1,5 +1,5 @@
{ {
"register": "Registrazione", "register": "Registrati",
"cancel_registration": "Cancella Registrazione", "cancel_registration": "Cancella Registrazione",
"help.email": "Come opzione predefinita, il tuo indirizzo email non verrà reso pubblico.", "help.email": "Come opzione predefinita, il tuo indirizzo email non verrà reso pubblico.",
"help.username_restrictions": "Un nome utente unico, di almeno %1 caratteri e al massimo di %2. Gli altri utenti ti possono menzionare usando @<span id='yourUsername'>username</span>.", "help.username_restrictions": "Un nome utente unico, di almeno %1 caratteri e al massimo di %2. Gli altri utenti ti possono menzionare usando @<span id='yourUsername'>username</span>.",

@ -12,7 +12,7 @@
"reply-count": "Numero Risposte", "reply-count": "Numero Risposte",
"at-least": "Almeno", "at-least": "Almeno",
"at-most": "Al massimo", "at-most": "Al massimo",
"relevance": "Relevance", "relevance": "Rilevanza",
"post-time": "Ora invio", "post-time": "Ora invio",
"newer-than": "Più nuovi di", "newer-than": "Più nuovi di",
"older-than": "Più vecchi di", "older-than": "Più vecchi di",

@ -1,7 +1,7 @@
{ {
"success": "Riuscito", "success": "Riuscito",
"topic-post": "Hai postato correttamente.", "topic-post": "Hai postato correttamente.",
"post-queued": "Your post is queued for approval.", "post-queued": "La tua discussione è in attesa di approvazione.",
"authentication-successful": "Autenticazione Riuscita", "authentication-successful": "Autenticazione Riuscita",
"settings-saved": "Impostazioni salvate!" "settings-saved": "Impostazioni salvate!"
} }

@ -13,9 +13,9 @@
"notify_me": "Ricevi notifiche di nuove risposte in questa discussione", "notify_me": "Ricevi notifiche di nuove risposte in questa discussione",
"quote": "Cita", "quote": "Cita",
"reply": "Rispondi", "reply": "Rispondi",
"replies_to_this_post": "%1 Replies", "replies_to_this_post": "%1 Risposte",
"one_reply_to_this_post": "1 Reply", "one_reply_to_this_post": "1 Risposta",
"last_reply_time": "Last reply", "last_reply_time": "Ultima Risposta",
"reply-as-topic": "Topic risposta", "reply-as-topic": "Topic risposta",
"guest-login-reply": "Effettua il Log in per rispondere", "guest-login-reply": "Effettua il Log in per rispondere",
"edit": "Modifica", "edit": "Modifica",
@ -59,7 +59,7 @@
"thread_tools.unlock": "Sblocca Discussione", "thread_tools.unlock": "Sblocca Discussione",
"thread_tools.move": "Sposta Discussione", "thread_tools.move": "Sposta Discussione",
"thread_tools.move_all": "Sposta Tutto", "thread_tools.move_all": "Sposta Tutto",
"thread_tools.select_category": "Select Category", "thread_tools.select_category": "Seleziona Categoria",
"thread_tools.fork": "Dividi Discussione", "thread_tools.fork": "Dividi Discussione",
"thread_tools.delete": "Elimina Discussione", "thread_tools.delete": "Elimina Discussione",
"thread_tools.delete-posts": "Cancella post", "thread_tools.delete-posts": "Cancella post",
@ -68,8 +68,8 @@
"thread_tools.restore_confirm": "Sei sicuro di voler ripristinare questa discussione?", "thread_tools.restore_confirm": "Sei sicuro di voler ripristinare questa discussione?",
"thread_tools.purge": "Svuota Discussione", "thread_tools.purge": "Svuota Discussione",
"thread_tools.purge_confirm": "Sei sicuro di voler svuotare questa discussione?", "thread_tools.purge_confirm": "Sei sicuro di voler svuotare questa discussione?",
"thread_tools.merge_topics": "Merge Topics", "thread_tools.merge_topics": "Unisci le Discussioni",
"thread_tools.merge": "Merge", "thread_tools.merge": "Unisci",
"topic_move_success": "Questa discussione è stata correttamente spostata in %1", "topic_move_success": "Questa discussione è stata correttamente spostata in %1",
"post_delete_confirm": "Sei sicuro di voler cancellare questo post?", "post_delete_confirm": "Sei sicuro di voler cancellare questo post?",
"post_restore_confirm": "Sei sicuro di voler ripristinare questo post?", "post_restore_confirm": "Sei sicuro di voler ripristinare questo post?",
@ -91,7 +91,7 @@
"fork_pid_count": "%1 post selezionati", "fork_pid_count": "%1 post selezionati",
"fork_success": "Topic Diviso con successo ! Clicca qui per andare al Topic Diviso.", "fork_success": "Topic Diviso con successo ! Clicca qui per andare al Topic Diviso.",
"delete_posts_instruction": "Clicca sui post che vuoi cancellare/eliminare", "delete_posts_instruction": "Clicca sui post che vuoi cancellare/eliminare",
"merge_topics_instruction": "Click the topics you want to merge", "merge_topics_instruction": "Clicca sulle discussioni che vuoi unire",
"composer.title_placeholder": "Inserisci qui il titolo della discussione...", "composer.title_placeholder": "Inserisci qui il titolo della discussione...",
"composer.handle_placeholder": "Nome", "composer.handle_placeholder": "Nome",
"composer.discard": "Annulla", "composer.discard": "Annulla",

@ -10,6 +10,6 @@
"all-topics": "Tutte le Discussioni", "all-topics": "Tutte le Discussioni",
"new-topics": "Nuova Discussione", "new-topics": "Nuova Discussione",
"watched-topics": "Discussioni seguite", "watched-topics": "Discussioni seguite",
"unreplied-topics": "Nessuna Risposta", "unreplied-topics": "Discussioni Senza Risposta",
"multiple-categories-selected": "Multiple Selected" "multiple-categories-selected": "Più Categorie"
} }

@ -19,13 +19,13 @@
"location": "Località", "location": "Località",
"age": "Età", "age": "Età",
"joined": "Iscrizione", "joined": "Iscrizione",
"lastonline": "Ultima volta in linea", "lastonline": "Ultimo Accesso",
"profile": "Profilo", "profile": "Profilo",
"profile_views": "Visite al profilo", "profile_views": "Visite al profilo",
"reputation": "Reputazione", "reputation": "Reputazione",
"bookmarks": "Favoriti", "bookmarks": "Preferiti",
"watched": "Osservati", "watched": "Osservati",
"ignored": "Ignored", "ignored": "Ignorati",
"followers": "Da chi è seguito", "followers": "Da chi è seguito",
"following": "Chi segue", "following": "Chi segue",
"aboutme": "Su di me", "aboutme": "Su di me",
@ -61,7 +61,7 @@
"username_taken_workaround": "Il nome utente che hai richiesto era già stato utilizzato, quindi lo abbiamo modificato leggermente. Ora il tuo è <strong>%1</strong>", "username_taken_workaround": "Il nome utente che hai richiesto era già stato utilizzato, quindi lo abbiamo modificato leggermente. Ora il tuo è <strong>%1</strong>",
"password_same_as_username": "La tua password è uguale al tuo username, per piacere scegli un'altra password", "password_same_as_username": "La tua password è uguale al tuo username, per piacere scegli un'altra password",
"password_same_as_email": "La tua password sembra coincidere con la tua email, per favore fornisci un'altra password.", "password_same_as_email": "La tua password sembra coincidere con la tua email, per favore fornisci un'altra password.",
"weak_password": "Weak password.", "weak_password": "Password debole.",
"upload_picture": "Carica foto", "upload_picture": "Carica foto",
"upload_a_picture": "Carica una foto", "upload_a_picture": "Carica una foto",
"remove_uploaded_picture": "Elimina foto caricata", "remove_uploaded_picture": "Elimina foto caricata",
@ -85,7 +85,7 @@
"has_no_posts": "Questo utente non ha ancora scritto niente.", "has_no_posts": "Questo utente non ha ancora scritto niente.",
"has_no_topics": "Questo utente non ha ancora avviato discussioni.", "has_no_topics": "Questo utente non ha ancora avviato discussioni.",
"has_no_watched_topics": "Questo utente non sta osservando discussioni.", "has_no_watched_topics": "Questo utente non sta osservando discussioni.",
"has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_ignored_topics": "Questo utente non sta ignorando discussioni.",
"has_no_upvoted_posts": "Questo utente non ha ancora apprezzato nessun post.", "has_no_upvoted_posts": "Questo utente non ha ancora apprezzato nessun post.",
"has_no_downvoted_posts": "Questo utente non ha ancora votato negativamente alcun post", "has_no_downvoted_posts": "Questo utente non ha ancora votato negativamente alcun post",
"has_no_voted_posts": "Questo utente non ha post votati", "has_no_voted_posts": "Questo utente non ha post votati",
@ -94,18 +94,18 @@
"paginate_description": "Non utilizzare lo scroll infinito per discussioni e messaggi", "paginate_description": "Non utilizzare lo scroll infinito per discussioni e messaggi",
"topics_per_page": "Discussioni per Pagina", "topics_per_page": "Discussioni per Pagina",
"posts_per_page": "Post per Pagina", "posts_per_page": "Post per Pagina",
"max_items_per_page": "Maximum %1", "max_items_per_page": "Massimo %1",
"notification_sounds": "Riproduci un suono quando si riceve una notifica", "notification_sounds": "Riproduci un suono quando si riceve una notifica",
"notifications_and_sounds": "Notifiche e Suoni", "notifications_and_sounds": "Notifiche e Suoni",
"incoming-message-sound": "Suono messaggio in entrata", "incoming-message-sound": "Suono messaggio in entrata",
"outgoing-message-sound": "Suono messaggio in uscita", "outgoing-message-sound": "Suono messaggio in uscita",
"notification-sound": "Suono di notifica", "notification-sound": "Suono di notifica",
"no-sound": "Nessun suono", "no-sound": "Nessun suono",
"upvote-notif-freq": "Upvote Notification Frequency", "upvote-notif-freq": "Frequenza Notifiche dei Mi Piace ",
"upvote-notif-freq.all": "All Upvotes", "upvote-notif-freq.all": "Tutti i Mi Piace",
"upvote-notif-freq.everyTen": "Every Ten Upvotes", "upvote-notif-freq.everyTen": "Ogni Dieci Mi Piace",
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...", "upvote-notif-freq.logarithmic": "Ogni 10, 100, 1000...",
"upvote-notif-freq.disabled": "Disabled", "upvote-notif-freq.disabled": "Disabilitate",
"browsing": "Impostazioni di Navigazione", "browsing": "Impostazioni di Navigazione",
"open_links_in_new_tab": "Apri i link web in una nuova pagina", "open_links_in_new_tab": "Apri i link web in una nuova pagina",
"enable_topic_searching": "Abilita la ricerca negli argomenti", "enable_topic_searching": "Abilita la ricerca negli argomenti",

@ -18,7 +18,7 @@
"reset.notify.text2": "Neem onmiddellijk contact met een beheerder op wanneer je hiervoor geen toestemming hebt gegeven.", "reset.notify.text2": "Neem onmiddellijk contact met een beheerder op wanneer je hiervoor geen toestemming hebt gegeven.",
"digest.notifications": "Er zijn ongelezen notificaties van %1:", "digest.notifications": "Er zijn ongelezen notificaties van %1:",
"digest.latest_topics": "De meest recente onderwerpen van %1", "digest.latest_topics": "De meest recente onderwerpen van %1",
"digest.cta": "Klik hier om deze website te bezoeken %1 ", "digest.cta": "Klik hier om %1 te bezoeken ",
"digest.unsub.info": "Deze samenvatting hebben we naar je verzonden omdat je dat hebt ingesteld.", "digest.unsub.info": "Deze samenvatting hebben we naar je verzonden omdat je dat hebt ingesteld.",
"digest.no_topics": "In de afgelopen %1 zijn er geen actieve onderwerpen geweest.", "digest.no_topics": "In de afgelopen %1 zijn er geen actieve onderwerpen geweest.",
"digest.day": "dag", "digest.day": "dag",
@ -30,7 +30,7 @@
"notif.chat.unsub.info": "Deze notificatie is verzonden vanwege de gebruikersinstellingen voor abonnementen.", "notif.chat.unsub.info": "Deze notificatie is verzonden vanwege de gebruikersinstellingen voor abonnementen.",
"notif.post.cta": "Klik hier om het volledige bericht te lezen", "notif.post.cta": "Klik hier om het volledige bericht te lezen",
"notif.post.unsub.info": "Deze notificatie is door ons verzonden vanwege gebruikersinstellingen voor abonnementen en berichten.", "notif.post.unsub.info": "Deze notificatie is door ons verzonden vanwege gebruikersinstellingen voor abonnementen en berichten.",
"notif.cta": "Click here to go to forum", "notif.cta": "Klik hier om naar het forum te gaan",
"test.text1": "Dit is een testbericht om te verifiëren dat NodeBB de e-mailberichtservice correct heeft opgezet.", "test.text1": "Dit is een testbericht om te verifiëren dat NodeBB de e-mailberichtservice correct heeft opgezet.",
"unsub.cta": "Klik hier om deze instellingen te wijzigen", "unsub.cta": "Klik hier om deze instellingen te wijzigen",
"banned.subject": "U bent verbannen van %1", "banned.subject": "U bent verbannen van %1",

@ -119,13 +119,13 @@
"not-enough-reputation-to-downvote": "Je hebt onvoldoende reputatie om een negatieve stem uit te mogen brengen", "not-enough-reputation-to-downvote": "Je hebt onvoldoende reputatie om een negatieve stem uit te mogen brengen",
"not-enough-reputation-to-flag": "Je hebt onvoldoende reputatie om dit bericht aan de beheerders te mogen melden", "not-enough-reputation-to-flag": "Je hebt onvoldoende reputatie om dit bericht aan de beheerders te mogen melden",
"already-flagged": "Je hebt deze post al gerapporteerd", "already-flagged": "Je hebt deze post al gerapporteerd",
"self-vote": "You cannot vote on your own post", "self-vote": "Het is niet mogelijk om op je eigen bericht te stemmen",
"reload-failed": "Tijdens het herladen van \"%1\" is NodeBB een fout of probleem tegengekomen. NodeBB blijft operationeel. Echter het is verstandig om de oorzaak te onderzoeken en wellicht de vorige actie, voor het herladen, ongedaan te maken.", "reload-failed": "Tijdens het herladen van \"%1\" is NodeBB een fout of probleem tegengekomen. NodeBB blijft operationeel. Echter het is verstandig om de oorzaak te onderzoeken en wellicht de vorige actie, voor het herladen, ongedaan te maken.",
"registration-error": "Fout tijdens registratie", "registration-error": "Fout tijdens registratie",
"parse-error": "Tijdens het verwerken van het antwoord van de server is er iets misgegaan.", "parse-error": "Tijdens het verwerken van het antwoord van de server is er iets misgegaan.",
"wrong-login-type-email": "Gebruik je e-mailadres om in te loggen", "wrong-login-type-email": "Gebruik je e-mailadres om in te loggen",
"wrong-login-type-username": "Gebruik je gebruikersnaam om in te loggen", "wrong-login-type-username": "Gebruik je gebruikersnaam om in te loggen",
"sso-registration-disabled": "Registration has been disabled for %1 accounts, please register with an email address first", "sso-registration-disabled": "Registratie is uitgeschakeld voor %1 accounts, registreer eerst met een e-mailadres",
"invite-maximum-met": "Je heb het maximum aantal mensen uitgenodigd (%1 van de %2).", "invite-maximum-met": "Je heb het maximum aantal mensen uitgenodigd (%1 van de %2).",
"no-session-found": "Geen login sessie gevonden!", "no-session-found": "Geen login sessie gevonden!",
"not-in-room": "Gebruiker niet in de chat", "not-in-room": "Gebruiker niet in de chat",
@ -135,5 +135,5 @@
"invalid-home-page-route": "Onbekende homepage route", "invalid-home-page-route": "Onbekende homepage route",
"invalid-session": "Verkeerde sessie combinatie", "invalid-session": "Verkeerde sessie combinatie",
"invalid-session-text": "Het lijkt erop dat je login sessie niet meer actief is of niet langer synchroon is met de server. Ververs de pagina.", "invalid-session-text": "Het lijkt erop dat je login sessie niet meer actief is of niet langer synchroon is met de server. Ververs de pagina.",
"no-topics-selected": "No topics selected!" "no-topics-selected": "Geen onderwerpen geselecteerd!"
} }

@ -9,7 +9,7 @@
"continue_to": "Door naar %1", "continue_to": "Door naar %1",
"return_to": "Terug naar %1", "return_to": "Terug naar %1",
"new_notification": "Nieuwe notificatie", "new_notification": "Nieuwe notificatie",
"new_notification_from": "You have a new Notification from %1", "new_notification_from": "Je hebt een nieuwe notificatie van %1",
"you_have_unread_notifications": "Je hebt nieuwe notificaties.", "you_have_unread_notifications": "Je hebt nieuwe notificaties.",
"all": "Alles", "all": "Alles",
"topics": "Onderwerpen", "topics": "Onderwerpen",
@ -47,18 +47,18 @@
"email-confirmed-message": "Bedankt voor het bevestigen van je e-mailadres. Je account is nu volledig geactiveerd.", "email-confirmed-message": "Bedankt voor het bevestigen van je e-mailadres. Je account is nu volledig geactiveerd.",
"email-confirm-error-message": "Er was een probleem met het bevestigen van dit e-mailadres. Misschien is de code niet goed ingevoerd of was de beschikbare tijd inmiddels verstreken.", "email-confirm-error-message": "Er was een probleem met het bevestigen van dit e-mailadres. Misschien is de code niet goed ingevoerd of was de beschikbare tijd inmiddels verstreken.",
"email-confirm-sent": "Bevestigingsmail verstuurd.", "email-confirm-sent": "Bevestigingsmail verstuurd.",
"none": "None", "none": "Geen",
"notification_only": "Notification Only", "notification_only": "Alleen notificatie",
"email_only": "Email Only", "email_only": "Alleen e-mail",
"notification_and_email": "Notification & Email", "notification_and_email": "Notificatie & e-mail",
"notificationType_upvote": "When someone upvotes your post", "notificationType_upvote": "Als iemand positief stemt voor je bericht",
"notificationType_new-topic": "When someone you follow posts a topic", "notificationType_new-topic": "Wanneer iemand die jij volgt een onderwerp post",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching", "notificationType_new-reply": "Als een nieuwe reactie komt op een onderwerp dat je volgt",
"notificationType_follow": "When someone starts following you", "notificationType_follow": "Als iemand begint met jou te volgen",
"notificationType_new-chat": "When you receive a chat message", "notificationType_new-chat": "Als je een chat-bericht ontvangt",
"notificationType_group-invite": "When you receive a group invite", "notificationType_group-invite": "Als je een uitnodiging voor een groep ontvangt",
"notificationType_new-register": "When someone gets added to registration queue", "notificationType_new-register": "Als iemand wordt toegevoegd aan een registratiewachtrij",
"notificationType_post-queue": "When a new post is queued", "notificationType_post-queue": "Als een bericht aan de wachtrij wordt toegevoegd",
"notificationType_new-post-flag": "When a post is flagged", "notificationType_new-post-flag": "Als een bericht wordt gevlagd",
"notificationType_new-user-flag": "When a user is flagged" "notificationType_new-user-flag": "Als een gebruiker wordt gevlagd"
} }

@ -68,8 +68,8 @@
"thread_tools.restore_confirm": "Zeker weten dit onderwerp te herstellen?", "thread_tools.restore_confirm": "Zeker weten dit onderwerp te herstellen?",
"thread_tools.purge": "Wis onderwerp ", "thread_tools.purge": "Wis onderwerp ",
"thread_tools.purge_confirm": "Weet je zeker dat je dit onderwerp wil verwijderen?", "thread_tools.purge_confirm": "Weet je zeker dat je dit onderwerp wil verwijderen?",
"thread_tools.merge_topics": "Merge Topics", "thread_tools.merge_topics": "Onderwerpen samenvoegen",
"thread_tools.merge": "Merge", "thread_tools.merge": "Samenvoegen",
"topic_move_success": "Verplaatsen van onderwerp naar %1 succesvol", "topic_move_success": "Verplaatsen van onderwerp naar %1 succesvol",
"post_delete_confirm": "Is het absoluut de bedoeling dit bericht te verwijderen?", "post_delete_confirm": "Is het absoluut de bedoeling dit bericht te verwijderen?",
"post_restore_confirm": "Is het de bedoeling dit bericht te herstellen?", "post_restore_confirm": "Is het de bedoeling dit bericht te herstellen?",
@ -91,7 +91,7 @@
"fork_pid_count": "%1 bericht(en) geselecteerd", "fork_pid_count": "%1 bericht(en) geselecteerd",
"fork_success": "Onderwerp is succesvol afgesplitst. Klik hier om het nieuwe onderwerp te zien.", "fork_success": "Onderwerp is succesvol afgesplitst. Klik hier om het nieuwe onderwerp te zien.",
"delete_posts_instruction": "Klik op de berichten die verwijderd moeten worden", "delete_posts_instruction": "Klik op de berichten die verwijderd moeten worden",
"merge_topics_instruction": "Click the topics you want to merge", "merge_topics_instruction": "Klik op de onderwerpen die samengevoegd moeten worden",
"composer.title_placeholder": "Voer hier de titel van het onderwerp in...", "composer.title_placeholder": "Voer hier de titel van het onderwerp in...",
"composer.handle_placeholder": "Naam", "composer.handle_placeholder": "Naam",
"composer.discard": "Annuleren", "composer.discard": "Annuleren",

@ -101,11 +101,11 @@
"outgoing-message-sound": "Uitgaand bericht geluid", "outgoing-message-sound": "Uitgaand bericht geluid",
"notification-sound": "Notificatie geluid", "notification-sound": "Notificatie geluid",
"no-sound": "Geen geluid", "no-sound": "Geen geluid",
"upvote-notif-freq": "Upvote Notification Frequency", "upvote-notif-freq": "Notificatie frequentie voor Upvotes",
"upvote-notif-freq.all": "All Upvotes", "upvote-notif-freq.all": "Alle Upvotes",
"upvote-notif-freq.everyTen": "Every Ten Upvotes", "upvote-notif-freq.everyTen": "Elke tien Upvotes",
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...", "upvote-notif-freq.logarithmic": "Bij 10, 100, 1000...",
"upvote-notif-freq.disabled": "Disabled", "upvote-notif-freq.disabled": "Uitgeschakeld",
"browsing": "Instellingen voor bladeren", "browsing": "Instellingen voor bladeren",
"open_links_in_new_tab": "Open uitgaande links naar een externe site in een nieuw tabblad", "open_links_in_new_tab": "Open uitgaande links naar een externe site in een nieuw tabblad",
"enable_topic_searching": "Inschakelen mogelijkheid op onderwerp te kunnen zoeken", "enable_topic_searching": "Inschakelen mogelijkheid op onderwerp te kunnen zoeken",

@ -1,5 +1,5 @@
{ {
"alert.confirm-reload": "Bạn có thật sự muốn tải lại NodeBB", "alert.confirm-reload": "Bạn có thật sự muốn xác lập lại NodeBB",
"alert.confirm-restart": "Bạn có thật sự muốn khởi động lại NodeBB", "alert.confirm-restart": "Bạn có thật sự muốn khởi động lại NodeBB",
"acp-title": "%1 | Bảng điểu khiển", "acp-title": "%1 | Bảng điểu khiển",

@ -1,5 +1,5 @@
{ {
"post-cache": "Cache bài viết", "post-cache": "Bộ nhớ đệm bài viết",
"posts-in-cache": "Cache cho bài viết", "posts-in-cache": "Cache cho bài viết",
"average-post-size": "Kích thước bài viết", "average-post-size": "Kích thước bài viết",
"length-to-max": "Độ dài / Tối Đa", "length-to-max": "Độ dài / Tối Đa",

@ -1,5 +1,5 @@
{ {
"email-settings": "Email Settings", "email-settings": "Thiết lập Email",
"address": "Email Address", "address": "Email Address",
"address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.",
"from": "From Name", "from": "From Name",

@ -8,13 +8,13 @@
"no_replies": "Chưa có bình luận nào", "no_replies": "Chưa có bình luận nào",
"no_new_posts": "Không có bài mới.", "no_new_posts": "Không có bài mới.",
"share_this_category": "Chia sẻ chuyên mục này", "share_this_category": "Chia sẻ chuyên mục này",
"watch": "Theo dõi", "watch": "Quan tâm",
"ignore": "Bỏ qua", "ignore": "Bỏ qua",
"watching": "Đang theo dõi", "watching": "Đang quan tâm",
"ignoring": "Bỏ qua", "ignoring": "Bỏ qua",
"watching.description": "Hiện các chủ đề chưa đọc", "watching.description": "Hiện các chủ đề chưa đọc",
"ignoring.description": "Không hiện những chủ đề chưa đọc", "ignoring.description": "Không hiện những chủ đề chưa đọc",
"watch.message": "Bạn đang theo dõi các cập nhật ở chuyên mục này và các chuyên mục con", "watch.message": "Bạn đang theo dõi các cập nhật ở chuyên mục này và các chuyên mục con",
"ignore.message": "Bạn đang bỏ qua các cập nhật ở chuyên mục này và các chuyên mục con", "ignore.message": "Bạn đang bỏ qua các cập nhật ở chuyên mục này và các chuyên mục con",
"watched-categories": "Các chuyên mục đã xem" "watched-categories": "Các chuyên mục đã quan tâm"
} }

@ -30,12 +30,12 @@
"notif.chat.unsub.info": "Thông báo tin nhắn này được gửi tới dựa theo cài đặt theo dõi của bạn.", "notif.chat.unsub.info": "Thông báo tin nhắn này được gửi tới dựa theo cài đặt theo dõi của bạn.",
"notif.post.cta": "Nhấn vào đây để đọc toàn bộ chủ đề", "notif.post.cta": "Nhấn vào đây để đọc toàn bộ chủ đề",
"notif.post.unsub.info": "Thông báo bài viết này được gửi cho bạn dựa tên thiết lập nhận thông báo của bạn", "notif.post.unsub.info": "Thông báo bài viết này được gửi cho bạn dựa tên thiết lập nhận thông báo của bạn",
"notif.cta": "Click here to go to forum", "notif.cta": "Click vào đây để đi đến diễn đàn",
"test.text1": "Đây là email kiểm tra xem chức năng gửi mail trên hệ thống NodeBB của bạn có hoạt động tốt hay không.", "test.text1": "Đây là email kiểm tra xem chức năng gửi mail trên hệ thống NodeBB của bạn có hoạt động tốt hay không.",
"unsub.cta": "Nhấn vào đây để thay đổi cài đặt.", "unsub.cta": "Nhấn vào đây để thay đổi cài đặt.",
"banned.subject": "You have been banned from %1", "banned.subject": "Bạn đã bị cấm khỏi %1",
"banned.text1": "The user %1 has been banned from %2.", "banned.text1": "Người dùng %1 đã bị cấm khỏi %2",
"banned.text2": "This ban will last until %1.", "banned.text2": "Lệnh cấm sẽ kéo dài đến %1.",
"banned.text3": "This is the reason why you have been banned:", "banned.text3": "Đây là lý do tại sao bạn bị cấm:",
"closing": "Xin cảm ơn!" "closing": "Xin cảm ơn!"
} }

@ -1,20 +1,20 @@
{ {
"invalid-data": "Dữ liệu không hợp lệ", "invalid-data": "Dữ liệu không hợp lệ",
"invalid-json": "Invalid JSON", "invalid-json": "JSON không hợp lệ",
"not-logged-in": "Có vẻ bạn chưa đăng nhập.", "not-logged-in": "Có vẻ bạn chưa đăng nhập.",
"account-locked": "Tài khoản của bạn đang tạm thời bị khóa", "account-locked": "Tài khoản của bạn đang tạm thời bị khóa",
"search-requires-login": "Bạn cần phải có tài khoản để tìm kiếm - vui lòng đăng nhập hoặc đăng ký.", "search-requires-login": "Bạn cần phải có tài khoản để tìm kiếm - vui lòng đăng nhập hoặc đăng ký.",
"goback": "Press back to return to the previous page", "goback": "Nhấn back để quay về trang trước",
"invalid-cid": "ID chuyên mục không hợp lệ", "invalid-cid": "ID chuyên mục không hợp lệ",
"invalid-tid": "ID chủ đề không hợp lệ", "invalid-tid": "ID chủ đề không hợp lệ",
"invalid-pid": "ID bài viết không hợp lệ", "invalid-pid": "ID bài viết không hợp lệ",
"invalid-uid": "ID tài khoản không hợp lệ", "invalid-uid": "ID tài khoản không hợp lệ",
"invalid-username": "Tên đăng nhập không hợp lệ", "invalid-username": "Tên đăng nhập không hợp lệ",
"invalid-email": "Email không hợp lệ", "invalid-email": "Email không hợp lệ",
"invalid-title": "Invalid title", "invalid-title": "Tiêu đề không hợp lệ",
"invalid-user-data": "Dữ liệu tài khoản không hợp lệ", "invalid-user-data": "Dữ liệu tài khoản không hợp lệ",
"invalid-password": "Mật khẩu không hợp lệ", "invalid-password": "Mật khẩu không hợp lệ",
"invalid-login-credentials": "Invalid login credentials", "invalid-login-credentials": "Thông tin đăng nhập không hợp lệ",
"invalid-username-or-password": "Xin hãy nhập cả tên đăng nhập và mật khẩu", "invalid-username-or-password": "Xin hãy nhập cả tên đăng nhập và mật khẩu",
"invalid-search-term": "Từ khóa không hợp lệ", "invalid-search-term": "Từ khóa không hợp lệ",
"csrf-invalid": "Hệ thống không cho phép bạn đăng nhập, có vẻ như phiên đăng nhập cũ đã hết hạn. Hãy thử đăng nhập lại", "csrf-invalid": "Hệ thống không cho phép bạn đăng nhập, có vẻ như phiên đăng nhập cũ đã hết hạn. Hãy thử đăng nhập lại",
@ -33,7 +33,7 @@
"password-too-long": "Mật khẩu quá dài", "password-too-long": "Mật khẩu quá dài",
"user-banned": "Tài khoản bị ban", "user-banned": "Tài khoản bị ban",
"user-banned-reason": "Xin lỗi, tài khoản này đã bị khóa (Lí do: %1)", "user-banned-reason": "Xin lỗi, tài khoản này đã bị khóa (Lí do: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)", "user-banned-reason-until": "Rất tiếc, tài khoản này đã bị cấm cho đến %1 (Lý do: %2)",
"user-too-new": "Rất tiếc, bạn phải chờ %1 giây để đăng bài viết đầu tiên.", "user-too-new": "Rất tiếc, bạn phải chờ %1 giây để đăng bài viết đầu tiên.",
"blacklisted-ip": "Rất tiếc, địa chỉ IP của bạn đã bị cấm khỏi cộng đồng. Nếu bạn cảm thấy có gì không đúng, hãy liên lạc với người quản trị.", "blacklisted-ip": "Rất tiếc, địa chỉ IP của bạn đã bị cấm khỏi cộng đồng. Nếu bạn cảm thấy có gì không đúng, hãy liên lạc với người quản trị.",
"ban-expiry-missing": "Vui lòng cung cấp ngày hết hạn của lệnh cấm", "ban-expiry-missing": "Vui lòng cung cấp ngày hết hạn của lệnh cấm",
@ -81,7 +81,7 @@
"cant-ban-other-admins": "Bạn không thể cấm được các quản trị viên khác", "cant-ban-other-admins": "Bạn không thể cấm được các quản trị viên khác",
"cant-remove-last-admin": "Bạn là quản trị viên duy nhất. Hãy cho thành viên khác làm quản trị viên trước khi huỷ bỏ quyền quản trị của bạn.", "cant-remove-last-admin": "Bạn là quản trị viên duy nhất. Hãy cho thành viên khác làm quản trị viên trước khi huỷ bỏ quyền quản trị của bạn.",
"cant-delete-admin": "Hủy quyền quản trị của tài khoản này trước khi xóa", "cant-delete-admin": "Hủy quyền quản trị của tài khoản này trước khi xóa",
"invalid-image": "Invalid image", "invalid-image": "Hình ảnh không hợp lệ",
"invalid-image-type": "Định dạng ảnh không hợp lệ. Những định dạng được cho phép là: %1", "invalid-image-type": "Định dạng ảnh không hợp lệ. Những định dạng được cho phép là: %1",
"invalid-image-extension": "Định dạng ảnh không hợp lệ", "invalid-image-extension": "Định dạng ảnh không hợp lệ",
"invalid-file-type": "Định dạng file không hợp lệ. Những định dạng được cho phép là: %1", "invalid-file-type": "Định dạng file không hợp lệ. Những định dạng được cho phép là: %1",
@ -109,7 +109,7 @@
"chat-disabled": "Hệ thống chat đã bị vô hiệu hoá", "chat-disabled": "Hệ thống chat đã bị vô hiệu hoá",
"too-many-messages": "Bạn đã gửi quá nhiều tin nhắn, vui lòng đợi trong giây lát.", "too-many-messages": "Bạn đã gửi quá nhiều tin nhắn, vui lòng đợi trong giây lát.",
"invalid-chat-message": "Tin nhắn không hợp lệ", "invalid-chat-message": "Tin nhắn không hợp lệ",
"chat-message-too-long": "Chat messages can not be longer than %1 characters.", "chat-message-too-long": "Thông điệp không thể dài hơn %1 chữ.",
"cant-edit-chat-message": "Bạn không được phép chỉnh sửa tin nhắn này", "cant-edit-chat-message": "Bạn không được phép chỉnh sửa tin nhắn này",
"cant-remove-last-user": "Bạn không thể xoá thành viên cuối cùng", "cant-remove-last-user": "Bạn không thể xoá thành viên cuối cùng",
"cant-delete-chat-message": "Bạn không được phép xoá tin nhắn này", "cant-delete-chat-message": "Bạn không được phép xoá tin nhắn này",
@ -119,13 +119,13 @@
"not-enough-reputation-to-downvote": "Bạn không có đủ phiếu tín nhiệm để downvote bài này", "not-enough-reputation-to-downvote": "Bạn không có đủ phiếu tín nhiệm để downvote bài này",
"not-enough-reputation-to-flag": "Bạn không đủ tín nhiệm để đánh dấu bài viết này", "not-enough-reputation-to-flag": "Bạn không đủ tín nhiệm để đánh dấu bài viết này",
"already-flagged": "Bạn đã gắn cờ cho bài viết này", "already-flagged": "Bạn đã gắn cờ cho bài viết này",
"self-vote": "You cannot vote on your own post", "self-vote": "Bạn không thể tự bầu cho bài đăng của mình",
"reload-failed": "NodeBB gặp lỗi trong khi tải lại: \"%1\". NodeBB sẽ tiếp tục hoạt động với dữ liệu trước đó, tuy nhiên bạn nên tháo gỡ những gì bạn vừa thực hiện trước khi tải lại.", "reload-failed": "NodeBB gặp lỗi trong khi tải lại: \"%1\". NodeBB sẽ tiếp tục hoạt động với dữ liệu trước đó, tuy nhiên bạn nên tháo gỡ những gì bạn vừa thực hiện trước khi tải lại.",
"registration-error": "Lỗi đăng kí", "registration-error": "Lỗi đăng kí",
"parse-error": "Có gì không ổn khi nhận kết quả từ máy chủ", "parse-error": "Có gì không ổn khi nhận kết quả từ máy chủ",
"wrong-login-type-email": "Xin vui lòng sửa dụng email của bạn để đăng nhập", "wrong-login-type-email": "Xin vui lòng sửa dụng email của bạn để đăng nhập",
"wrong-login-type-username": "Vui lòng sử dụng tên đăng nhập của bạn để đăng nhập", "wrong-login-type-username": "Vui lòng sử dụng tên đăng nhập của bạn để đăng nhập",
"sso-registration-disabled": "Registration has been disabled for %1 accounts, please register with an email address first", "sso-registration-disabled": "Không thể đăng ký với tài khoản %1, vui lòng đăng ký với địa chỉ email của bạn",
"invite-maximum-met": "Bạn đã sử dụng hết số lượng lời mời bạn có thể gửi (%1 đã gửi trên tổng số %2 được cho phép)", "invite-maximum-met": "Bạn đã sử dụng hết số lượng lời mời bạn có thể gửi (%1 đã gửi trên tổng số %2 được cho phép)",
"no-session-found": "Không tìm thấy phiên đăng nhập!", "no-session-found": "Không tìm thấy phiên đăng nhập!",
"not-in-room": "Thành viên không có trong phòng", "not-in-room": "Thành viên không có trong phòng",
@ -135,5 +135,5 @@
"invalid-home-page-route": "Đường dẫn trang chủ không hợp lệ", "invalid-home-page-route": "Đường dẫn trang chủ không hợp lệ",
"invalid-session": "Không đúng session", "invalid-session": "Không đúng session",
"invalid-session-text": "Có vẻ như phiên đăng nhập của bạn đã không còn hoạt động nữa, hoặc không còn đúng với thông tin trên máy chủ. Vui lòng tải lại trang này", "invalid-session-text": "Có vẻ như phiên đăng nhập của bạn đã không còn hoạt động nữa, hoặc không còn đúng với thông tin trên máy chủ. Vui lòng tải lại trang này",
"no-topics-selected": "No topics selected!" "no-topics-selected": "Không có chủ đề nào đang được chọn!"
} }

@ -104,6 +104,6 @@
"cookies.accept": "Đã rõ!", "cookies.accept": "Đã rõ!",
"cookies.learn_more": "Xem thêm", "cookies.learn_more": "Xem thêm",
"edited": "Đã cập nhật", "edited": "Đã cập nhật",
"disabled": "Disabled", "disabled": "Bị khóa",
"select": "Select" "select": "Chọn"
} }

@ -1,5 +1,5 @@
{ {
"name": "Tiếng Việt", "name": "Tiếng Anh (Anh Quốc/Ca-na-da)",
"code": "vi", "code": "vi",
"dir": "ltr" "dir": "Trái qua phải"
} }

@ -9,17 +9,17 @@
"continue_to": "Tiếp tục tới %1", "continue_to": "Tiếp tục tới %1",
"return_to": "Quay lại %1", "return_to": "Quay lại %1",
"new_notification": "Thông báo mới", "new_notification": "Thông báo mới",
"new_notification_from": "You have a new Notification from %1", "new_notification_from": "Bạn nhận được 1 thông báo từ %1",
"you_have_unread_notifications": "Bạn có thông báo chưa đọc", "you_have_unread_notifications": "Bạn có thông báo chưa đọc",
"all": "All", "all": "Toàn bộ",
"topics": "Topics", "topics": "Chủ đề",
"replies": "Replies", "replies": "Phản hồi",
"chat": "Chats", "chat": "Thông điệp",
"follows": "Follows", "follows": "Lượt theo dõi",
"upvote": "Upvotes", "upvote": "Lượt thích",
"new-flags": "New Flags", "new-flags": "Cảnh báo mới",
"my-flags": "Flags assigned to me", "my-flags": "Cảnh báo dành cho tôi",
"bans": "Bans", "bans": "Cấm",
"new_message_from": "Tin nhắn mới từ <strong>%1</strong>", "new_message_from": "Tin nhắn mới từ <strong>%1</strong>",
"upvoted_your_post_in": "<strong>%1</strong> đã bình chọn bài của bạn trong <strong>%2</strong>.", "upvoted_your_post_in": "<strong>%1</strong> đã bình chọn bài của bạn trong <strong>%2</strong>.",
"upvoted_your_post_in_dual": "<strong>%1</strong> và <strong>%2</strong> đã tán thành với bài viết của bạn trong <strong>%3</strong>.", "upvoted_your_post_in_dual": "<strong>%1</strong> và <strong>%2</strong> đã tán thành với bài viết của bạn trong <strong>%3</strong>.",
@ -29,9 +29,9 @@
"user_flagged_post_in": "<strong>%1</strong> gắn cờ 1 bài trong <strong>%2</strong>", "user_flagged_post_in": "<strong>%1</strong> gắn cờ 1 bài trong <strong>%2</strong>",
"user_flagged_post_in_dual": "<strong>%1</strong> và <strong>%2</strong> đã gắn cờ một bài viết trong <strong>%3</strong>", "user_flagged_post_in_dual": "<strong>%1</strong> và <strong>%2</strong> đã gắn cờ một bài viết trong <strong>%3</strong>",
"user_flagged_post_in_multiple": "<strong>%1</strong> và %2 người khác đã gắn cờ bài viết của bạn trong <strong>%3</strong>", "user_flagged_post_in_multiple": "<strong>%1</strong> và %2 người khác đã gắn cờ bài viết của bạn trong <strong>%3</strong>",
"user_flagged_user": "<strong>%1</strong> flagged a user profile (%2)", "user_flagged_user": "<strong>%1</strong> đã cảnh báo một người dùng (%2)",
"user_flagged_user_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a user profile (%3)", "user_flagged_user_dual": "<strong>%1</strong> và <strong>%2</strong> đã cảnh báo một người dùng (%3)",
"user_flagged_user_multiple": "<strong>%1</strong> and %2 others flagged a user profile (%3)", "user_flagged_user_multiple": "<strong>%1</strong> và %2 người khác đã cảnh báo người dùng (%3)",
"user_posted_to": "<strong>%1</strong> đã trả lời <strong>%2</strong>", "user_posted_to": "<strong>%1</strong> đã trả lời <strong>%2</strong>",
"user_posted_to_dual": "<strong>%1</strong> và <strong>%2</strong> đã trả lời: <strong>%3</strong>", "user_posted_to_dual": "<strong>%1</strong> và <strong>%2</strong> đã trả lời: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> và %2 người khác đã trả lời: <strong>%3</strong>", "user_posted_to_multiple": "<strong>%1</strong> và %2 người khác đã trả lời: <strong>%3</strong>",
@ -41,24 +41,24 @@
"user_started_following_you_multiple": "<strong>%1</strong> và %2 người khác đã bắt đầu theo dõi bạn.", "user_started_following_you_multiple": "<strong>%1</strong> và %2 người khác đã bắt đầu theo dõi bạn.",
"new_register": "<strong>%1</strong> đã gửi một yêu cầu tham gia.", "new_register": "<strong>%1</strong> đã gửi một yêu cầu tham gia.",
"new_register_multiple": "Có <strong>%1</strong> đơn đăng ký đang chờ xem xét.", "new_register_multiple": "Có <strong>%1</strong> đơn đăng ký đang chờ xem xét.",
"flag_assigned_to_you": "<strong>Flag %1</strong> has been assigned to you", "flag_assigned_to_you": "<strong>Cảnh báo %1</strong> đã được ghi nhận đối với bạn",
"post_awaiting_review": "Post awaiting review", "post_awaiting_review": "Bài đăng đang chờ xét duyệt",
"email-confirmed": "Đã xác nhận email", "email-confirmed": "Đã xác nhận email",
"email-confirmed-message": "Cảm ơn bạn đã xác nhận địa chỉ email của bạn. Tài khoản của bạn đã được kích hoạt đầy đủ.", "email-confirmed-message": "Cảm ơn bạn đã xác nhận địa chỉ email của bạn. Tài khoản của bạn đã được kích hoạt đầy đủ.",
"email-confirm-error-message": "Đã có lỗi khi xác nhận địa chỉ email. Có thể đoạn mã không đúng hoặc đã hết hạn.", "email-confirm-error-message": "Đã có lỗi khi xác nhận địa chỉ email. Có thể đoạn mã không đúng hoặc đã hết hạn.",
"email-confirm-sent": "Email xác nhận đã gửi.", "email-confirm-sent": "Email xác nhận đã gửi.",
"none": "None", "none": "Hoàn toàn không",
"notification_only": "Notification Only", "notification_only": "Chỉ thông báo",
"email_only": "Email Only", "email_only": "Chỉ email",
"notification_and_email": "Notification & Email", "notification_and_email": "Cả thông báo & email",
"notificationType_upvote": "When someone upvotes your post", "notificationType_upvote": "Khi ai đó thích bài đăng của bạn",
"notificationType_new-topic": "When someone you follow posts a topic", "notificationType_new-topic": "Khi người bạn theo dõi đăng một chủ đề",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching", "notificationType_new-reply": "Khi phản hồi được đăng trong chủ đề bạn đang quan tâm",
"notificationType_follow": "When someone starts following you", "notificationType_follow": "Khi ai đó theo dõi bạn",
"notificationType_new-chat": "When you receive a chat message", "notificationType_new-chat": "Khi bạn nhận được thông điệp chat",
"notificationType_group-invite": "When you receive a group invite", "notificationType_group-invite": "Khi bạn nhận được lời mời gia nhập nhóm",
"notificationType_new-register": "When someone gets added to registration queue", "notificationType_new-register": "Khi ai đó được thêm vào lượt chờ đăng ký",
"notificationType_post-queue": "When a new post is queued", "notificationType_post-queue": "Khi bài đăng được thêm vào lượt chờ",
"notificationType_new-post-flag": "When a post is flagged", "notificationType_new-post-flag": "Khi bài đăng được cảnh báo",
"notificationType_new-user-flag": "When a user is flagged" "notificationType_new-user-flag": "Khi người dùng bị cảnh báo"
} }

@ -43,8 +43,8 @@
"account/groups": "Nhóm của %1", "account/groups": "Nhóm của %1",
"account/bookmarks": "Đã bookmark %1's chủ đề", "account/bookmarks": "Đã bookmark %1's chủ đề",
"account/settings": "Thiết lập", "account/settings": "Thiết lập",
"account/watched": "Chủ đề %1 đang theo dõi", "account/watched": "Chủ đề được quan tâm bởi %1",
"account/ignored": "Topics ignored by %1", "account/ignored": "Các chủ đề đã bị phớt lờ bởi %1",
"account/upvoted": "Bài viết %1 tán thành", "account/upvoted": "Bài viết %1 tán thành",
"account/downvoted": "Bài viết %1 phản đối", "account/downvoted": "Bài viết %1 phản đối",
"account/best": "Bài viết hay nhất của %1", "account/best": "Bài viết hay nhất của %1",

@ -8,11 +8,11 @@
"posted-by": "Đăng bởi", "posted-by": "Đăng bởi",
"in-categories": "Nằm trong chuyên mục", "in-categories": "Nằm trong chuyên mục",
"search-child-categories": "Tìm kiếm chuyên mục con", "search-child-categories": "Tìm kiếm chuyên mục con",
"has-tags": "Has tags", "has-tags": "Có thẻ bên trong",
"reply-count": "Số lượt trả lời", "reply-count": "Số lượt trả lời",
"at-least": "Tối thiểu", "at-least": "Tối thiểu",
"at-most": "Tối đa", "at-most": "Tối đa",
"relevance": "Relevance", "relevance": "Mức độ liên quan",
"post-time": "Thời điểm đăng bài", "post-time": "Thời điểm đăng bài",
"newer-than": "Mới hơn", "newer-than": "Mới hơn",
"older-than": "Cũ hơn", "older-than": "Cũ hơn",

@ -1,7 +1,7 @@
{ {
"success": "Thành công", "success": "Thành công",
"topic-post": "Bạn đã gửi bài thành công", "topic-post": "Bạn đã gửi bài thành công",
"post-queued": "Your post is queued for approval.", "post-queued": "Bài đăng của bạn đang được chờ xét duyệt.",
"authentication-successful": "Xác thực thành công", "authentication-successful": "Xác thực thành công",
"settings-saved": "Đã lưu thiết lập" "settings-saved": "Đã lưu thiết lập"
} }

@ -14,7 +14,7 @@
"quote": "Trích dẫn", "quote": "Trích dẫn",
"reply": "Trả lời", "reply": "Trả lời",
"replies_to_this_post": "%1 trả lời", "replies_to_this_post": "%1 trả lời",
"one_reply_to_this_post": "1 Reply", "one_reply_to_this_post": "1 Phản hồi",
"last_reply_time": "Trả lời cuối cùng", "last_reply_time": "Trả lời cuối cùng",
"reply-as-topic": "Trả lời dưới dạng chủ đề", "reply-as-topic": "Trả lời dưới dạng chủ đề",
"guest-login-reply": "Hãy đăng nhập để trả lời", "guest-login-reply": "Hãy đăng nhập để trả lời",
@ -40,13 +40,13 @@
"markAsUnreadForAll.success": "Chủ đề đã được đánh dấu là chưa đọc toàn bộ", "markAsUnreadForAll.success": "Chủ đề đã được đánh dấu là chưa đọc toàn bộ",
"mark_unread": "Đánh dấu chưa đọc", "mark_unread": "Đánh dấu chưa đọc",
"mark_unread.success": "Chủ đề đã được đánh dấu chưa đọc.", "mark_unread.success": "Chủ đề đã được đánh dấu chưa đọc.",
"watch": "Theo dõi", "watch": "Quan tâm",
"unwatch": "Ngừng theo dõi", "unwatch": "Ngừng quan tâm",
"watch.title": "Được thông báo khi có trả lời mới trong chủ đề này", "watch.title": "Được thông báo khi có trả lời mới trong chủ đề này",
"unwatch.title": "Ngừng theo dõi chủ đề này", "unwatch.title": "Ngừng quan tâm chủ đề này",
"share_this_post": "Chia sẻ bài viết này", "share_this_post": "Chia sẻ bài viết này",
"watching": "Đang xem", "watching": "Đang quan tâm",
"not-watching": "Không xem", "not-watching": "Không để ý",
"ignoring": "Bỏ qua", "ignoring": "Bỏ qua",
"watching.description": "Thông báo cho tôi các trả lời mới. <br/>Hiển thị các mục chưa đọc", "watching.description": "Thông báo cho tôi các trả lời mới. <br/>Hiển thị các mục chưa đọc",
"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.",
@ -59,7 +59,7 @@
"thread_tools.unlock": "Mở khóa chủ đề", "thread_tools.unlock": "Mở khóa chủ đề",
"thread_tools.move": "Chuyển chủ đề", "thread_tools.move": "Chuyển chủ đề",
"thread_tools.move_all": "Chuyển tất cả", "thread_tools.move_all": "Chuyển tất cả",
"thread_tools.select_category": "Select Category", "thread_tools.select_category": "Chọn chuyện mục",
"thread_tools.fork": "Tạo bản sao chủ đề", "thread_tools.fork": "Tạo bản sao chủ đề",
"thread_tools.delete": "Xóa chủ đề", "thread_tools.delete": "Xóa chủ đề",
"thread_tools.delete-posts": "Xoá bài viết", "thread_tools.delete-posts": "Xoá bài viết",
@ -68,8 +68,8 @@
"thread_tools.restore_confirm": "Bạn có muốn phục hồi chủ đề này?", "thread_tools.restore_confirm": "Bạn có muốn phục hồi chủ đề này?",
"thread_tools.purge": "Xóa hẳn chủ đề", "thread_tools.purge": "Xóa hẳn chủ đề",
"thread_tools.purge_confirm": "Bạn có muốn xóa hẳn chủ đề này?", "thread_tools.purge_confirm": "Bạn có muốn xóa hẳn chủ đề này?",
"thread_tools.merge_topics": "Merge Topics", "thread_tools.merge_topics": "Xác nhập chủ đề",
"thread_tools.merge": "Merge", "thread_tools.merge": "Xác nhập",
"topic_move_success": "Đã chuyển thành công chủ đề này sang %1", "topic_move_success": "Đã chuyển thành công chủ đề này sang %1",
"post_delete_confirm": "Bạn có chắc là muốn xóa bài gửi này không?", "post_delete_confirm": "Bạn có chắc là muốn xóa bài gửi này không?",
"post_restore_confirm": "Bạn có chắc là muốn phục hồi bài gửi này không?", "post_restore_confirm": "Bạn có chắc là muốn phục hồi bài gửi này không?",
@ -91,7 +91,7 @@
"fork_pid_count": "%1 bài viết(s) đã được gửi", "fork_pid_count": "%1 bài viết(s) đã được gửi",
"fork_success": "Tạo bản sao thành công! Nhấn vào đây để chuyển tới chủ đề vừa tạo.", "fork_success": "Tạo bản sao thành công! Nhấn vào đây để chuyển tới chủ đề vừa tạo.",
"delete_posts_instruction": "Chọn những bài viết bạn muốn xoá", "delete_posts_instruction": "Chọn những bài viết bạn muốn xoá",
"merge_topics_instruction": "Click the topics you want to merge", "merge_topics_instruction": "Click vào các chủ đề bạn muốn xác nhập",
"composer.title_placeholder": "Nhập tiêu đề cho chủ đề của bạn tại đây...", "composer.title_placeholder": "Nhập tiêu đề cho chủ đề của bạn tại đây...",
"composer.handle_placeholder": "Tên", "composer.handle_placeholder": "Tên",
"composer.discard": "Huỷ bỏ", "composer.discard": "Huỷ bỏ",

@ -9,7 +9,7 @@
"topics_marked_as_read.success": "Chủ đề được đánh dấu đã đọc", "topics_marked_as_read.success": "Chủ đề được đánh dấu đã đọc",
"all-topics": "Toàn bộ chủ đề", "all-topics": "Toàn bộ chủ đề",
"new-topics": "Các chủ đề mới", "new-topics": "Các chủ đề mới",
"watched-topics": "Các chủ đề đã xem", "watched-topics": "Các chủ đề đuợc quan tâm",
"unreplied-topics": "Unreplied Topics", "unreplied-topics": "Chủ đề chưa có phản hồi nào",
"multiple-categories-selected": "Multiple Selected" "multiple-categories-selected": "Chọn nhiều cùng lúc"
} }

@ -24,17 +24,17 @@
"profile_views": "Số lượt người ghé thăm", "profile_views": "Số lượt người ghé thăm",
"reputation": "Mức uy tín", "reputation": "Mức uy tín",
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"watched": "Đã theo dõi", "watched": "Đã quan tâm",
"ignored": "Ignored", "ignored": "Phớt lờ",
"followers": "Số người theo dõi", "followers": "Số người theo dõi",
"following": "Đang theo dõi", "following": "Đang theo dõi",
"aboutme": "Giới thiệu bản thân", "aboutme": "Giới thiệu bản thân",
"signature": "Chữ ký", "signature": "Chữ ký",
"birthday": "Ngày sinh ", "birthday": "Ngày sinh ",
"chat": "Chat", "chat": "Chat",
"chat_with": "Continue chat with %1", "chat_with": "Tiếp tục chat với %1",
"new_chat_with": "Start new chat with %1", "new_chat_with": "Bắt đầu chat với %1",
"flag-profile": "Flag Profile", "flag-profile": "Cảnh báo người dùng",
"follow": "Theo dõi", "follow": "Theo dõi",
"unfollow": "Hủy theo dõi", "unfollow": "Hủy theo dõi",
"more": "Xem thêm", "more": "Xem thêm",
@ -61,14 +61,14 @@
"username_taken_workaround": "Tên truy cập này đã tồn tại, vì vậy chúng tôi đã sửa đổi nó một chút. Tên truy cập của bạn giờ là <strong>%1</strong>", "username_taken_workaround": "Tên truy cập này đã tồn tại, vì vậy chúng tôi đã sửa đổi nó một chút. Tên truy cập của bạn giờ là <strong>%1</strong>",
"password_same_as_username": "Mật khẩu của bạn trùng với tên đăng nhập, vui lòng chọn một mật khẩu khác.", "password_same_as_username": "Mật khẩu của bạn trùng với tên đăng nhập, vui lòng chọn một mật khẩu khác.",
"password_same_as_email": "Mật khẩu của bạn trùng với email của bạn, hãy chọn mật khẩu khác.", "password_same_as_email": "Mật khẩu của bạn trùng với email của bạn, hãy chọn mật khẩu khác.",
"weak_password": "Weak password.", "weak_password": "Mật khẩu yếu",
"upload_picture": "Tải lên hình ảnh", "upload_picture": "Tải lên hình ảnh",
"upload_a_picture": "Tải lên một hình ảnh", "upload_a_picture": "Tải lên một hình ảnh",
"remove_uploaded_picture": "Xoá ảnh đã tải lên", "remove_uploaded_picture": "Xoá ảnh đã tải lên",
"upload_cover_picture": "Tải ảnh bìa lên", "upload_cover_picture": "Tải ảnh bìa lên",
"remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?", "remove_cover_picture_confirm": "Bạn có thật sự muốn xóa hình ảnh này?",
"crop_picture": "Crop picture", "crop_picture": "Cắt nhỏ hình ảnh",
"upload_cropped_picture": "Crop and upload", "upload_cropped_picture": "Cắt nhỏ và đăng tải",
"settings": "Thiết lập", "settings": "Thiết lập",
"show_email": "Hiện Email của tôi", "show_email": "Hiện Email của tôi",
"show_fullname": "Hiện tên đầy đủ", "show_fullname": "Hiện tên đầy đủ",
@ -84,8 +84,8 @@
"follows_no_one": "Người dùng này hiện chưa theo dõi ai :(", "follows_no_one": "Người dùng này hiện chưa theo dõi ai :(",
"has_no_posts": "Thành viên này chưa đăng bài viết nào cả.", "has_no_posts": "Thành viên này chưa đăng bài viết nào cả.",
"has_no_topics": "Thành viên này chưa đăng chủ đề nào cả.", "has_no_topics": "Thành viên này chưa đăng chủ đề nào cả.",
"has_no_watched_topics": "Thành viên này chưa theo dõi chủ đề nào cả.", "has_no_watched_topics": "Thành viên này chưa quan tâm chủ đề nào cả.",
"has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_ignored_topics": "Người dùng này chưa bỏ qua bất cứ chủ đề nào.",
"has_no_upvoted_posts": "Thành viên này chưa tán thành bài viết nào cả.", "has_no_upvoted_posts": "Thành viên này chưa tán thành bài viết nào cả.",
"has_no_downvoted_posts": "Thành viên này chưa phản đối bài viết nào cả.", "has_no_downvoted_posts": "Thành viên này chưa phản đối bài viết nào cả.",
"has_no_voted_posts": "Thành viên này không có bài viết nào được tán thành.", "has_no_voted_posts": "Thành viên này không có bài viết nào được tán thành.",
@ -94,18 +94,18 @@
"paginate_description": "Phân trang chủ đề và bài viết thay vì sử dụng cuộn vô hạn", "paginate_description": "Phân trang chủ đề và bài viết thay vì sử dụng cuộn vô hạn",
"topics_per_page": "Số chủ đề trong một trang", "topics_per_page": "Số chủ đề trong một trang",
"posts_per_page": "Số bài viết trong một trang", "posts_per_page": "Số bài viết trong một trang",
"max_items_per_page": "Maximum %1", "max_items_per_page": "Tối đa %1",
"notification_sounds": "Phát âm thanh khi bạn nhận được thông báo mới", "notification_sounds": "Phát âm thanh khi bạn nhận được thông báo mới",
"notifications_and_sounds": "Thông báo & Âm thanh", "notifications_and_sounds": "Thông báo & Âm thanh",
"incoming-message-sound": "Âm báo tin nhắn tới", "incoming-message-sound": "Âm báo tin nhắn tới",
"outgoing-message-sound": "Âm báo tin nhắn đi", "outgoing-message-sound": "Âm báo tin nhắn đi",
"notification-sound": "Âm thanh thông báo", "notification-sound": "Âm thanh thông báo",
"no-sound": "Không có âm thanh", "no-sound": "Không có âm thanh",
"upvote-notif-freq": "Upvote Notification Frequency", "upvote-notif-freq": "Tần suất thông báo lượt thích",
"upvote-notif-freq.all": "All Upvotes", "upvote-notif-freq.all": "Toàn bộ lượt thích",
"upvote-notif-freq.everyTen": "Every Ten Upvotes", "upvote-notif-freq.everyTen": "Mỗi 10 lượt thích",
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...", "upvote-notif-freq.logarithmic": "Cứ mỗi 10, 100, 1000...",
"upvote-notif-freq.disabled": "Disabled", "upvote-notif-freq.disabled": "Bị khóa",
"browsing": "Đang xem cài đặt", "browsing": "Đang xem cài đặt",
"open_links_in_new_tab": "Mở link trong tab mới.", "open_links_in_new_tab": "Mở link trong tab mới.",
"enable_topic_searching": "Bật In-topic Searching", "enable_topic_searching": "Bật In-topic Searching",
@ -113,8 +113,8 @@
"delay_image_loading": "Việc tải ảnh đang bị chậm", "delay_image_loading": "Việc tải ảnh đang bị chậm",
"image_load_delay_help": "Nếu được bật, toàn bộ ảnh trong chủ đề sẽ chỉ được tải khi người dùng kéo chuột tới", "image_load_delay_help": "Nếu được bật, toàn bộ ảnh trong chủ đề sẽ chỉ được tải khi người dùng kéo chuột tới",
"scroll_to_my_post": "Sau khi đăng một trả lời thì hiển thị bài viết mới", "scroll_to_my_post": "Sau khi đăng một trả lời thì hiển thị bài viết mới",
"follow_topics_you_reply_to": "Theo dõi những chủ đề mà bạn đã bình luận", "follow_topics_you_reply_to": "Những chủ đề bạn quan tâm và từng bình luận",
"follow_topics_you_create": "Theo dõi những chủ đề do bạn t", "follow_topics_you_create": "Theo dõi chủ đề bạn tạo",
"grouptitle": "Tên nhóm", "grouptitle": "Tên nhóm",
"no-group-title": "Không có tên nhóm", "no-group-title": "Không có tên nhóm",
"select-skin": "Chọn một giao diện", "select-skin": "Chọn một giao diện",
@ -126,9 +126,9 @@
"sso.title": "Đăng nhập một lần", "sso.title": "Đăng nhập một lần",
"sso.associated": "Đã liên kết với", "sso.associated": "Đã liên kết với",
"sso.not-associated": "Nhấn vào đây để liên kết với", "sso.not-associated": "Nhấn vào đây để liên kết với",
"sso.dissociate": "Dissociate", "sso.dissociate": "Tách khỏi",
"sso.dissociate-confirm-title": "Confirm Dissociation", "sso.dissociate-confirm-title": "Xác nhận việc tách khỏi",
"sso.dissociate-confirm": "Are you sure you wish to dissociate your account from %1?", "sso.dissociate-confirm": "Bạn có chắc chắn muốn tách tài khoản của mình khỏi %1?",
"info.latest-flags": "Cờ mới nhất", "info.latest-flags": "Cờ mới nhất",
"info.no-flags": "Không có bài viết nào bị gắn c", "info.no-flags": "Không có bài viết nào bị gắn c",
"info.ban-history": "Lịch sử khóa tài khoản gần đây", "info.ban-history": "Lịch sử khóa tài khoản gần đây",
@ -141,5 +141,5 @@
"info.email-history": "Lịch sử email", "info.email-history": "Lịch sử email",
"info.moderation-note": "Ghi chú quản lí", "info.moderation-note": "Ghi chú quản lí",
"info.moderation-note.success": "Đã lưu ghi chú quản l", "info.moderation-note.success": "Đã lưu ghi chú quản l",
"info.moderation-note.add": "Add note" "info.moderation-note.add": "Thêm ghi chú"
} }

@ -75,6 +75,7 @@ define('forum/footer', ['notifications', 'chat', 'components', 'translator'], fu
socket.on('event:new_post', onNewPost); socket.on('event:new_post', onNewPost);
} }
// DEPRECATED: remove in 1.8.0
if (app.user.uid) { if (app.user.uid) {
socket.emit('user.getUnreadCounts', function (err, data) { socket.emit('user.getUnreadCounts', function (err, data) {
if (err) { if (err) {

@ -117,7 +117,6 @@ define('alerts', ['translator', 'components', 'benchpress'], function (translato
alert alert
.on('mouseenter', function () { .on('mouseenter', function () {
$(this).css('transition-duration', 0); $(this).css('transition-duration', 0);
console.log(this);
}); });
} }

@ -137,14 +137,14 @@ define('notifications', ['sounds', 'translator', 'components', 'navigator', 'ben
return parseInt(a.datetime, 10) > parseInt(b.datetime, 10) ? -1 : 1; return parseInt(a.datetime, 10) > parseInt(b.datetime, 10) ? -1 : 1;
}); });
translator.toggleTimeagoShorthand(); translator.toggleTimeagoShorthand(function () {
for (var i = 0; i < notifs.length; i += 1) { for (var i = 0; i < notifs.length; i += 1) {
notifs[i].timeago = $.timeago(new Date(parseInt(notifs[i].datetime, 10))); notifs[i].timeago = $.timeago(new Date(parseInt(notifs[i].datetime, 10)));
} }
translator.toggleTimeagoShorthand(); translator.toggleTimeagoShorthand();
Benchpress.parse('partials/notifications_list', { notifications: notifs }, function (html) {
Benchpress.parse('partials/notifications_list', { notifications: notifs }, function (html) { notifList.translateHtml(html);
notifList.translateHtml(html); });
}); });
}); });
}; };

@ -576,23 +576,29 @@
adaptor.getTranslations(language, namespace, callback); adaptor.getTranslations(language, namespace, callback);
}, },
toggleTimeagoShorthand: function toggleTimeagoShorthand() { toggleTimeagoShorthand: function toggleTimeagoShorthand(callback) {
var tmp = assign({}, jQuery.timeago.settings.strings); function toggle() {
jQuery.timeago.settings.strings = assign({}, adaptor.timeagoShort); var tmp = assign({}, jQuery.timeago.settings.strings);
adaptor.timeagoShort = assign({}, tmp); jQuery.timeago.settings.strings = assign({}, adaptor.timeagoShort);
adaptor.timeagoShort = assign({}, tmp);
if (typeof callback === 'function') {
callback();
}
}
if (!adaptor.timeagoShort) {
var languageCode = utils.userLangToTimeagoCode(config.userLang);
var originalSettings = assign({}, jQuery.timeago.settings.strings);
jQuery.getScript(config.relative_path + '/assets/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '-short.js').done(function () {
adaptor.timeagoShort = assign({}, jQuery.timeago.settings.strings);
jQuery.timeago.settings.strings = assign({}, originalSettings);
toggle();
});
} else {
toggle();
}
}, },
prepareDOM: function prepareDOM() { prepareDOM: function prepareDOM() {
// Load the appropriate timeago locale file,
// and correct NodeBB language codes to timeago codes, if necessary
var languageCode = utils.userLangToTimeagoCode(config.userLang);
adaptor.timeagoShort = assign({}, jQuery.timeago.settings.strings);
jQuery.getScript(config.relative_path + '/assets/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '-short.js').done(function () {
// Switch back to long-form
adaptor.toggleTimeagoShorthand();
});
// Add directional code if necessary // Add directional code if necessary
adaptor.translate('[[language:dir]]', function (value) { adaptor.translate('[[language:dir]]', function (value) {
if (value && !$('html').attr('data-dir')) { if (value && !$('html').attr('data-dir')) {

@ -3,7 +3,7 @@
var fs = require('fs'); var fs = require('fs');
var path = require('path'); var path = require('path');
var packageInstall = require('../meta/package-install'); var packageInstall = require('./package-install');
var dirname = require('./paths').baseDir; var dirname = require('./paths').baseDir;
// check to make sure dependencies are installed // check to make sure dependencies are installed
@ -12,12 +12,17 @@ try {
} catch (e) { } catch (e) {
if (e.code === 'ENOENT') { if (e.code === 'ENOENT') {
console.warn('package.json not found.'); console.warn('package.json not found.');
console.log('Populating package.json...\n'); console.log('Populating package.json...');
packageInstall.updatePackageFile(); packageInstall.updatePackageFile();
packageInstall.preserveExtraneousPlugins(); packageInstall.preserveExtraneousPlugins();
console.log('OK'.green + '\n'.reset); try {
require('colors');
console.log('OK'.green);
} catch (e) {
console.log('OK');
}
} else { } else {
throw e; throw e;
} }
@ -33,7 +38,7 @@ try {
console.warn('Dependencies not yet installed.'); console.warn('Dependencies not yet installed.');
console.log('Installing them now...\n'); console.log('Installing them now...\n');
packageInstall.npmInstallProduction(); packageInstall.installAll();
require('colors'); require('colors');
console.log('OK'.green + '\n'.reset); console.log('OK'.green + '\n'.reset);

@ -29,15 +29,27 @@ function updatePackageFile() {
exports.updatePackageFile = updatePackageFile; exports.updatePackageFile = updatePackageFile;
function npmInstallProduction() { function installAll() {
process.stdout.write('\n'); process.stdout.write(' started\n'.green);
cproc.execSync('npm i --production', {
var prod = global.env !== 'development';
var command = 'npm install';
try {
var packageManager = require('nconf').get('package_manager');
if (packageManager === 'yarn') {
command = 'yarn';
}
} catch (e) {
// ignore
}
cproc.execSync(command + (prod ? ' --production' : ''), {
cwd: path.join(__dirname, '../../'), cwd: path.join(__dirname, '../../'),
stdio: [0, 1, 2], stdio: [0, 1, 2],
}); });
} }
exports.npmInstallProduction = npmInstallProduction; exports.installAll = installAll;
function preserveExtraneousPlugins() { function preserveExtraneousPlugins() {
// Skip if `node_modules/` is not found or inaccessible // Skip if `node_modules/` is not found or inaccessible

@ -7,9 +7,18 @@ var cproc = require('child_process');
var semver = require('semver'); var semver = require('semver');
var fs = require('fs'); var fs = require('fs');
var path = require('path'); var path = require('path');
var nconf = require('nconf');
var paths = require('./paths'); var paths = require('./paths');
var packageManager = nconf.get('package_manager');
var packageManagerExecutable = packageManager === 'yarn' ? 'yarn' : 'npm';
var packageManagerInstallArgs = packageManager === 'yarn' ? ['add'] : ['install', '--save'];
if (process.platform === 'win32') {
packageManagerExecutable += '.cmd';
}
var dirname = paths.baseDir; var dirname = paths.baseDir;
function getModuleVersions(modules, callback) { function getModuleVersions(modules, callback) {
@ -85,7 +94,7 @@ function getInstalledPlugins(callback) {
} }
function getCurrentVersion(callback) { function getCurrentVersion(callback) {
fs.readFile(path.join(dirname, 'package.json'), { encoding: 'utf-8' }, function (err, pkg) { fs.readFile(path.join(dirname, 'install/package.json'), { encoding: 'utf-8' }, function (err, pkg) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
@ -106,8 +115,8 @@ function checkPlugins(standalone, callback) {
async.waterfall([ async.waterfall([
async.apply(async.parallel, { async.apply(async.parallel, {
plugins: async.apply(getInstalledPlugins), plugins: getInstalledPlugins,
version: async.apply(getCurrentVersion), version: getCurrentVersion,
}), }),
function (payload, next) { function (payload, next) {
var toCheck = Object.keys(payload.plugins); var toCheck = Object.keys(payload.plugins);
@ -194,17 +203,16 @@ function upgradePlugins(callback) {
if (['y', 'Y', 'yes', 'YES'].indexOf(result.upgrade) !== -1) { if (['y', 'Y', 'yes', 'YES'].indexOf(result.upgrade) !== -1) {
console.log('\nUpgrading packages...'); console.log('\nUpgrading packages...');
var args = ['i']; var args = packageManagerInstallArgs.concat(found.map(function (suggestObj) {
found.forEach(function (suggestObj) { return suggestObj.name + '@' + suggestObj.suggested;
args.push(suggestObj.name + '@' + suggestObj.suggested); }));
});
cproc.execFile((process.platform === 'win32') ? 'npm.cmd' : 'npm', args, { stdio: 'ignore' }, function (err) { cproc.execFile(packageManagerExecutable, args, { stdio: 'ignore' }, function (err) {
callback(err, true); callback(err, false);
}); });
} else { } else {
console.log('Package upgrades skipped'.yellow + '. Check for upgrades at any time by running "'.reset + './nodebb upgrade -p'.green + '".'.reset); console.log('Package upgrades skipped'.yellow + '. Check for upgrades at any time by running "'.reset + './nodebb upgrade -p'.green + '".'.reset);
callback(null, true); callback();
} }
}); });
}); });

@ -3,7 +3,7 @@
var async = require('async'); var async = require('async');
var nconf = require('nconf'); var nconf = require('nconf');
var packageInstall = require('../meta/package-install'); var packageInstall = require('./package-install');
var upgrade = require('../upgrade'); var upgrade = require('../upgrade');
var build = require('../meta/build'); var build = require('../meta/build');
var db = require('../database'); var db = require('../database');
@ -16,13 +16,14 @@ var steps = {
handler: function (next) { handler: function (next) {
packageInstall.updatePackageFile(); packageInstall.updatePackageFile();
packageInstall.preserveExtraneousPlugins(); packageInstall.preserveExtraneousPlugins();
process.stdout.write(' OK\n'.green);
next(); next();
}, },
}, },
install: { install: {
message: 'Bringing base dependencies up to date...', message: 'Bringing base dependencies up to date...',
handler: function (next) { handler: function (next) {
packageInstall.npmInstallProduction(); packageInstall.installAll();
next(); next();
}, },
}, },
@ -54,11 +55,8 @@ function runSteps(tasks) {
tasks = tasks.map(function (key, i) { tasks = tasks.map(function (key, i) {
return function (next) { return function (next) {
process.stdout.write('\n' + ((i + 1) + '. ').bold + steps[key].message.yellow); process.stdout.write('\n' + ((i + 1) + '. ').bold + steps[key].message.yellow);
return steps[key].handler(function (err, inhibitOk) { return steps[key].handler(function (err) {
if (err) { return next(err); } if (err) { return next(err); }
if (!inhibitOk) {
process.stdout.write(' OK'.green + '\n'.reset);
}
next(); next();
}); });
}; };

@ -108,6 +108,7 @@ module.exports = function (db, module) {
if (!data) { if (!data) {
return callback(null, null); return callback(null, null);
} }
delete data.expireAt;
var keys = Object.keys(data); var keys = Object.keys(data);
if (keys.length === 4 && data.hasOwnProperty('_key') && data.hasOwnProperty('score') && data.hasOwnProperty('value')) { if (keys.length === 4 && data.hasOwnProperty('_key') && data.hasOwnProperty('score') && data.hasOwnProperty('value')) {
return callback(null, 'zset'); return callback(null, 'zset');

@ -212,7 +212,7 @@ function build(targets, callback) {
} }
winston.info('[build] Asset compilation successful. Completed in ' + totalTime + 'sec.'); winston.info('[build] Asset compilation successful. Completed in ' + totalTime + 'sec.');
callback(null, true); callback();
}); });
} }

@ -6,6 +6,8 @@ var jsesc = require('jsesc');
var db = require('../database'); var db = require('../database');
var user = require('../user'); var user = require('../user');
var topics = require('../topics');
var messaging = require('../messaging');
var meta = require('../meta'); var meta = require('../meta');
var plugins = require('../plugins'); var plugins = require('../plugins');
var navigation = require('../navigation'); var navigation = require('../navigation');
@ -113,10 +115,16 @@ module.exports = function (middleware) {
next(null, translated); next(null, translated);
}); });
}, },
navigation: async.apply(navigation.get), navigation: navigation.get,
tags: async.apply(meta.tags.parse, req, data, res.locals.metaTags, res.locals.linkTags), tags: async.apply(meta.tags.parse, req, data, res.locals.metaTags, res.locals.linkTags),
banned: async.apply(user.isBanned, req.uid), banned: async.apply(user.isBanned, req.uid),
banReason: async.apply(user.getBannedReason, req.uid), banReason: async.apply(user.getBannedReason, req.uid),
unreadTopicCount: async.apply(topics.getTotalUnread, req.uid),
unreadNewTopicCount: async.apply(topics.getTotalUnread, req.uid, 'new'),
unreadWatchedTopicCount: async.apply(topics.getTotalUnread, req.uid, 'watched'),
unreadChatCount: async.apply(messaging.getUnreadCount, req.uid),
unreadNotificationCount: async.apply(user.notifications.getUnreadCount, req.uid),
}, next); }, next);
}, },
function (results, next) { function (results, next) {
@ -136,8 +144,45 @@ module.exports = function (middleware) {
setBootswatchCSS(templateValues, res.locals.config); setBootswatchCSS(templateValues, res.locals.config);
var unreadCount = {
topic: results.unreadTopicCount || 0,
newTopic: results.unreadNewTopicCount || 0,
watchedTopic: results.unreadWatchedTopicCount || 0,
chat: results.unreadChatCount || 0,
notification: results.unreadNotificationCount || 0,
};
Object.keys(unreadCount).forEach(function (key) {
if (unreadCount[key] > 99) {
unreadCount[key] = '99+';
}
});
results.navigation = results.navigation.map(function (item) {
if (item.originalRoute === '/unread' && results.unreadTopicCount > 0) {
return Object.assign({}, item, {
content: unreadCount.topic,
iconClass: item.iconClass + ' unread-count',
});
}
if (item.originalRoute === '/unread/new' && results.unreadNewTopicCount > 0) {
return Object.assign({}, item, {
content: unreadCount.newTopic,
iconClass: item.iconClass + ' unread-count',
});
}
if (item.originalRoute === '/unread/watched' && results.unreadWatchedTopicCount > 0) {
return Object.assign({}, item, {
content: unreadCount.watchedTopic,
iconClass: item.iconClass + ' unread-count',
});
}
return item;
});
templateValues.browserTitle = results.browserTitle; templateValues.browserTitle = results.browserTitle;
templateValues.navigation = results.navigation; templateValues.navigation = results.navigation;
templateValues.unreadCount = unreadCount;
templateValues.metaTags = results.tags.meta; templateValues.metaTags = results.tags.meta;
templateValues.linkTags = results.tags.link; templateValues.linkTags = results.tags.link;
templateValues.isAdmin = results.user.isAdmin; templateValues.isAdmin = results.user.isAdmin;

@ -19,15 +19,16 @@ navigation.get = function (callback) {
data = data.filter(function (item) { data = data.filter(function (item) {
return item && item.enabled; return item && item.enabled;
}).map(function (item) { }).map(function (item) {
item.originalRoute = item.route;
if (!item.route.startsWith('http')) { if (!item.route.startsWith('http')) {
item.route = nconf.get('relative_path') + item.route; item.route = nconf.get('relative_path') + item.route;
} }
for (var i in item) { Object.keys(item).forEach(function (key) {
if (item.hasOwnProperty(i)) { item[key] = translator.unescape(item[key]);
item[i] = translator.unescape(item[i]); });
}
}
return item; return item;
}); });

@ -220,7 +220,7 @@ function pushToUids(uids, notification, callback) {
async.eachLimit(uids, 3, function (uid, next) { async.eachLimit(uids, 3, function (uid, next) {
emailer.send('notification', uid, { emailer.send('notification', uid, {
path: notification.path, path: notification.path,
subject: '[[notifications:new_notification_from, ' + meta.config.title + ']]', subject: notification.subject || '[[notifications:new_notification_from, ' + meta.config.title + ']]',
intro: utils.stripHTMLTags(notification.bodyShort), intro: utils.stripHTMLTags(notification.bodyShort),
body: utils.stripHTMLTags(notification.bodyLong || ''), body: utils.stripHTMLTags(notification.bodyLong || ''),
showUnsubscribe: true, showUnsubscribe: true,

@ -13,6 +13,23 @@ var meta = require('../meta');
var pubsub = require('../pubsub'); var pubsub = require('../pubsub');
var events = require('../events'); var events = require('../events');
var packageManager = nconf.get('package_manager') === 'yarn' ? 'yarn' : 'npm';
var packageManagerExecutable = packageManager;
var packageManagerCommands = {
yarn: {
install: 'add',
uninstall: 'remove',
},
npm: {
install: 'install',
uninstall: 'uninstall',
},
};
if (process.platform === 'win32') {
packageManagerExecutable += '.cmd';
}
module.exports = function (Plugins) { module.exports = function (Plugins) {
if (nconf.get('isPrimary') === 'true') { if (nconf.get('isPrimary') === 'true') {
pubsub.on('plugins:toggleInstall', function (data) { pubsub.on('plugins:toggleInstall', function (data) {
@ -95,7 +112,7 @@ module.exports = function (Plugins) {
setImmediate(next); setImmediate(next);
}, },
function (next) { function (next) {
runNpmCommand(type, id, version || 'latest', next); runPackageManagerCommand(type, id, version || 'latest', next);
}, },
function (next) { function (next) {
Plugins.get(id, next); Plugins.get(id, next);
@ -107,8 +124,12 @@ module.exports = function (Plugins) {
], callback); ], callback);
} }
function runNpmCommand(command, pkgName, version, callback) { function runPackageManagerCommand(command, pkgName, version, callback) {
cproc.execFile((process.platform === 'win32') ? 'npm.cmd' : 'npm', [command, pkgName + (command === 'install' ? '@' + version : ''), '--save'], function (err, stdout) { cproc.execFile(packageManagerExecutable, [
packageManagerCommands[packageManager][command],
pkgName + (command === 'install' ? '@' + version : ''),
'--save',
], function (err, stdout) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
@ -125,7 +146,7 @@ module.exports = function (Plugins) {
function upgrade(id, version, callback) { function upgrade(id, version, callback) {
async.waterfall([ async.waterfall([
async.apply(runNpmCommand, 'install', id, version || 'latest'), async.apply(runPackageManagerCommand, 'install', id, version || 'latest'),
function (next) { function (next) {
Plugins.isActive(id, next); Plugins.isActive(id, next);
}, },

@ -1,6 +1,7 @@
'use strict'; 'use strict';
var async = require('async'); var async = require('async');
var winston = require('winston');
var user = require('../../user'); var user = require('../../user');
var meta = require('../../meta'); var meta = require('../../meta');
@ -112,7 +113,12 @@ module.exports = function (SocketUser) {
reason: reason, reason: reason,
}; };
emailer.send('banned', uid, data, next); emailer.send('banned', uid, data, function (err) {
if (err) {
winston.error('[emailer.send] ' + err.message);
}
next();
});
}, },
function (next) { function (next) {
user.ban(uid, until, reason, next); user.ban(uid, until, reason, next);

@ -9,6 +9,7 @@ var notifications = require('../notifications');
var privileges = require('../privileges'); var privileges = require('../privileges');
var plugins = require('../plugins'); var plugins = require('../plugins');
var utils = require('../utils'); var utils = require('../utils');
var meta = require('../meta');
module.exports = function (Topics) { module.exports = function (Topics) {
Topics.toggleFollow = function (tid, uid, callback) { Topics.toggleFollow = function (tid, uid, callback) {
@ -219,6 +220,7 @@ module.exports = function (Topics) {
notifications.create({ notifications.create({
type: 'new-reply', type: 'new-reply',
subject: '[' + (meta.config.title || 'NodeBB') + '] ' + title,
bodyShort: '[[notifications:user_posted_to, ' + postData.user.username + ', ' + titleEscaped + ']]', bodyShort: '[[notifications:user_posted_to, ' + postData.user.username + ', ' + titleEscaped + ']]',
bodyLong: postData.content, bodyLong: postData.content,
pid: postData.pid, pid: postData.pid,

@ -205,7 +205,7 @@ Upgrade.incrementProgress = function (value) {
if (this.total) { if (this.total) {
percentage = Math.floor((this.current / this.total) * 100) + '%'; percentage = Math.floor((this.current / this.total) * 100) + '%';
filled = Math.floor((this.current / this.total) * 15); filled = Math.floor((this.current / this.total) * 15);
unfilled = Math.min(0, 15 - filled); unfilled = Math.max(0, 15 - filled);
} }
readline.cursorTo(process.stdout, 0); readline.cursorTo(process.stdout, 0);

@ -31,7 +31,7 @@ widgets.render = function (uid, options, callback) {
var returnData = {}; var returnData = {};
async.each(locations, function (location, done) { async.each(locations, function (location, done) {
widgetsByLocation[location] = (data.global[location] || []).concat(data[options.template][location] || []); widgetsByLocation[location] = (data[options.template][location] || []).concat(data.global[location] || []);
if (!widgetsByLocation[location].length) { if (!widgetsByLocation[location].length) {
return done(null, { location: location, widgets: [] }); return done(null, { location: location, widgets: [] });

Loading…
Cancel
Save