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

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

@ -2,7 +2,7 @@
"name": "nodebb",
"license": "GPL-3.0",
"description": "NodeBB Forum",
"version": "1.7.2",
"version": "1.7.3",
"homepage": "http://www.nodebb.org",
"repository": {
"type": "git",
@ -17,89 +17,89 @@
"coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage"
},
"dependencies": {
"ace-builds": "^1.2.9",
"async": "2.6.0",
"autoprefixer": "7.1.6",
"bcryptjs": "2.4.3",
"benchpressjs": "^1.2.0",
"body-parser": "^1.18.2",
"bootstrap": "^3.3.7",
"chart.js": "^2.7.0",
"colors": "^1.1.2",
"compression": "^1.7.1",
"commander": "^2.11.0",
"connect-ensure-login": "^0.1.1",
"connect-flash": "^0.1.1",
"connect-mongo": "2.0.0",
"connect-multiparty": "^2.1.0",
"connect-redis": "3.3.2",
"cookie-parser": "^1.4.3",
"cron": "^1.3.0",
"cropperjs": "^1.1.3",
"csurf": "^1.9.0",
"daemon": "^1.1.0",
"express": "^4.16.2",
"express-session": "^1.15.6",
"express-useragent": "1.0.8",
"graceful-fs": "^4.1.11",
"html-to-text": "3.3.0",
"ipaddr.js": "^1.5.4",
"jimp": "0.2.28",
"jquery": "^3.2.1",
"jsesc": "2.5.1",
"json-2-csv": "^2.1.2",
"less": "^2.7.2",
"lodash": "^4.17.4",
"logrotate-stream": "^0.2.5",
"lru-cache": "4.1.1",
"material-design-lite": "^1.3.0",
"mime": "^2.0.3",
"mkdirp": "^0.5.1",
"mongodb": "2.2.33",
"morgan": "^1.9.0",
"mousetrap": "^1.6.1",
"nconf": "^0.9.1",
"nodebb-plugin-composer-default": "6.0.7",
"nodebb-plugin-dbsearch": "2.0.9",
"nodebb-plugin-emoji": "2.0.7",
"nodebb-plugin-emoji-android": "2.0.0",
"nodebb-plugin-markdown": "8.2.2",
"nodebb-plugin-mentions": "2.2.2",
"nodebb-plugin-soundpack-default": "1.0.0",
"nodebb-plugin-spam-be-gone": "0.5.1",
"nodebb-rewards-essentials": "0.0.9",
"nodebb-theme-lavender": "5.0.0",
"nodebb-theme-persona": "7.2.7",
"nodebb-theme-slick": "1.1.2",
"nodebb-theme-vanilla": "8.1.4",
"nodebb-widget-essentials": "4.0.1",
"nodemailer": "4.4.0",
"passport": "^0.4.0",
"passport-local": "1.0.0",
"postcss": "6.0.14",
"postcss-clean": "1.1.0",
"promise-polyfill": "^6.0.2",
"prompt": "^1.0.0",
"redis": "2.8.0",
"request": "2.83.0",
"rimraf": "2.6.2",
"rss": "^1.2.2",
"sanitize-html": "^1.14.1",
"semver": "^5.4.1",
"serve-favicon": "^2.4.5",
"sitemap": "^1.13.0",
"socket.io": "2.0.4",
"socket.io-client": "2.0.4",
"socket.io-redis": "5.2.0",
"socketio-wildcard": "2.0.0",
"spdx-license-list": "^3.0.1",
"toobusy-js": "^0.5.1",
"uglify-js": "^3.1.5",
"validator": "9.1.2",
"winston": "^2.4.0",
"xml": "^1.0.1",
"xregexp": "3.2.0",
"zxcvbn": "^4.4.2"
"ace-builds": "^1.2.9",
"async": "2.6.0",
"autoprefixer": "7.1.6",
"bcryptjs": "2.4.3",
"benchpressjs": "^1.2.0",
"body-parser": "^1.18.2",
"bootstrap": "^3.3.7",
"chart.js": "^2.7.0",
"colors": "^1.1.2",
"compression": "^1.7.1",
"commander": "^2.11.0",
"connect-ensure-login": "^0.1.1",
"connect-flash": "^0.1.1",
"connect-mongo": "2.0.0",
"connect-multiparty": "^2.1.0",
"connect-redis": "3.3.2",
"cookie-parser": "^1.4.3",
"cron": "^1.3.0",
"cropperjs": "^1.1.3",
"csurf": "^1.9.0",
"daemon": "^1.1.0",
"express": "^4.16.2",
"express-session": "^1.15.6",
"express-useragent": "1.0.8",
"graceful-fs": "^4.1.11",
"html-to-text": "3.3.0",
"ipaddr.js": "^1.5.4",
"jimp": "0.2.28",
"jquery": "^3.2.1",
"jsesc": "2.5.1",
"json-2-csv": "^2.1.2",
"less": "^2.7.2",
"lodash": "^4.17.4",
"logrotate-stream": "^0.2.5",
"lru-cache": "4.1.1",
"material-design-lite": "^1.3.0",
"mime": "^2.0.3",
"mkdirp": "^0.5.1",
"mongodb": "2.2.33",
"morgan": "^1.9.0",
"mousetrap": "^1.6.1",
"nconf": "^0.9.1",
"nodebb-plugin-composer-default": "6.0.7",
"nodebb-plugin-dbsearch": "2.0.9",
"nodebb-plugin-emoji": "2.0.9",
"nodebb-plugin-emoji-android": "2.0.0",
"nodebb-plugin-markdown": "8.2.2",
"nodebb-plugin-mentions": "2.2.2",
"nodebb-plugin-soundpack-default": "1.0.0",
"nodebb-plugin-spam-be-gone": "0.5.1",
"nodebb-rewards-essentials": "0.0.9",
"nodebb-theme-lavender": "5.0.0",
"nodebb-theme-persona": "7.2.8",
"nodebb-theme-slick": "1.1.2",
"nodebb-theme-vanilla": "8.1.4",
"nodebb-widget-essentials": "4.0.1",
"nodemailer": "4.4.0",
"passport": "^0.4.0",
"passport-local": "1.0.0",
"postcss": "6.0.14",
"postcss-clean": "1.1.0",
"promise-polyfill": "^6.0.2",
"prompt": "^1.0.0",
"redis": "2.8.0",
"request": "2.83.0",
"rimraf": "2.6.2",
"rss": "^1.2.2",
"sanitize-html": "^1.14.1",
"semver": "^5.4.1",
"serve-favicon": "^2.4.5",
"sitemap": "^1.13.0",
"socket.io": "2.0.4",
"socket.io-client": "2.0.4",
"socket.io-redis": "5.2.0",
"socketio-wildcard": "2.0.0",
"spdx-license-list": "^3.0.1",
"toobusy-js": "^0.5.1",
"uglify-js": "^3.1.5",
"validator": "9.1.2",
"winston": "^2.4.0",
"xml": "^1.0.1",
"xregexp": "3.2.0",
"zxcvbn": "^4.4.2"
},
"devDependencies": {
"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.enable": "Povolit uživatelské CSS",
"custom-js": "Custom Javascript",
"custom-js.description": "Enter your own javascript here. It will be executed after the page is loaded completely.",
"custom-js.enable": "Enable Custom Javascript",
"custom-js": "Uživatelský Javascript",
"custom-js.description": "Zadejte zde váš javascriptový kód. Bude spuštěn, jakmile se stránka plně načte.",
"custom-js.enable": "Povolit uživatelský Javascript",
"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-css.livereload": "Povolit aktuální znovu načtení",

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

@ -2,5 +2,5 @@
"notifications": "Oznámení",
"welcome-notification": "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í",
"topics": "Stránkování témat",
"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",
"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"
}

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

@ -19,8 +19,8 @@
"themes": "Motivy",
"disable-user-skins": "Zabránit uživateli ve výběru vlastního vzhledu",
"account-protection": "Ochrana účtu",
"admin-relogin-duration": "Admin relogin duration (minutes)",
"admin-relogin-duration-help": "After a set amount of time accessing the admin section will require re-login, set to 0 to disable",
"admin-relogin-duration": "Doba pro opětovné přihlášení správce (minuty)",
"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-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)",

@ -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.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.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.",
"unsub.cta": "Chcete-li změnit tyto nastavení, klikněte zde.",
"banned.subject": "Byl jste zablokován od %1",

@ -11,7 +11,7 @@
"invalid-uid": "Neplatné ID uživatele",
"invalid-username": "Neplatné uživatelské jméno",
"invalid-email": "Neplatný e-mail",
"invalid-title": "Invalid title",
"invalid-title": "Neplatný název",
"invalid-user-data": "Neplatná uživatelská data",
"invalid-password": "Neplatné heslo",
"invalid-login-credentials": "Neplatné přihlašovací údaje",
@ -81,7 +81,7 @@
"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-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-extension": "Neplatná přípona obrázku",
"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-flag": "Pro označení tohoto příspěvku nemáte dostatečnou reputaci",
"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.",
"registration-error": "Chyba při registraci",
"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-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).",
"no-session-found": "Nebyla nalezena relace s přihlášením.",
"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-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.",
"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-reason-spam": "Spam",
"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-submit": "Předat hlášení",
"modal-submit-success": "Obsah byl označen pro moderaci.",
"modal-submit-confirm": "Confirm Submission",
"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": "Potvrdit hlášení",
"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": "Zaslání rychlé zprávy přepíše jiné zadané důvody."
}

@ -8,8 +8,8 @@
"outgoing_link_message": "Opouštíte %1",
"continue_to": "Pokračovat na %1",
"return_to": "Vrátit se na %1",
"new_notification": "Nové upozornění",
"new_notification_from": "You have a new Notification from %1",
"new_notification": "Nové oznámení",
"new_notification_from": "Máte nové upozornění od %1",
"you_have_unread_notifications": "Máte nepřečtená upozornění.",
"all": "Vše",
"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-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.",
"none": "None",
"notification_only": "Notification Only",
"email_only": "Email Only",
"notification_and_email": "Notification & Email",
"notificationType_upvote": "When someone upvotes your post",
"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_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
"notificationType_new-post-flag": "When a post is flagged",
"notificationType_new-user-flag": "When a user is flagged"
"none": "Nic",
"notification_only": "Jen oznámení",
"email_only": "Jen e-mail",
"notification_and_email": "Oznámení a e-mail",
"notificationType_upvote": "Vyjádří-li někdo souhlas s vaším příspěvkem",
"notificationType_new-topic": "Začne-li někdo sledovat příspěvky a téma",
"notificationType_new-reply": "Bude-li přidán nový příspěvek v tématu, které sledujete",
"notificationType_follow": "Začne-li vás někdo sledovat",
"notificationType_new-chat": "Obdržíte-li novou konverzační zprávu",
"notificationType_group-invite": "Obdržíte-li pozvání ke skupině",
"notificationType_new-register": "Bude-li někdo přidán do registrační fronty",
"notificationType_post-queue": "Bude-li přidán nový příspěvek do fronty",
"notificationType_new-post-flag": "Bude-li příspěvek označen",
"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/settings": "Uživatelské nastavení",
"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/downvoted": "Nesouhlasí s příspěvkem %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.purge": "Vyčistit 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": "Merge",
"thread_tools.merge_topics": "Sloučit témata",
"thread_tools.merge": "Sloučit",
"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_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_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",
"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.handle_placeholder": "Jméno",
"composer.discard": "Zrušit",

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

@ -25,7 +25,7 @@
"reputation": "Reputace",
"bookmarks": "Záložky",
"watched": "Sledován",
"ignored": "Ignored",
"ignored": "Ignorován",
"followers": "Sledují ho",
"following": "Sleduje",
"aboutme": "O mně",
@ -85,7 +85,7 @@
"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_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_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",
@ -101,11 +101,11 @@
"outgoing-message-sound": "Zvuk odchozí zprávy",
"notification-sound": "Zvuk oznámení",
"no-sound": "Bez zvuku",
"upvote-notif-freq": "Upvote Notification Frequency",
"upvote-notif-freq.all": "All Upvotes",
"upvote-notif-freq.everyTen": "Every Ten Upvotes",
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...",
"upvote-notif-freq.disabled": "Disabled",
"upvote-notif-freq": "Frekvence upozornění na souhlasy",
"upvote-notif-freq.all": "Všechny souhlasy",
"upvote-notif-freq.everyTen": "Každý desátý souhlas",
"upvote-notif-freq.logarithmic": "Dle 10, 100, 1000...",
"upvote-notif-freq.disabled": "Zakázáno",
"browsing": "Nastavení prohlížení",
"open_links_in_new_tab": "Otevřít odchozí odkaz v nové záložce",
"enable_topic_searching": "Povolit vyhledávání v tématu",
@ -126,9 +126,9 @@
"sso.title": "Služby jednotného přihlášení",
"sso.associated": "Přiřazeno k",
"sso.not-associated": "Zde klikněte pro přiřazení k",
"sso.dissociate": "Dissociate",
"sso.dissociate-confirm-title": "Confirm Dissociation",
"sso.dissociate-confirm": "Are you sure you wish to dissociate your account from %1?",
"sso.dissociate": "Odloučit",
"sso.dissociate-confirm-title": "Potvrdit odloučení",
"sso.dissociate-confirm": "Jste si jist/a, že chcete odloučit váš účet z %1?",
"info.latest-flags": "Poslední označené",
"info.no-flags": "Nebyly nalezeny žádné označené příspěvky",
"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.enable": "Activer les CSS personnalisés",
"custom-js": "Custom Javascript",
"custom-js.description": "Enter your own javascript here. It will be executed after the page is loaded completely.",
"custom-js.enable": "Enable Custom Javascript",
"custom-js": "Javascript personnalisé",
"custom-js.description": "Entrez votre Javascript ici. Celui-ci sera exécute après le chargement complet de la page.",
"custom-js.enable": "Activer le Javascript 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.",

@ -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.text2": "Per confermare il reset della password per favore clicca il seguente link:",
"reset.cta": "Clicca qui per resettare la tua password",
"reset.notify.subject": "Possword modificata con successo.",
"reset.notify.subject": "Password modificata con successo.",
"reset.notify.text1": "Ti informiamo che in data %1, la password è stata cambiata con successo.",
"reset.notify.text2": "Se non hai autorizzato questo, per favore notifica immediatamente un amministratore.",
"digest.notifications": "Hai una notifica non letta da %1:",
@ -33,9 +33,9 @@
"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.",
"unsub.cta": "Clicca qui per modificare queste impostazioni",
"banned.subject": "You have been banned from %1",
"banned.text1": "The user %1 has been banned from %2.",
"banned.text2": "This ban will last until %1.",
"banned.text3": "This is the reason why you have been banned:",
"banned.subject": "Sei stato bannato da %1",
"banned.text1": "%1 è stato bannato da %2",
"banned.text2": "Questo ban durerà fino a %1.",
"banned.text3": "Il motivo del ban è:",
"closing": "Grazie!"
}

@ -11,10 +11,10 @@
"invalid-uid": "ID Utente non valido",
"invalid-username": "Nome utente non valido",
"invalid-email": "Email non valida",
"invalid-title": "Invalid title",
"invalid-title": "Titolo non Valido",
"invalid-user-data": "Dati Utente non validi",
"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-search-term": "Termine di ricerca non valido",
"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.",
"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.",
"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-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.",
@ -76,12 +76,12 @@
"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",
"guest-upload-disabled": "Il caricamento da ospite è stato disattivato",
"already-bookmarked": "You have already bookmarked this post",
"already-unbookmarked": "You have already unbookmarked this post",
"already-bookmarked": "Hai già aggiunto questa discussione ai preferiti.",
"already-unbookmarked": "Hai già rimosso questa discussione dai preferiti",
"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-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-extension": "Estensione immagine non valida",
"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",
"too-many-messages": "Hai inviato troppi messaggi, aspetta un attimo.",
"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-remove-last-user": "Non puoi rimuovere l'ultimo utente",
"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-flag": "Tu non hai abbastanza reputazione per segnalare 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.",
"registration-error": "Errore nella registrazione",
"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-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.",
"no-topics-selected": "No topics selected!"
"no-topics-selected": "Nessuna discussione selezionata!"
}

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

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

@ -27,7 +27,7 @@
"details.disableJoinRequests": "Disabilita le richieste d'adesione",
"details.grant": "Concedi / Rimuovi la Proprietà",
"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.group_name": "Nome Gruppo",
"details.member_count": "Totale Membri",
@ -53,6 +53,6 @@
"new-group.group_name": "Nome 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": "Bulk Invite",
"bulk-invite": "Invita in Massa",
"remove_group_cover_confirm": "Sei sicuro di voler rimuovere l'immagine copertina?"
}

@ -20,7 +20,7 @@
"chat.three_months": "3 Mesi",
"chat.delete_message_confirm": "Sei sicuro di voler eliminare questo messaggio?",
"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.show_preview": "Visualizza 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_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_user": "<strong>%1</strong> flagged a user profile (%2)",
"user_flagged_user_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a user profile (%3)",
"user_flagged_user_multiple": "<strong>%1</strong> and %2 others flagged a user profile (%3)",
"user_flagged_user": "<strong>%1</strong> ha segnalato un utente (%2)",
"user_flagged_user_dual": "<strong>%1</strong> e <strong>%2</strong> hanno segnalato un utente (%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_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>",
@ -42,23 +42,23 @@
"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.",
"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-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-sent": "Email di conferma inviata.",
"none": "None",
"notification_only": "Notification Only",
"email_only": "Email Only",
"notification_and_email": "Notification & Email",
"notificationType_upvote": "When someone upvotes your post",
"none": "Nessuna Notifica",
"notification_only": "Solo Notifiche",
"email_only": "Solo Email",
"notification_and_email": "Email e Notifica",
"notificationType_upvote": "Quando il tuo post riceve un Mi Piace",
"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_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
"notificationType_new-post-flag": "When a post is flagged",
"notificationType_new-user-flag": "When a user is flagged"
"notificationType_post-queue": "Quando un nuovo post è in attesa di revisione",
"notificationType_new-post-flag": "Quando un post viene segnalato",
"notificationType_new-user-flag": "Quando un utente viene segnalato"
}

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

@ -1,5 +1,5 @@
{
"register": "Registrazione",
"register": "Registrati",
"cancel_registration": "Cancella Registrazione",
"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>.",

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

@ -1,7 +1,7 @@
{
"success": "Riuscito",
"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",
"settings-saved": "Impostazioni salvate!"
}

@ -13,9 +13,9 @@
"notify_me": "Ricevi notifiche di nuove risposte in questa discussione",
"quote": "Cita",
"reply": "Rispondi",
"replies_to_this_post": "%1 Replies",
"one_reply_to_this_post": "1 Reply",
"last_reply_time": "Last reply",
"replies_to_this_post": "%1 Risposte",
"one_reply_to_this_post": "1 Risposta",
"last_reply_time": "Ultima Risposta",
"reply-as-topic": "Topic risposta",
"guest-login-reply": "Effettua il Log in per rispondere",
"edit": "Modifica",
@ -59,7 +59,7 @@
"thread_tools.unlock": "Sblocca Discussione",
"thread_tools.move": "Sposta Discussione",
"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.delete": "Elimina Discussione",
"thread_tools.delete-posts": "Cancella post",
@ -68,8 +68,8 @@
"thread_tools.restore_confirm": "Sei sicuro di voler ripristinare questa discussione?",
"thread_tools.purge": "Svuota Discussione",
"thread_tools.purge_confirm": "Sei sicuro di voler svuotare questa discussione?",
"thread_tools.merge_topics": "Merge Topics",
"thread_tools.merge": "Merge",
"thread_tools.merge_topics": "Unisci le Discussioni",
"thread_tools.merge": "Unisci",
"topic_move_success": "Questa discussione è stata correttamente spostata in %1",
"post_delete_confirm": "Sei sicuro di voler cancellare questo post?",
"post_restore_confirm": "Sei sicuro di voler ripristinare questo post?",
@ -91,7 +91,7 @@
"fork_pid_count": "%1 post selezionati",
"fork_success": "Topic Diviso con successo ! Clicca qui per andare al Topic Diviso.",
"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.handle_placeholder": "Nome",
"composer.discard": "Annulla",

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

@ -19,13 +19,13 @@
"location": "Località",
"age": "Età",
"joined": "Iscrizione",
"lastonline": "Ultima volta in linea",
"lastonline": "Ultimo Accesso",
"profile": "Profilo",
"profile_views": "Visite al profilo",
"reputation": "Reputazione",
"bookmarks": "Favoriti",
"bookmarks": "Preferiti",
"watched": "Osservati",
"ignored": "Ignored",
"ignored": "Ignorati",
"followers": "Da chi è seguito",
"following": "Chi segue",
"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>",
"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.",
"weak_password": "Weak password.",
"weak_password": "Password debole.",
"upload_picture": "Carica foto",
"upload_a_picture": "Carica una foto",
"remove_uploaded_picture": "Elimina foto caricata",
@ -85,7 +85,7 @@
"has_no_posts": "Questo utente non ha ancora scritto niente.",
"has_no_topics": "Questo utente non ha ancora avviato 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_downvoted_posts": "Questo utente non ha ancora votato negativamente alcun post",
"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",
"topics_per_page": "Discussioni 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",
"notifications_and_sounds": "Notifiche e Suoni",
"incoming-message-sound": "Suono messaggio in entrata",
"outgoing-message-sound": "Suono messaggio in uscita",
"notification-sound": "Suono di notifica",
"no-sound": "Nessun suono",
"upvote-notif-freq": "Upvote Notification Frequency",
"upvote-notif-freq.all": "All Upvotes",
"upvote-notif-freq.everyTen": "Every Ten Upvotes",
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...",
"upvote-notif-freq.disabled": "Disabled",
"upvote-notif-freq": "Frequenza Notifiche dei Mi Piace ",
"upvote-notif-freq.all": "Tutti i Mi Piace",
"upvote-notif-freq.everyTen": "Ogni Dieci Mi Piace",
"upvote-notif-freq.logarithmic": "Ogni 10, 100, 1000...",
"upvote-notif-freq.disabled": "Disabilitate",
"browsing": "Impostazioni di Navigazione",
"open_links_in_new_tab": "Apri i link web in una nuova pagina",
"enable_topic_searching": "Abilita la ricerca negli argomenti",

@ -18,7 +18,7 @@
"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.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.no_topics": "In de afgelopen %1 zijn er geen actieve onderwerpen geweest.",
"digest.day": "dag",
@ -30,7 +30,7 @@
"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.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.",
"unsub.cta": "Klik hier om deze instellingen te wijzigen",
"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-flag": "Je hebt onvoldoende reputatie om dit bericht aan de beheerders te mogen melden",
"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.",
"registration-error": "Fout tijdens registratie",
"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-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).",
"no-session-found": "Geen login sessie gevonden!",
"not-in-room": "Gebruiker niet in de chat",
@ -135,5 +135,5 @@
"invalid-home-page-route": "Onbekende homepage route",
"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.",
"no-topics-selected": "No topics selected!"
"no-topics-selected": "Geen onderwerpen geselecteerd!"
}

@ -9,7 +9,7 @@
"continue_to": "Door naar %1",
"return_to": "Terug naar %1",
"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.",
"all": "Alles",
"topics": "Onderwerpen",
@ -47,18 +47,18 @@
"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-sent": "Bevestigingsmail verstuurd.",
"none": "None",
"notification_only": "Notification Only",
"email_only": "Email Only",
"notification_and_email": "Notification & Email",
"notificationType_upvote": "When someone upvotes your post",
"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_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
"notificationType_new-post-flag": "When a post is flagged",
"notificationType_new-user-flag": "When a user is flagged"
"none": "Geen",
"notification_only": "Alleen notificatie",
"email_only": "Alleen e-mail",
"notification_and_email": "Notificatie & e-mail",
"notificationType_upvote": "Als iemand positief stemt voor je bericht",
"notificationType_new-topic": "Wanneer iemand die jij volgt een onderwerp post",
"notificationType_new-reply": "Als een nieuwe reactie komt op een onderwerp dat je volgt",
"notificationType_follow": "Als iemand begint met jou te volgen",
"notificationType_new-chat": "Als je een chat-bericht ontvangt",
"notificationType_group-invite": "Als je een uitnodiging voor een groep ontvangt",
"notificationType_new-register": "Als iemand wordt toegevoegd aan een registratiewachtrij",
"notificationType_post-queue": "Als een bericht aan de wachtrij wordt toegevoegd",
"notificationType_new-post-flag": "Als een bericht wordt gevlagd",
"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.purge": "Wis onderwerp ",
"thread_tools.purge_confirm": "Weet je zeker dat je dit onderwerp wil verwijderen?",
"thread_tools.merge_topics": "Merge Topics",
"thread_tools.merge": "Merge",
"thread_tools.merge_topics": "Onderwerpen samenvoegen",
"thread_tools.merge": "Samenvoegen",
"topic_move_success": "Verplaatsen van onderwerp naar %1 succesvol",
"post_delete_confirm": "Is het absoluut de bedoeling dit bericht te verwijderen?",
"post_restore_confirm": "Is het de bedoeling dit bericht te herstellen?",
@ -91,7 +91,7 @@
"fork_pid_count": "%1 bericht(en) geselecteerd",
"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",
"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.handle_placeholder": "Naam",
"composer.discard": "Annuleren",

@ -101,11 +101,11 @@
"outgoing-message-sound": "Uitgaand bericht geluid",
"notification-sound": "Notificatie geluid",
"no-sound": "Geen geluid",
"upvote-notif-freq": "Upvote Notification Frequency",
"upvote-notif-freq.all": "All Upvotes",
"upvote-notif-freq.everyTen": "Every Ten Upvotes",
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...",
"upvote-notif-freq.disabled": "Disabled",
"upvote-notif-freq": "Notificatie frequentie voor Upvotes",
"upvote-notif-freq.all": "Alle Upvotes",
"upvote-notif-freq.everyTen": "Elke tien Upvotes",
"upvote-notif-freq.logarithmic": "Bij 10, 100, 1000...",
"upvote-notif-freq.disabled": "Uitgeschakeld",
"browsing": "Instellingen voor bladeren",
"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",

@ -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",
"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",
"average-post-size": "Kích thước bài viết",
"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-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.",
"from": "From Name",

@ -8,13 +8,13 @@
"no_replies": "Chưa có bình luận nào",
"no_new_posts": "Không có bài mới.",
"share_this_category": "Chia sẻ chuyên mục này",
"watch": "Theo dõi",
"watch": "Quan tâm",
"ignore": "Bỏ qua",
"watching": "Đang theo dõi",
"watching": "Đang quan tâm",
"ignoring": "Bỏ qua",
"watching.description": "Hiện các 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",
"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.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.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.",
"unsub.cta": "Nhấn vào đây để thay đổi cài đặt.",
"banned.subject": "You have been banned from %1",
"banned.text1": "The user %1 has been banned from %2.",
"banned.text2": "This ban will last until %1.",
"banned.text3": "This is the reason why you have been banned:",
"banned.subject": "Bạn đã bị cấm khỏi %1",
"banned.text1": "Người dùng %1 đã bị cấm khỏi %2",
"banned.text2": "Lệnh cấm sẽ kéo dài đến %1.",
"banned.text3": "Đây là lý do tại sao bạn bị cấm:",
"closing": "Xin cảm ơn!"
}

@ -1,20 +1,20 @@
{
"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.",
"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ý.",
"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-tid": "ID chủ đề 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-username": "Tên đăng nhập 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-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-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",
@ -33,7 +33,7 @@
"password-too-long": "Mật khẩu quá dài",
"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-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.",
"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",
@ -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-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",
"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-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",
@ -109,7 +109,7 @@
"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.",
"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-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",
@ -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-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",
"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.",
"registration-error": "Lỗi đăng kí",
"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-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)",
"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",
@ -135,5 +135,5 @@
"invalid-home-page-route": "Đường dẫn trang chủ không hợp lệ",
"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",
"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.learn_more": "Xem thêm",
"edited": "Đã cập nhật",
"disabled": "Disabled",
"select": "Select"
"disabled": "Bị khóa",
"select": "Chọn"
}

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

@ -9,17 +9,17 @@
"continue_to": "Tiếp tục tới %1",
"return_to": "Quay lại %1",
"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",
"all": "All",
"topics": "Topics",
"replies": "Replies",
"chat": "Chats",
"follows": "Follows",
"upvote": "Upvotes",
"new-flags": "New Flags",
"my-flags": "Flags assigned to me",
"bans": "Bans",
"all": "Toàn bộ",
"topics": "Chủ đề",
"replies": "Phản hồi",
"chat": "Thông điệp",
"follows": "Lượt theo dõi",
"upvote": "Lượt thích",
"new-flags": "Cảnh báo mới",
"my-flags": "Cảnh báo dành cho tôi",
"bans": "Cấm",
"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_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_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_user": "<strong>%1</strong> flagged a user profile (%2)",
"user_flagged_user_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a user profile (%3)",
"user_flagged_user_multiple": "<strong>%1</strong> and %2 others flagged a user profile (%3)",
"user_flagged_user": "<strong>%1</strong> đã cảnh báo một người dùng (%2)",
"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> 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_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>",
@ -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.",
"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.",
"flag_assigned_to_you": "<strong>Flag %1</strong> has been assigned to you",
"post_awaiting_review": "Post awaiting review",
"flag_assigned_to_you": "<strong>Cảnh báo %1</strong> đã được ghi nhận đối với bạn",
"post_awaiting_review": "Bài đăng đang chờ xét duyệt",
"email-confirmed": "Đã xác nhận email",
"email-confirmed-message": "Cảm ơn bạn đã xác nhận địa chỉ email của bạn. Tài khoản của bạn đã được kích hoạt đầy đủ.",
"email-confirm-error-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.",
"none": "None",
"notification_only": "Notification Only",
"email_only": "Email Only",
"notification_and_email": "Notification & Email",
"notificationType_upvote": "When someone upvotes your post",
"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_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
"notificationType_new-post-flag": "When a post is flagged",
"notificationType_new-user-flag": "When a user is flagged"
"none": "Hoàn toàn không",
"notification_only": "Chỉ thông báo",
"email_only": "Chỉ email",
"notification_and_email": "Cả thông báo & email",
"notificationType_upvote": "Khi ai đó thích bài đăng của bạn",
"notificationType_new-topic": "Khi người bạn theo dõi đăng một chủ đề",
"notificationType_new-reply": "Khi phản hồi được đăng trong chủ đề bạn đang quan tâm",
"notificationType_follow": "Khi ai đó theo dõi bạn",
"notificationType_new-chat": "Khi bạn nhận được thông điệp chat",
"notificationType_group-invite": "Khi bạn nhận được lời mời gia nhập nhóm",
"notificationType_new-register": "Khi ai đó được thêm vào lượt chờ đăng ký",
"notificationType_post-queue": "Khi bài đăng được thêm vào lượt chờ",
"notificationType_new-post-flag": "Khi bài đăng được cảnh báo",
"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/bookmarks": "Đã bookmark %1's chủ đề",
"account/settings": "Thiết lập",
"account/watched": "Chủ đề %1 đang theo dõi",
"account/ignored": "Topics ignored by %1",
"account/watched": "Chủ đề được quan tâm bởi %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/downvoted": "Bài viết %1 phản đối",
"account/best": "Bài viết hay nhất của %1",

@ -8,11 +8,11 @@
"posted-by": "Đăng bởi",
"in-categories": "Nằm trong chuyên mục",
"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",
"at-least": "Tối thiểu",
"at-most": "Tối đa",
"relevance": "Relevance",
"relevance": "Mức độ liên quan",
"post-time": "Thời điểm đăng bài",
"newer-than": "Mới hơn",
"older-than": "Cũ hơn",

@ -1,7 +1,7 @@
{
"success": "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",
"settings-saved": "Đã lưu thiết lập"
}

@ -14,7 +14,7 @@
"quote": "Trích dẫn",
"reply": "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",
"reply-as-topic": "Trả lời dưới dạng chủ đề",
"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ộ",
"mark_unread": "Đánh dấu chưa đọc",
"mark_unread.success": "Chủ đề đã được đánh dấu chưa đọc.",
"watch": "Theo dõi",
"unwatch": "Ngừng theo dõi",
"watch": "Quan tâm",
"unwatch": "Ngừng quan tâm",
"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",
"watching": "Đang xem",
"not-watching": "Không xem",
"watching": "Đang quan tâm",
"not-watching": "Không để ý",
"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",
"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.move": "Chuyển chủ đề",
"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.delete": "Xóa chủ đề",
"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.purge": "Xóa hẳn chủ đề",
"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": "Merge",
"thread_tools.merge_topics": "Xác nhập chủ đề",
"thread_tools.merge": "Xác nhập",
"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_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_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á",
"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.handle_placeholder": "Tên",
"composer.discard": "Huỷ bỏ",

@ -9,7 +9,7 @@
"topics_marked_as_read.success": "Chủ đề được đánh dấu đã đọc",
"all-topics": "Toàn bộ chủ đề",
"new-topics": "Các chủ đề mới",
"watched-topics": "Các chủ đề đã xem",
"unreplied-topics": "Unreplied Topics",
"multiple-categories-selected": "Multiple Selected"
"watched-topics": "Các chủ đề đuợc quan tâm",
"unreplied-topics": "Chủ đề chưa có phản hồi nào",
"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",
"reputation": "Mức uy tín",
"bookmarks": "Bookmarks",
"watched": "Đã theo dõi",
"ignored": "Ignored",
"watched": "Đã quan tâm",
"ignored": "Phớt lờ",
"followers": "Số người theo dõi",
"following": "Đang theo dõi",
"aboutme": "Giới thiệu bản thân",
"signature": "Chữ ký",
"birthday": "Ngày sinh ",
"chat": "Chat",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"flag-profile": "Flag Profile",
"chat_with": "Tiếp tục chat với %1",
"new_chat_with": "Bắt đầu chat với %1",
"flag-profile": "Cảnh báo người dùng",
"follow": "Theo dõi",
"unfollow": "Hủy theo dõi",
"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>",
"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.",
"weak_password": "Weak password.",
"weak_password": "Mật khẩu yếu",
"upload_picture": "Tải lên hình ảnh",
"upload_a_picture": "Tải lên một hình ảnh",
"remove_uploaded_picture": "Xoá ảnh đã tải 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?",
"crop_picture": "Crop picture",
"upload_cropped_picture": "Crop and upload",
"remove_cover_picture_confirm": "Bạn có thật sự muốn xóa hình ảnh này?",
"crop_picture": "Cắt nhỏ hình ảnh",
"upload_cropped_picture": "Cắt nhỏ và đăng tải",
"settings": "Thiết lập",
"show_email": "Hiện Email của tôi",
"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 :(",
"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_watched_topics": "Thành viên này chưa theo dõi chủ đề nào cả.",
"has_no_ignored_topics": "This user hasn't ignored any topics yet.",
"has_no_watched_topics": "Thành viên này chưa quan tâm chủ đề nào cả.",
"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_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.",
@ -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",
"topics_per_page": "Số chủ đề 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",
"notifications_and_sounds": "Thông báo & Âm thanh",
"incoming-message-sound": "Âm báo tin nhắn tới",
"outgoing-message-sound": "Âm báo tin nhắn đi",
"notification-sound": "Âm thanh thông báo",
"no-sound": "Không có âm thanh",
"upvote-notif-freq": "Upvote Notification Frequency",
"upvote-notif-freq.all": "All Upvotes",
"upvote-notif-freq.everyTen": "Every Ten Upvotes",
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...",
"upvote-notif-freq.disabled": "Disabled",
"upvote-notif-freq": "Tần suất thông báo lượt thích",
"upvote-notif-freq.all": "Toàn bộ lượt thích",
"upvote-notif-freq.everyTen": "Mỗi 10 lượt thích",
"upvote-notif-freq.logarithmic": "Cứ mỗi 10, 100, 1000...",
"upvote-notif-freq.disabled": "Bị khóa",
"browsing": "Đang xem cài đặt",
"open_links_in_new_tab": "Mở link trong tab mới.",
"enable_topic_searching": "Bật In-topic Searching",
@ -113,8 +113,8 @@
"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",
"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_create": "Theo dõi những chủ đề do bạn t",
"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 chủ đề bạn tạo",
"grouptitle": "Tên nhóm",
"no-group-title": "Không có tên nhóm",
"select-skin": "Chọn một giao diện",
@ -126,9 +126,9 @@
"sso.title": "Đăng nhập một lần",
"sso.associated": "Đã 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-confirm-title": "Confirm Dissociation",
"sso.dissociate-confirm": "Are you sure you wish to dissociate your account from %1?",
"sso.dissociate": "Tách khỏi",
"sso.dissociate-confirm-title": "Xác nhận việc tách khỏi",
"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.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",
@ -141,5 +141,5 @@
"info.email-history": "Lịch sử email",
"info.moderation-note": "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);
}
// DEPRECATED: remove in 1.8.0
if (app.user.uid) {
socket.emit('user.getUnreadCounts', function (err, data) {
if (err) {

@ -117,7 +117,6 @@ define('alerts', ['translator', 'components', 'benchpress'], function (translato
alert
.on('mouseenter', function () {
$(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;
});
translator.toggleTimeagoShorthand();
for (var i = 0; i < notifs.length; i += 1) {
notifs[i].timeago = $.timeago(new Date(parseInt(notifs[i].datetime, 10)));
}
translator.toggleTimeagoShorthand();
Benchpress.parse('partials/notifications_list', { notifications: notifs }, function (html) {
notifList.translateHtml(html);
translator.toggleTimeagoShorthand(function () {
for (var i = 0; i < notifs.length; i += 1) {
notifs[i].timeago = $.timeago(new Date(parseInt(notifs[i].datetime, 10)));
}
translator.toggleTimeagoShorthand();
Benchpress.parse('partials/notifications_list', { notifications: notifs }, function (html) {
notifList.translateHtml(html);
});
});
});
};

@ -576,23 +576,29 @@
adaptor.getTranslations(language, namespace, callback);
},
toggleTimeagoShorthand: function toggleTimeagoShorthand() {
var tmp = assign({}, jQuery.timeago.settings.strings);
jQuery.timeago.settings.strings = assign({}, adaptor.timeagoShort);
adaptor.timeagoShort = assign({}, tmp);
toggleTimeagoShorthand: function toggleTimeagoShorthand(callback) {
function toggle() {
var tmp = assign({}, jQuery.timeago.settings.strings);
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() {
// 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
adaptor.translate('[[language:dir]]', function (value) {
if (value && !$('html').attr('data-dir')) {

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

@ -29,15 +29,27 @@ function updatePackageFile() {
exports.updatePackageFile = updatePackageFile;
function npmInstallProduction() {
process.stdout.write('\n');
cproc.execSync('npm i --production', {
function installAll() {
process.stdout.write(' started\n'.green);
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, '../../'),
stdio: [0, 1, 2],
});
}
exports.npmInstallProduction = npmInstallProduction;
exports.installAll = installAll;
function preserveExtraneousPlugins() {
// Skip if `node_modules/` is not found or inaccessible

@ -7,9 +7,18 @@ var cproc = require('child_process');
var semver = require('semver');
var fs = require('fs');
var path = require('path');
var nconf = require('nconf');
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;
function getModuleVersions(modules, callback) {
@ -85,7 +94,7 @@ function getInstalledPlugins(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) {
return callback(err);
}
@ -106,8 +115,8 @@ function checkPlugins(standalone, callback) {
async.waterfall([
async.apply(async.parallel, {
plugins: async.apply(getInstalledPlugins),
version: async.apply(getCurrentVersion),
plugins: getInstalledPlugins,
version: getCurrentVersion,
}),
function (payload, next) {
var toCheck = Object.keys(payload.plugins);
@ -194,17 +203,16 @@ function upgradePlugins(callback) {
if (['y', 'Y', 'yes', 'YES'].indexOf(result.upgrade) !== -1) {
console.log('\nUpgrading packages...');
var args = ['i'];
found.forEach(function (suggestObj) {
args.push(suggestObj.name + '@' + suggestObj.suggested);
});
var args = packageManagerInstallArgs.concat(found.map(function (suggestObj) {
return suggestObj.name + '@' + suggestObj.suggested;
}));
cproc.execFile((process.platform === 'win32') ? 'npm.cmd' : 'npm', args, { stdio: 'ignore' }, function (err) {
callback(err, true);
cproc.execFile(packageManagerExecutable, args, { stdio: 'ignore' }, function (err) {
callback(err, false);
});
} else {
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 nconf = require('nconf');
var packageInstall = require('../meta/package-install');
var packageInstall = require('./package-install');
var upgrade = require('../upgrade');
var build = require('../meta/build');
var db = require('../database');
@ -16,13 +16,14 @@ var steps = {
handler: function (next) {
packageInstall.updatePackageFile();
packageInstall.preserveExtraneousPlugins();
process.stdout.write(' OK\n'.green);
next();
},
},
install: {
message: 'Bringing base dependencies up to date...',
handler: function (next) {
packageInstall.npmInstallProduction();
packageInstall.installAll();
next();
},
},
@ -54,11 +55,8 @@ function runSteps(tasks) {
tasks = tasks.map(function (key, i) {
return function (next) {
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 (!inhibitOk) {
process.stdout.write(' OK'.green + '\n'.reset);
}
next();
});
};

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

@ -212,7 +212,7 @@ function build(targets, callback) {
}
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 user = require('../user');
var topics = require('../topics');
var messaging = require('../messaging');
var meta = require('../meta');
var plugins = require('../plugins');
var navigation = require('../navigation');
@ -113,10 +115,16 @@ module.exports = function (middleware) {
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),
banned: async.apply(user.isBanned, 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);
},
function (results, next) {
@ -136,8 +144,45 @@ module.exports = function (middleware) {
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.navigation = results.navigation;
templateValues.unreadCount = unreadCount;
templateValues.metaTags = results.tags.meta;
templateValues.linkTags = results.tags.link;
templateValues.isAdmin = results.user.isAdmin;

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

@ -220,7 +220,7 @@ function pushToUids(uids, notification, callback) {
async.eachLimit(uids, 3, function (uid, next) {
emailer.send('notification', uid, {
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),
body: utils.stripHTMLTags(notification.bodyLong || ''),
showUnsubscribe: true,

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

@ -1,6 +1,7 @@
'use strict';
var async = require('async');
var winston = require('winston');
var user = require('../../user');
var meta = require('../../meta');
@ -112,7 +113,12 @@ module.exports = function (SocketUser) {
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) {
user.ban(uid, until, reason, next);

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

@ -205,7 +205,7 @@ Upgrade.incrementProgress = function (value) {
if (this.total) {
percentage = Math.floor((this.current / this.total) * 100) + '%';
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);

@ -31,7 +31,7 @@ widgets.render = function (uid, options, callback) {
var returnData = {};
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) {
return done(null, { location: location, widgets: [] });

Loading…
Cancel
Save