psychobunny 11 years ago
commit 87baeebc3f

@ -15,6 +15,7 @@ trans.he = public/language/he/category.json
trans.hu = public/language/hu/category.json trans.hu = public/language/hu/category.json
trans.it = public/language/it/category.json trans.it = public/language/it/category.json
trans.nb = public/language/nb/category.json trans.nb = public/language/nb/category.json
trans.nl = public/language/nl/category.json
trans.pl = public/language/pl/category.json trans.pl = public/language/pl/category.json
trans.pt_BR = public/language/pt_BR/category.json trans.pt_BR = public/language/pt_BR/category.json
trans.ru = public/language/ru/category.json trans.ru = public/language/ru/category.json
@ -39,6 +40,7 @@ trans.he = public/language/he/login.json
trans.hu = public/language/hu/login.json trans.hu = public/language/hu/login.json
trans.it = public/language/it/login.json trans.it = public/language/it/login.json
trans.nb = public/language/nb/login.json trans.nb = public/language/nb/login.json
trans.nl = public/language/nl/login.json
trans.pl = public/language/pl/login.json trans.pl = public/language/pl/login.json
trans.pt_BR = public/language/pt_BR/login.json trans.pt_BR = public/language/pt_BR/login.json
trans.ru = public/language/ru/login.json trans.ru = public/language/ru/login.json
@ -62,6 +64,7 @@ trans.he = public/language/he/recent.json
trans.hu = public/language/hu/recent.json trans.hu = public/language/hu/recent.json
trans.it = public/language/it/recent.json trans.it = public/language/it/recent.json
trans.nb = public/language/nb/recent.json trans.nb = public/language/nb/recent.json
trans.nl = public/language/nl/recent.json
trans.pl = public/language/pl/recent.json trans.pl = public/language/pl/recent.json
trans.pt_BR = public/language/pt_BR/recent.json trans.pt_BR = public/language/pt_BR/recent.json
trans.ru = public/language/ru/recent.json trans.ru = public/language/ru/recent.json
@ -85,6 +88,7 @@ trans.he = public/language/he/unread.json
trans.hu = public/language/hu/unread.json trans.hu = public/language/hu/unread.json
trans.it = public/language/it/unread.json trans.it = public/language/it/unread.json
trans.nb = public/language/nb/unread.json trans.nb = public/language/nb/unread.json
trans.nl = public/language/nl/unread.json
trans.pl = public/language/pl/unread.json trans.pl = public/language/pl/unread.json
trans.pt_BR = public/language/pt_BR/unread.json trans.pt_BR = public/language/pt_BR/unread.json
trans.ru = public/language/ru/unread.json trans.ru = public/language/ru/unread.json
@ -108,6 +112,7 @@ trans.he = public/language/he/footer.json
trans.hu = public/language/hu/footer.json trans.hu = public/language/hu/footer.json
trans.it = public/language/it/footer.json trans.it = public/language/it/footer.json
trans.nb = public/language/nb/footer.json trans.nb = public/language/nb/footer.json
trans.nl = public/language/nl/footer.json
trans.pl = public/language/pl/footer.json trans.pl = public/language/pl/footer.json
trans.pt_BR = public/language/pt_BR/footer.json trans.pt_BR = public/language/pt_BR/footer.json
trans.ru = public/language/ru/footer.json trans.ru = public/language/ru/footer.json
@ -131,6 +136,7 @@ trans.he = public/language/he/modules.json
trans.hu = public/language/hu/modules.json trans.hu = public/language/hu/modules.json
trans.it = public/language/it/modules.json trans.it = public/language/it/modules.json
trans.nb = public/language/nb/modules.json trans.nb = public/language/nb/modules.json
trans.nl = public/language/nl/modules.json
trans.pl = public/language/pl/modules.json trans.pl = public/language/pl/modules.json
trans.pt_BR = public/language/pt_BR/modules.json trans.pt_BR = public/language/pt_BR/modules.json
trans.ru = public/language/ru/modules.json trans.ru = public/language/ru/modules.json
@ -154,6 +160,7 @@ trans.he = public/language/he/register.json
trans.hu = public/language/hu/register.json trans.hu = public/language/hu/register.json
trans.it = public/language/it/register.json trans.it = public/language/it/register.json
trans.nb = public/language/nb/register.json trans.nb = public/language/nb/register.json
trans.nl = public/language/nl/register.json
trans.pl = public/language/pl/register.json trans.pl = public/language/pl/register.json
trans.pt_BR = public/language/pt_BR/register.json trans.pt_BR = public/language/pt_BR/register.json
trans.ru = public/language/ru/register.json trans.ru = public/language/ru/register.json
@ -177,6 +184,7 @@ trans.he = public/language/he/user.json
trans.hu = public/language/hu/user.json trans.hu = public/language/hu/user.json
trans.it = public/language/it/user.json trans.it = public/language/it/user.json
trans.nb = public/language/nb/user.json trans.nb = public/language/nb/user.json
trans.nl = public/language/nl/user.json
trans.pl = public/language/pl/user.json trans.pl = public/language/pl/user.json
trans.pt_BR = public/language/pt_BR/user.json trans.pt_BR = public/language/pt_BR/user.json
trans.ru = public/language/ru/user.json trans.ru = public/language/ru/user.json
@ -200,6 +208,7 @@ trans.he = public/language/he/global.json
trans.hu = public/language/hu/global.json trans.hu = public/language/hu/global.json
trans.it = public/language/it/global.json trans.it = public/language/it/global.json
trans.nb = public/language/nb/global.json trans.nb = public/language/nb/global.json
trans.nl = public/language/nl/global.json
trans.pl = public/language/pl/global.json trans.pl = public/language/pl/global.json
trans.pt_BR = public/language/pt_BR/global.json trans.pt_BR = public/language/pt_BR/global.json
trans.ru = public/language/ru/global.json trans.ru = public/language/ru/global.json
@ -223,6 +232,7 @@ trans.he = public/language/he/notifications.json
trans.hu = public/language/hu/notifications.json trans.hu = public/language/hu/notifications.json
trans.it = public/language/it/notifications.json trans.it = public/language/it/notifications.json
trans.nb = public/language/nb/notifications.json trans.nb = public/language/nb/notifications.json
trans.nl = public/language/nl/notifications.json
trans.pl = public/language/pl/notifications.json trans.pl = public/language/pl/notifications.json
trans.pt_BR = public/language/pt_BR/notifications.json trans.pt_BR = public/language/pt_BR/notifications.json
trans.ru = public/language/ru/notifications.json trans.ru = public/language/ru/notifications.json
@ -246,6 +256,7 @@ trans.he = public/language/he/reset_password.json
trans.hu = public/language/hu/reset_password.json trans.hu = public/language/hu/reset_password.json
trans.it = public/language/it/reset_password.json trans.it = public/language/it/reset_password.json
trans.nb = public/language/nb/reset_password.json trans.nb = public/language/nb/reset_password.json
trans.nl = public/language/nl/reset_password.json
trans.pl = public/language/pl/reset_password.json trans.pl = public/language/pl/reset_password.json
trans.pt_BR = public/language/pt_BR/reset_password.json trans.pt_BR = public/language/pt_BR/reset_password.json
trans.ru = public/language/ru/reset_password.json trans.ru = public/language/ru/reset_password.json
@ -269,6 +280,7 @@ trans.he = public/language/he/users.json
trans.hu = public/language/hu/users.json trans.hu = public/language/hu/users.json
trans.it = public/language/it/users.json trans.it = public/language/it/users.json
trans.nb = public/language/nb/users.json trans.nb = public/language/nb/users.json
trans.nl = public/language/nl/users.json
trans.pl = public/language/pl/users.json trans.pl = public/language/pl/users.json
trans.pt_BR = public/language/pt_BR/users.json trans.pt_BR = public/language/pt_BR/users.json
trans.ru = public/language/ru/users.json trans.ru = public/language/ru/users.json
@ -292,6 +304,7 @@ trans.he = public/language/he/language.json
trans.hu = public/language/hu/language.json trans.hu = public/language/hu/language.json
trans.it = public/language/it/language.json trans.it = public/language/it/language.json
trans.nb = public/language/nb/language.json trans.nb = public/language/nb/language.json
trans.nl = public/language/nl/language.json
trans.pl = public/language/pl/language.json trans.pl = public/language/pl/language.json
trans.pt_BR = public/language/pt_BR/language.json trans.pt_BR = public/language/pt_BR/language.json
trans.ru = public/language/ru/language.json trans.ru = public/language/ru/language.json
@ -315,6 +328,7 @@ trans.he = public/language/he/pages.json
trans.hu = public/language/hu/pages.json trans.hu = public/language/hu/pages.json
trans.it = public/language/it/pages.json trans.it = public/language/it/pages.json
trans.nb = public/language/nb/pages.json trans.nb = public/language/nb/pages.json
trans.nl = public/language/nl/pages.json
trans.pl = public/language/pl/pages.json trans.pl = public/language/pl/pages.json
trans.pt_BR = public/language/pt_BR/pages.json trans.pt_BR = public/language/pt_BR/pages.json
trans.ru = public/language/ru/pages.json trans.ru = public/language/ru/pages.json
@ -338,6 +352,7 @@ trans.he = public/language/he/topic.json
trans.hu = public/language/hu/topic.json trans.hu = public/language/hu/topic.json
trans.it = public/language/it/topic.json trans.it = public/language/it/topic.json
trans.nb = public/language/nb/topic.json trans.nb = public/language/nb/topic.json
trans.nl = public/language/nl/topic.json
trans.pl = public/language/pl/topic.json trans.pl = public/language/pl/topic.json
trans.pt_BR = public/language/pt_BR/topic.json trans.pt_BR = public/language/pt_BR/topic.json
trans.ru = public/language/ru/topic.json trans.ru = public/language/ru/topic.json

@ -1,6 +1,6 @@
var fork = require('child_process').fork, var fork = require('child_process').fork,
start = function() { start = function() {
var nbb = fork('./app', process.argv.slice(2), { nbb = fork('./app', process.argv.slice(2), {
env: { env: {
'NODE_ENV': process.env.NODE_ENV 'NODE_ENV': process.env.NODE_ENV
} }
@ -14,6 +14,13 @@ var fork = require('child_process').fork,
nbb.kill(); nbb.kill();
} }
}); });
} },
stop = function() {
nbb.kill();
},
nbb;
process.on('SIGINT', stop);
process.on('SIGTERM', stop);
start(); start();

@ -37,7 +37,7 @@ case "$1" in
echo "Launching NodeBB in \"development\" mode." echo "Launching NodeBB in \"development\" mode."
echo "To run the production build of NodeBB, please use \"forever\"." echo "To run the production build of NodeBB, please use \"forever\"."
echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB" echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB"
NODE_ENV=development supervisor -q --extensions 'node|js|tpl' -- app "$@" NODE_ENV=development supervisor -q --extensions 'node|js|tpl' -- loader "$@"
;; ;;
*) *)

@ -42,7 +42,8 @@
"nodebb-widget-essentials": "~0.0", "nodebb-widget-essentials": "~0.0",
"nodebb-theme-vanilla": "~0.0.14", "nodebb-theme-vanilla": "~0.0.14",
"nodebb-theme-cerulean": "~0.0.13", "nodebb-theme-cerulean": "~0.0.13",
"nodebb-theme-lavender": "~0.0.21" "nodebb-theme-lavender": "~0.0.22",
"less": "^1.6.3"
}, },
"optionalDependencies": { "optionalDependencies": {
"redis": "0.8.3", "redis": "0.8.3",

@ -65,6 +65,7 @@
"in": "in", "in": "in",
"recentposts": "Recent Posts", "recentposts": "Recent Posts",
"recentips": "Recently Logged In IPs",
"online": "Online", "online": "Online",
"away": "Away", "away": "Away",

@ -1,12 +1,12 @@
{ {
"new_topic_button": "Aloita uusi keskustelu.", "new_topic_button": "Uusi aihe",
"no_topics": "<strong>Tällä aihealueella ei ole yhtään viestiketjua.</strong><br />Miksi et aloittaisi yhtä?", "no_topics": "<strong>Tällä aihealueella ei ole yhtään aihetta.</strong><br />Miksi et aloittaisi uutta?",
"sidebar.recent_replies": "Viimeisimmät vastaukset", "sidebar.recent_replies": "Viimeisimmät vastaukset",
"sidebar.active_participants": "Aktiiviset keskustelijat", "sidebar.active_participants": "Aktiiviset keskustelijat",
"sidebar.moderators": "Moderaattorit", "sidebar.moderators": "Moderaattorit",
"posts": "viestit", "posts": "viestit",
"views": "katsottu", "views": "katsottu",
"posted": "lähetetty", "posted": "kirjoitettu",
"browsing": "selaamassa", "browsing": "selaamassa",
"no_replies": "Kukaan ei ole vastannut", "no_replies": "Kukaan ei ole vastannut",
"replied": "vastasi", "replied": "vastasi",

@ -1,7 +1,7 @@
{ {
"stats.online": "Online", "stats.online": "Online",
"stats.users": "Käyttäjää", "stats.users": "Käyttäjää",
"stats.topics": "Viestiketjua", "stats.topics": "Aihetta",
"stats.posts": "Viestiä", "stats.posts": "Viestiä",
"success": "onnistunut" "success": "onnistunut"
} }

@ -1,56 +1,58 @@
{ {
"home": "Etusivu", "home": "Etusivu",
"search": "Etsi", "search": "Hae",
"buttons.close": "Sulje", "buttons.close": "Sulje",
"403.title": "Pääsy kielletty", "403.title": "Pääsy kielletty",
"403.message": "Olet päätynyt sivulle jolle sinulla ei ole tarvittavia oikeuksia. Ehkäpä sinun tulisi <a href='/login'>kirjaudu sisään</a>?", "403.message": "Olet päätynyt sivulle, johon sinulla ei ole tarvittavia oikeuksia. Sinun pitäisi kai <a href='/login'>kirjautua sisään</a>.",
"404.title": "Sivua ei löydy", "404.title": "Ei löydy",
"404.message": "Olet päätynyt sivulle jota ei ole olemassa. Palaa <a href='/'>etusivulle</a>.", "404.message": "Olet päätynyt sivulle, jota ei ole olemassa. Palaa <a href='/'>etusivulle</a>.",
"500.title": "Sisäinen virhe.", "500.title": "Sisäinen virhe.",
"500.message": "Oho! Jotain meni pieleen!", "500.message": "Oho! Jotain meni pieleen!",
"register": "Rekisteröidy", "register": "Rekisteröidy",
"login": "Kirjaudu", "login": "Kirjaudu",
"welcome_back": "Welcome Back ", "please_log_in": "Kirjaudu, ole hyvä",
"you_have_successfully_logged_in": "You have successfully logged in", "posting_restriction_info": "Kirjoittaminen on tällä hetkellä rajattu vain rekisteröityneille käyttäjille. Napsauta tätä kirjautuaksesi.",
"welcome_back": "Tervetuloa takaisin",
"you_have_successfully_logged_in": "Olet onnistuneesti kirjautunut sisään",
"logout": "Kirjaudu ulos", "logout": "Kirjaudu ulos",
"logout.title": "Olet nyt kirjaunut ulos.", "logout.title": "Olet nyt kirjautunut ulos.",
"logout.message": "Olet onnistuneesti kirjautunut ulos NodeBB:stä", "logout.message": "Olet onnistuneesti kirjautunut ulos NodeBB:stä",
"save_changes": "Tallenna muutokset", "save_changes": "Tallenna muutokset",
"close": "Sulje", "close": "Sulje",
"pagination": "Pagination", "pagination": "Sivutus",
"header.admin": "Admin", "header.admin": "Ylläpitäjä",
"header.recent": "Viimeisimmät", "header.recent": "Viimeisimmät",
"header.unread": "Lukemattomat", "header.unread": "Lukemattomat",
"header.popular": "Popular", "header.popular": "Suositut",
"header.users": "Käyttäjät", "header.users": "Käyttäjät",
"header.chats": "Chats", "header.chats": "Keskustelut",
"header.notifications": "Notifications", "header.notifications": "Ilmoitukset",
"header.search": "Etsi", "header.search": "Hae",
"header.profile": "Profiili", "header.profile": "Profiili",
"notifications.loading": "Ladataan ilmoituksia.", "notifications.loading": "Ladataan ilmoituksia",
"chats.loading": "Ladataan keskusteluja", "chats.loading": "Ladataan keskusteluja",
"motd.welcome": "Tervetuloa NodeBB:n, tulevaisuuden keskustelualustalle.", "motd.welcome": "Tervetuloa NodeBB:hen, tulevaisuuden keskustelualustalle.",
"motd.get": "Hanki NodeBB", "motd.get": "Hanki NodeBB",
"motd.fork": "Fork", "motd.fork": "Forkkaa",
"motd.like": "Tykkää", "motd.like": "Tykkää",
"motd.follow": "Seuraa", "motd.follow": "Seuraa",
"previouspage": "Previous Page", "previouspage": "Edellinen sivu",
"nextpage": "Next Page", "nextpage": "Seuraava sivu",
"alert.success": "Success", "alert.success": "Onnistui",
"alert.error": "Error", "alert.error": "Virhe",
"alert.banned": "Banned", "alert.banned": "Estetty",
"alert.banned.message": "You are banned you will be logged out!", "alert.banned.message": "Sinut on estetty ja kirjaudut ulos!",
"alert.unfollow": "You are no longer following %1!", "alert.unfollow": "Et seuraa enää %1!",
"alert.follow": "You are now following %1!", "alert.follow": "Seuraat nyt %1!",
"posts": "Posts", "posts": "Viestit",
"views": "Views", "views": "Katsottu",
"posted": "posted", "posted": "kirjoitettu",
"in": "in", "in": "alueelle",
"recentposts": "Recent Posts", "recentposts": "Viimeisimmät viestit",
"online": "Online", "online": "Online",
"away": "Away", "away": "Poissa",
"dnd": "Do not Disturb", "dnd": "Älä häiritse",
"invisible": "Invisible", "invisible": "Näkymätön",
"offline": "Offline", "offline": "Offline",
"privacy": "Privacy" "privacy": "Yksityisyys"
} }

@ -1,10 +1,10 @@
{ {
"login": "Kirjaudu sisään", "login": "Kirjaudu sisään",
"username": "Käyttäjän nimi", "username": "Käyttäjänimi",
"password": "Salasana", "password": "Salasana",
"remember_me": "Muista minut?", "remember_me": "Muista minut?",
"forgot_password": "Unohtuiko salasana?", "forgot_password": "Unohditko salasanasi?",
"alternative_logins": "Vaihtoehtoiset sisäänkirjaantumistavat", "alternative_logins": "Vaihtoehtoiset kirjautumistavat",
"failed_login_attempt": "Sisäänkirjaantuminen epäonnistui, ole hyvä ja yritä uudestaan.", "failed_login_attempt": "Kirjautumisyritys epäonnistui, ole hyvä ja yritä uudestaan.",
"login_successful": "Olet onnistuneesti kirjautunut sisään!" "login_successful": "Olet onnistuneesti kirjautunut sisään!"
} }

@ -1,6 +1,6 @@
{ {
"chat.chatting_with": "Juttele <span id=\"chat-with-name\"></span> kanssa", "chat.chatting_with": "Keskustele käyttäjän <span id=\"chat-with-name\"></span> kanssa",
"chat.placeholder": "kirjoita viestisi tähän, paina enter lähettääksesi", "chat.placeholder": "kirjoita viestisi tähän ja paina enter lähettääksesi",
"chat.send": "Lähetä", "chat.send": "Lähetä",
"chat.no_active": "Sinulla ei ole aktiivisiä keskusteluita." "chat.no_active": "Sinulla ei ole aktiivisia keskusteluita."
} }

@ -1,8 +1,8 @@
{ {
"title": "Ilmoitukset", "title": "Ilmoitukset",
"no_notifs": "You have no new notifications", "no_notifs": "Sinulla ei ole uusia ilmoituksia",
"see_all": "See all Notifications", "see_all": "Katso kaikki ilmoitukset",
"back_to_home": "Takaisin NodeBB:n", "back_to_home": "Takaisin NodeBB:hen",
"outgoing_link": "Ulkopuolinen linkki", "outgoing_link": "Ulkopuolinen linkki",
"outgoing_link_message": "Olet nyt poistumassa", "outgoing_link_message": "Olet nyt poistumassa",
"continue_to": "Jatka", "continue_to": "Jatka",

@ -1,13 +1,13 @@
{ {
"home": "Home", "home": "Etusivu",
"unread": "Unread Topics", "unread": "Lukemattomat aiheet",
"popular": "Popular Topics", "popular": "Suositut aiheet",
"recent": "Recent Topics", "recent": "Viimeisimmät aiheet",
"users": "Registered Users", "users": "Rekisteröityneet käyttäjät",
"notifications": "Notifications", "notifications": "Ilmoitukset",
"user.edit": "Editing \"%1\"", "user.edit": "Muokataan \"%1\"",
"user.following": "People %1 Follows", "user.following": "Käyttäjät, joita %1 seuraa",
"user.followers": "People who Follow %1", "user.followers": "Käyttäjät, jotka seuraavat käyttäjää %1",
"user.favourites": "%1's Favourite Posts", "user.favourites": "Käyttäjän %1 suosikkiviestit",
"user.settings": "User Settings" "user.settings": "Käyttäjän asetukset"
} }

@ -1,7 +1,7 @@
{ {
"title": "Recent", "title": "Viimeisimmät",
"day": "Päivä", "day": "Päivä",
"week": "Viikko", "week": "Viikko",
"month": "Kuukausi", "month": "Kuukausi",
"no_recent_topics": "There are no recent topics." "no_recent_topics": "Ei viimeisimpiä aiheita."
} }

@ -1,18 +1,18 @@
{ {
"register": "Rekisteröidy", "register": "Rekisteröidy",
"help.email": "Oletuksena sähköpostiosoitettasi ei näytetä muille.", "help.email": "Oletuksena sähköpostiosoitettasi ei näytetä muille.",
"help.username_restrictions": "Yksilöllinen käyttäjänimi, pitää olla %1 - %2 merkkiä pitkä. Toiset voivat mainita sinut @<span id='yourUsername'>käyttäjänimi</span>.", "help.username_restrictions": "Yksilöllisen käyttäjätunnuksen pitää olla %1-%2 merkkiä pitkä. Toiset voivat mainita sinut @<span id='yourUsername'>username</span>.",
"help.minimum_password_length": "Salasanasi pitää olla vähintään %1 merkin mittainen.", "help.minimum_password_length": "Salasanasi pitää olla vähintään %1 merkin mittainen.",
"email_address": "Sähköposti", "email_address": "Sähköpostiosoite",
"email_address_placeholder": "Anna sähköpostiosoitteesi", "email_address_placeholder": "Syötä sähköpostiosoitteesi",
"username": "Käyttäjänimi", "username": "Käyttäjätunnus",
"username_placeholder": "Syötä käyttäjänimesi", "username_placeholder": "Syötä käyttäjätunnuksesi",
"password": "Salasana", "password": "Salasana",
"password_placeholder": "Syötä salasanasi", "password_placeholder": "Syötä salasanasi",
"confirm_password": "Vahvista salasana", "confirm_password": "Vahvista salasanasi",
"confirm_password_placeholder": "Vahvista salasana", "confirm_password_placeholder": "Vahvista salasanasi",
"register_now_button": "Rekisteröidy nyt", "register_now_button": "Rekisteröidy nyt",
"alternative_registration": "Vaihtoehtoiset rekisteröitymistavat", "alternative_registration": "Vaihtoehtoiset rekisteröitymistavat",
"terms_of_use": "Terms of Use", "terms_of_use": "Käyttöehdot",
"agree_to_terms_of_use": "I agree to the Terms of Use" "agree_to_terms_of_use": "Hyväksyn käyttöehdot"
} }

@ -2,12 +2,12 @@
"reset_password": "Palauta salasana", "reset_password": "Palauta salasana",
"update_password": "Päivitä salasana", "update_password": "Päivitä salasana",
"password_changed.title": "Salasana muutettu", "password_changed.title": "Salasana muutettu",
"password_changed.message": "<p>Salasana palautettu onnistunesti, ole hyvä ja <a href=\"/login\">kirjaudu sisään uudestaan.</a>.", "password_changed.message": "<p>Salasanasi on palautettu onnistuneesti, ole hyvä ja <a href=\"/login\">kirjaudu uudestaan</a>.",
"wrong_reset_code.title": "Väärä palautuskoodi", "wrong_reset_code.title": "Väärä palautuskoodi",
"wrong_reset_code.message": "Annettu palautuskoodi oli väärä. Ole hyvä yritä uudelleen, tai <a href=\"/reset\">pyydä uutta palautuskoodia</a>.", "wrong_reset_code.message": "Annettu palautuskoodi oli väärä. Ole hyvä ja yritä uudelleen tai <a href=\"/reset\">pyydä uutta palautuskoodia</a>.",
"new_password": "Uusi salasana", "new_password": "Uusi salasana",
"repeat_password": "Vahvista salasana", "repeat_password": "Vahvista salasana",
"enter_email": "Syötä <strong>sähköpostiosoitteesi</strong> niin me lähetämänne Sinulle ohjeet kuinka voit palauttaa käyttäjätilisi.", "enter_email": "Syötä <strong>sähköpostiosoitteesi</strong>, niin me lähetämme sinulle sähköpostilla ohjeet käyttäjätilisi palauttamiseksi.",
"password_reset_sent": "Salasanan palautus lähetetty", "password_reset_sent": "Salasanan palautuskoodi lähetetty",
"invalid_email": "Väärä sähköpostiosoite / Sähköpostiosoitetta ei ole!" "invalid_email": "Virheellinen sähköpostiosoite / Sähköpostiosoitetta ei ole olemassa!"
} }

@ -1,65 +1,73 @@
{ {
"topic": "Keskustelu", "topic": "Aihe",
"topics": "Keskustelut", "topics": "Aiheet",
"no_topics_found": "Keskusteluja ei löytynyt!", "no_topics_found": "Aiheita ei löytynyt!",
"no_posts_found": "No posts found!", "no_posts_found": "Viestejä ei löytynyt!",
"profile": "Profiili", "profile": "Profiili",
"posted_by": "Posted by", "posted_by": "Kirjoittanut",
"chat": "Juttele", "chat": "Keskustele",
"notify_me": "Ilmoita uusista viesteistä tässä keskustelussa", "notify_me": "Ilmoita, kun tähän keskusteluun tulee uusia viestejä",
"quote": "Lainaa", "quote": "Lainaa",
"reply": "Vastaa", "reply": "Vastaa",
"edit": "Muokkaa", "edit": "Muokkaa",
"delete": "Poista", "delete": "Poista",
"move": "Siirrä", "move": "Siirrä",
"fork": "Haaroita", "fork": "Haaroita",
"banned": "banned", "banned": "estetty",
"link": "Linkkaa", "link": "Linkitä",
"share": "Jaa", "share": "Jaa",
"tools": "Työkalut", "tools": "Työkalut",
"flag": "Flag", "flag": "Ilmianna",
"flag_title": "Flag this post for moderation", "flag_title": "Ilmianna tämä viesti moderaattoreille",
"deleted_message": "This thread has been deleted. Only users with thread management privileges can see it.", "deleted_message": "Tämä viestiketju on poistettu. Vain käyttäjät, joilla on viestiketjujen hallintaoikeudet, voivat nähdä sen.",
"watch": "Watch", "following_topic.title": "Seurataan aihetta",
"share_this_post": "Share this Post", "following_topic.message": "Saat nyt ilmoituksen, kun joku kirjoittaa tähän aiheeseen.",
"thread_tools.title": "Ketjun työkalut", "not_following_topic.title": "Et seuraa aihetta",
"thread_tools.markAsUnreadForAll": "Merkitse luetuiksi", "not_following_topic.message": "Et saa enää ilmoituksia tästä aiheesta.",
"thread_tools.pin": "Pin Topic", "login_to_subscribe": "Ole hyvä ja rekisteröidy tai kirjaudu sisään tilataksesi tämän aiheen",
"thread_tools.unpin": "Unpin Topic", "watch": "Tarkkaile",
"thread_tools.lock": "Lock Topic", "share_this_post": "Jaa tämä viesti",
"thread_tools.unlock": "Unlock Topic", "thread_tools.title": "Aiheen työkalut",
"thread_tools.move": "Move Topic", "thread_tools.markAsUnreadForAll": "Merkitse lukemattomaksi",
"thread_tools.fork": "Fork Topic", "thread_tools.pin": "Kiinnitä aihe",
"thread_tools.delete": "Delete Topic", "thread_tools.unpin": "Poista aiheen kiinnitys",
"thread_tools.restore": "Restore Topic", "thread_tools.lock": "Lukitse aihe",
"thread_tools.unlock": "Poista aiheen lukitus",
"thread_tools.move": "Siirrä aihe",
"thread_tools.fork": "Haaroita aihe",
"thread_tools.delete": "Poista aihe",
"thread_tools.restore": "Palauta aihe",
"load_categories": "Ladataan aihealueita", "load_categories": "Ladataan aihealueita",
"disabled_categories_note": "Käytöstä poistetut aihealueetta ovat harmaina", "disabled_categories_note": "Käytöstä poistetut aihealueet ovat harmaina",
"confirm_move": "Siirrä", "confirm_move": "Siirrä",
"confirm_fork": "Haaroita", "confirm_fork": "Haaroita",
"favourite": "Suosikki", "favourite": "Lisää suosikiksi",
"favourites": "Suosikit", "favourites": "Suosikit",
"favourites.not_logged_in.title": "Ei kirjaantuneena sisään", "favourites.not_logged_in.title": "Et ole kirjautunut",
"favourites.not_logged_in.message": "Kirjaudu sisään jotta voit lisätä tämän viestin suosikkeihisi.", "favourites.not_logged_in.message": "Kirjaudu sisään, jotta voit lisätä tämän viestin suosikkeihisi",
"favourites.has_no_favourites": "Sinulla ei ole yhtään suosikkiviestiä.", "favourites.has_no_favourites": "Sinulla ei ole yhtään suosikkiviestiä. Lisää joitakin viestejä suosikeiksi nähdäksesi ne täällä!",
"vote.not_logged_in.title": "Not Logged In", "vote.not_logged_in.title": "Et ole kirjautunut",
"vote.not_logged_in.message": "Please log in in order to vote", "vote.not_logged_in.message": "Kirjaudu sisään äänestääksesi",
"vote.cant_vote_self.title": "Invalid Vote", "vote.cant_vote_self.title": "Virheellinen ääni",
"vote.cant_vote_self.message": "You cannot vote for your own post", "vote.cant_vote_self.message": "Et voi äänestää omaa viestiäsi",
"loading_more_posts": "Ladataan lisää viestejä", "loading_more_posts": "Ladataan lisää viestejä",
"move_topic": "Siirrä keskustelu", "move_topic": "Siirrä aihe",
"move_post": "Siirrä viesti", "move_post": "Siirrä viesti",
"fork_topic": "Haaroita keskustelu", "fork_topic": "Haaroita keskustelu",
"topic_will_be_moved_to": "Tämä keskustelu siirretään aihealueelle", "topic_will_be_moved_to": "Tämä keskustelu siirretään aihealueelle",
"fork_topic_instruction": "Klikkaa viestejä jotka haluat haaroittaa", "fork_topic_instruction": "Napsauta viestejä, jotka haluat haaroittaa",
"fork_no_pids": "Ei valittuja viestejä!", "fork_no_pids": "Ei valittuja viestejä!",
"fork_success": "Keskustelu haaroitettu onnistuneesti!", "fork_success": "Keskustelu haaroitettu onnistuneesti!",
"reputation": "Maine", "reputation": "Maine",
"posts": "Viestejä", "posts": "Viestejä",
"composer.title_placeholder": "Enter your topic title here...", "composer.title_placeholder": "Syötä aiheesi otsikko tähän...",
"composer.write": "Write", "composer.write": "Kirjoita",
"composer.preview": "Preview", "composer.preview": "Esikatsele",
"composer.discard": "Discard", "composer.discard": "Hylkää",
"composer.submit": "Submit", "composer.submit": "Lähetä",
"composer.replying_to": "Replying to", "composer.replying_to": "Vastataan aiheeseen",
"composer.new_topic": "New Topic" "composer.new_topic": "Uusi aihe",
"composer.drag_and_drop_images": "Vedä ja pudota kuvat tähän",
"composer.content_is_parsed_with": "Sisältö jäsennetään muodossa",
"composer.upload_instructions": "Lataa kuvia vetämällä & pudottamalla ne."
} }

@ -1,6 +1,6 @@
{ {
"title": "Unread", "title": "Lukematon",
"no_unread_topics": "Ei lukemattomia keskusteluja.", "no_unread_topics": "Ei lukemattomia aiheita.",
"mark_all_read": "Merkitse kaikki luetuiksi", "mark_all_read": "Merkitse kaikki luetuiksi",
"load_more": "Lataa lisää" "load_more": "Lataa lisää"
} }

@ -1,5 +1,5 @@
{ {
"banned": "Porttikiellossa", "banned": "Bannattu",
"offline": "Offline", "offline": "Offline",
"username": "Käyttäjän nimi", "username": "Käyttäjän nimi",
"email": "Sähköposti", "email": "Sähköposti",
@ -9,39 +9,39 @@
"age": "Ikä", "age": "Ikä",
"joined": "Liittynyt", "joined": "Liittynyt",
"lastonline": "Viimeksi online", "lastonline": "Viimeksi online",
"profile": "Profile", "profile": "Profiili",
"profile_views": "Profiilin katselukerrat", "profile_views": "Profiilia katsottu",
"reputation": "Maine", "reputation": "Maine",
"posts": "Viestit", "posts": "Viestit",
"favourites": "Favourites", "favourites": "Suosikit",
"followers": "Seuraajat", "followers": "Seuraajat",
"following": "Seuraa", "following": "Seuratut",
"signature": "Allekirjoitus", "signature": "Allekirjoitus",
"gravatar": "Gravatar", "gravatar": "Gravatar",
"birthday": "Syntymäpäivä", "birthday": "Syntymäpäivä",
"chat": "Chat", "chat": "Keskustele",
"follow": "Follow", "follow": "Seuraa",
"unfollow": "Unfollow", "unfollow": "Älä seuraa",
"change_picture": "Vaihda kuvaa", "change_picture": "Vaihda kuva",
"edit": "Muokkaa", "edit": "Muokkaa",
"uploaded_picture": "Siirretty kuva", "uploaded_picture": "Ladattu kuva",
"upload_new_picture": "Siirrä uusi kuva", "upload_new_picture": "Lataa uusi kuva",
"current_password": "Current Password", "current_password": "Nykyinen salasana",
"change_password": "Vaihda salasanaa", "change_password": "Vaihda salasana",
"confirm_password": "Vahvista salasanaa", "confirm_password": "Vahvista salasana",
"password": "Salasana", "password": "Salasana",
"upload_picture": "Siirrä kuva", "upload_picture": "Lataa kuva",
"upload_a_picture": "Siirrä kuva", "upload_a_picture": "Lataa kuva",
"image_spec": "You may only upload PNG, JPG, or GIF files", "image_spec": "Voit ladata vain PNG-, JPG- tai GIF-tiedostoja",
"max": "max.", "max": "max.",
"settings": "Settings", "settings": "Asetukset",
"show_email": "Näytä sähköpostiosoitteeni", "show_email": "Näytä sähköpostiosoitteeni",
"has_no_follower": "Tällä käyttäjällä ei ole yhtään seuraaja :(", "has_no_follower": "Kukaan ei seuraa tätä käyttäjää :(",
"follows_no_one": "Tämä käyttäjä ei seuraa ketään :(", "follows_no_one": "Tämä käyttäjä ei seuraa ketään :(",
"has_no_posts": "This user didn't post anything yet.", "has_no_posts": "Tämä käyttäjä ei ole kirjoittanut vielä mitään.",
"email_hidden": "Sähköposti piilotettu", "email_hidden": "Sähköposti piilotettu",
"hidden": "piilotettu", "hidden": "piilotettu",
"paginate_description": "Paginate topics and posts instead of using infinite scroll.", "paginate_description": "Sivuta aiheet ja viestit loputtoman vierittämisen sijaan.",
"topics_per_page": "Topics per Page", "topics_per_page": "Aihetta per sivu",
"posts_per_page": "Posts per Page" "posts_per_page": "Viestiä per sivu"
} }

@ -1,9 +1,9 @@
{ {
"latest_users": "Viimeisimmät Käyttäjät", "latest_users": "Viimeisimmät käyttäjät",
"top_posters": "Aktiivisimmat viestittelijät", "top_posters": "Aktiivisimmat viestittelijät",
"most_reputation": "Eniten mainetta", "most_reputation": "Eniten mainetta",
"online": "Online", "online": "Online",
"search": "Etsi", "search": "Hae",
"enter_username": "Syötä käyttäjänimi etsiäksesi", "enter_username": "Syötä käyttäjätunnus hakeaksesi",
"load_more": "Lataa lisää" "load_more": "Lataa lisää"
} }

@ -20,6 +20,11 @@
"flag": "Jelentés", "flag": "Jelentés",
"flag_title": "A hozzászólás jelentése a moderátoroknál", "flag_title": "A hozzászólás jelentése a moderátoroknál",
"deleted_message": "Ez a topik törölve lett. Kizárólag azok a felhasználók láthatják, akiknek joga van hozzá.", "deleted_message": "Ez a topik törölve lett. Kizárólag azok a felhasználók láthatják, akiknek joga van hozzá.",
"following_topic.title": "Following Topic",
"following_topic.message": "You will now be receiving notifications when somebody posts to this topic.",
"not_following_topic.title": "Not Following Topic",
"not_following_topic.message": "You will no longer receive notifications from this topic.",
"login_to_subscribe": "Please register or log in in order to subscribe to this topic",
"watch": "Watch", "watch": "Watch",
"share_this_post": "Share this Post", "share_this_post": "Share this Post",
"thread_tools.title": "Téma Eszközök", "thread_tools.title": "Téma Eszközök",
@ -57,9 +62,12 @@
"posts": "Hozzászólás", "posts": "Hozzászólás",
"composer.title_placeholder": "Írd be a témanevet...", "composer.title_placeholder": "Írd be a témanevet...",
"composer.write": "Ír", "composer.write": "Ír",
"composer.preview": "Előnet", "composer.preview": "Előnézet",
"composer.discard": "Elvet", "composer.discard": "Elvet",
"composer.submit": "Küldés", "composer.submit": "Küldés",
"composer.replying_to": "Válasz erre:", "composer.replying_to": "Válasz erre:",
"composer.new_topic": "Új Topik" "composer.new_topic": "Új Topik",
"composer.drag_and_drop_images": "Drag and Drop Images Here",
"composer.content_is_parsed_with": "Content is parsed with",
"composer.upload_instructions": "Upload images by dragging & dropping them."
} }

@ -1,14 +1,14 @@
{ {
"new_topic_button": "Nuova Discussione", "new_topic_button": "Nuovo Argomento",
"no_topics": "<strong>Non ci sono discussioni in questa categoria.</strong><br />Perché non ne inizi una?", "no_topics": "<strong>Non ci sono discussioni in questa categoria.</strong><br />Perché non ne inizi una?",
"sidebar.recent_replies": "Risposte Recenti", "sidebar.recent_replies": "Risposte Recenti",
"sidebar.active_participants": "Partecipanti Attivi", "sidebar.active_participants": "Partecipanti Attivi",
"sidebar.moderators": "Moderatori", "sidebar.moderators": "Moderatori",
"posts": "post", "posts": "post",
"views": "visualizzazioni", "views": "visualizzazioni",
"posted": "inserito", "posted": "postato",
"browsing": "navigazione", "browsing": "visualizzando",
"no_replies": "Non ha ancora risposto nessuno", "no_replies": "Nessuno ha risposto",
"replied": "risposto", "replied": "risposto",
"last_edited_by": "ultima modifica di" "last_edited_by": "ultima modifica di"
} }

@ -1,7 +1,7 @@
{ {
"stats.online": "Online", "stats.online": "Online",
"stats.users": "Utenti", "stats.users": "Utenti",
"stats.topics": "Discussioni", "stats.topics": "Argomenti",
"stats.posts": "Post", "stats.posts": "Post",
"success": "successo" "success": "successo"
} }

@ -10,47 +10,49 @@
"500.message": "Oops! Qualcosa non funziona come si deve!", "500.message": "Oops! Qualcosa non funziona come si deve!",
"register": "Registrazione", "register": "Registrazione",
"login": "Login", "login": "Login",
"welcome_back": "Welcome Back ", "please_log_in": "Per favore Accedi",
"you_have_successfully_logged_in": "You have successfully logged in", "posting_restriction_info": "L'inserimento è attualmente ristretto ai soli utenti registrati, clicca qui per effettuare l'accesso.",
"welcome_back": "Bentornato",
"you_have_successfully_logged_in": "Login avvenuto con successo",
"logout": "Logout", "logout": "Logout",
"logout.title": "Disconnessione avvenuta.", "logout.title": "Disconnessione avvenuta.",
"logout.message": "Logout effettuato con successo", "logout.message": "Logout effettuato con successo",
"save_changes": "Salva", "save_changes": "Salva cambiamenti",
"close": "Chiudi", "close": "Chiudi",
"pagination": "Pagination", "pagination": "Paginazione",
"header.admin": "Amministratore", "header.admin": "Amministratore",
"header.recent": "Recenti", "header.recent": "Recenti",
"header.unread": "Non letti", "header.unread": "Non letti",
"header.popular": "Popular", "header.popular": "Popolare",
"header.users": "Utenti", "header.users": "Utenti",
"header.chats": "Chats", "header.chats": "Messaggi",
"header.notifications": "Notifications", "header.notifications": "Notifiche",
"header.search": "Cerca", "header.search": "Cerca",
"header.profile": "Profilo", "header.profile": "Profilo",
"notifications.loading": "Caricamento delle Notifiche", "notifications.loading": "Caricamento delle Notifiche",
"chats.loading": "Caricamento delle Chat", "chats.loading": "Caricamento Messaggi",
"motd.welcome": "Benvenuti al NodeBB, la piattaforma di discussione del futuro.", "motd.welcome": "Benvenuti in NodeBB, la piattaforma di discussione del futuro.",
"motd.get": "Ottenere NodeBB", "motd.get": "Ottieni NodeBB",
"motd.fork": "Fork", "motd.fork": "Dividi",
"motd.like": "Mi piace", "motd.like": "Mi piace",
"motd.follow": "Segui", "motd.follow": "Segui",
"previouspage": "Previous Page", "previouspage": "Pagina Precedente",
"nextpage": "Next Page", "nextpage": "Pagina Successiva",
"alert.success": "Success", "alert.success": "Riuscito",
"alert.error": "Error", "alert.error": "Errore",
"alert.banned": "Banned", "alert.banned": "Bannato",
"alert.banned.message": "You are banned you will be logged out!", "alert.banned.message": "Sei bannato e verrai disconnesso!",
"alert.unfollow": "You are no longer following %1!", "alert.unfollow": "Non stai più seguendo %1!",
"alert.follow": "You are now following %1!", "alert.follow": "Stai seguendo %1!",
"posts": "Posts", "posts": "Post",
"views": "Views", "views": "Visualizzazioni",
"posted": "posted", "posted": "postato",
"in": "in", "in": "in",
"recentposts": "Recent Posts", "recentposts": "Post Recenti",
"online": "Online", "online": "Online",
"away": "Away", "away": "Non disponibile",
"dnd": "Do not Disturb", "dnd": "Non disturbare",
"invisible": "Invisible", "invisible": "Invisibile",
"offline": "Offline", "offline": "Non in linea",
"privacy": "Privacy" "privacy": "Privacy"
} }

@ -1,5 +1,5 @@
{ {
"name": "Italiano", "name": "Italiano",
"code": "it", "code": "it_IT",
"dir": "ltr" "dir": "ltr"
} }

@ -1,10 +1,10 @@
{ {
"login": "Login", "login": "Accedi",
"username": "Nome utente", "username": "Nome utente",
"password": "Password", "password": "Password",
"remember_me": "Memorizzami?", "remember_me": "Memorizzami?",
"forgot_password": "Password dimenticata?", "forgot_password": "Password dimenticata?",
"alternative_logins": "Login Alternativi", "alternative_logins": "Accessi Alternativi",
"failed_login_attempt": "Tentativo di login fallito; prova ancora.", "failed_login_attempt": "Tentativo di accesso fallito, prova ancora.",
"login_successful": "Login avvenuto con successo!" "login_successful": "Sei entrato con successo!"
} }

@ -1,6 +1,6 @@
{ {
"chat.chatting_with": "Chatta con <span id=\"chat-with-name\"></span>", "chat.chatting_with": "Chatta con <span id=\"chat-with-name\"></span>",
"chat.placeholder": "scrivi un messaggio qui e premi Invio", "chat.placeholder": "scrivi un messaggio qui, poi premi Invio",
"chat.send": "Invia", "chat.send": "Invia",
"chat.no_active": "Non hai le chat attive." "chat.no_active": "Non hai discussioni attive."
} }

@ -1,10 +1,10 @@
{ {
"title": "Notifiche", "title": "Notifiche",
"no_notifs": "You have no new notifications", "no_notifs": "Non hai nuove notifiche",
"see_all": "See all Notifications", "see_all": "Vedi tutte le Notifiche",
"back_to_home": "Torna alla pagina iniziale", "back_to_home": "Torna alla pagina iniziale",
"outgoing_link": "Link in uscita", "outgoing_link": "Link in uscita",
"outgoing_link_message": "Ci stai abbandonando", "outgoing_link_message": "Stai lasciando",
"continue_to": "Continua verso", "continue_to": "Continua verso",
"return_to": "Ritorna a " "return_to": "Ritorna a "
} }

@ -1,13 +1,13 @@
{ {
"home": "Home", "home": "Home",
"unread": "Unread Topics", "unread": "Argomenti non letti",
"popular": "Popular Topics", "popular": "Argomenti Popolari",
"recent": "Recent Topics", "recent": "Argomenti Recenti",
"users": "Registered Users", "users": "Utenti Registrati",
"notifications": "Notifications", "notifications": "Notifiche",
"user.edit": "Editing \"%1\"", "user.edit": "Modificando \"%1\"",
"user.following": "People %1 Follows", "user.following": "%1 Persone seguono",
"user.followers": "People who Follow %1", "user.followers": "Persone che seguono %1",
"user.favourites": "%1's Favourite Posts", "user.favourites": "Post Favoriti di %1",
"user.settings": "User Settings" "user.settings": "Impostazioni Utente"
} }

@ -1,7 +1,7 @@
{ {
"title": "Recent", "title": "Recenti",
"day": "Giorno", "day": "Giorno",
"week": "Settimana", "week": "Settimana",
"month": "Mese", "month": "Mese",
"no_recent_topics": "There are no recent topics." "no_recent_topics": "Non ci sono discussioni recenti."
} }

@ -13,6 +13,6 @@
"confirm_password_placeholder": "Conferma la Password", "confirm_password_placeholder": "Conferma la Password",
"register_now_button": "Registrati", "register_now_button": "Registrati",
"alternative_registration": "Altri metodi di registrazione", "alternative_registration": "Altri metodi di registrazione",
"terms_of_use": "Terms of Use", "terms_of_use": "Termini di Utilizzo",
"agree_to_terms_of_use": "I agree to the Terms of Use" "agree_to_terms_of_use": "Accetto i Termini di Utilizzo"
} }

@ -2,9 +2,9 @@
"reset_password": "Resetta la Password", "reset_password": "Resetta la Password",
"update_password": "Cambia la Password", "update_password": "Cambia la Password",
"password_changed.title": "Password Modificata", "password_changed.title": "Password Modificata",
"password_changed.message": "<p>La password è stata resettata con successo. <a href=\"/login\">Effettua di nuovo il log in</a>.", "password_changed.message": "<p>La password è stata resettata con successo. <a href=\"/login\">Effettua di nuovo l'accesso</a>.",
"wrong_reset_code.title": "Codice di reset non corretto", "wrong_reset_code.title": "Codice di reset non corretto",
"wrong_reset_code.message": "Il codice di reset ricevuto non è corretto. Prova ancora, o <a href=\"/reset\">richiedi un nuovo codice</a>.", "wrong_reset_code.message": "Il codice di reset ricevuto non è corretto. Prova ancora, oppure <a href=\"/reset\">richiedi un nuovo codice</a>.",
"new_password": "Nuova Password", "new_password": "Nuova Password",
"repeat_password": "Conferma la Password", "repeat_password": "Conferma la Password",
"enter_email": "Inserisci il tuo <strong>indirizzo email</strong> e ti invieremo un'email con le istruzioni per resettare il tuo account.", "enter_email": "Inserisci il tuo <strong>indirizzo email</strong> e ti invieremo un'email con le istruzioni per resettare il tuo account.",

@ -1,10 +1,10 @@
{ {
"topic": "Discussione", "topic": "Argomento",
"topics": "Discussioni", "topics": "Argomenti",
"no_topics_found": "Nessuna discussione trovata!", "no_topics_found": "Nessuna discussione trovata!",
"no_posts_found": "No posts found!", "no_posts_found": "Nessun post trovato!",
"profile": "Profilo", "profile": "Profilo",
"posted_by": "Posted by", "posted_by": "Inviato da",
"chat": "Chat", "chat": "Chat",
"notify_me": "Ricevi notifiche di nuove risposte in questa discussione", "notify_me": "Ricevi notifiche di nuove risposte in questa discussione",
"quote": "Citazione", "quote": "Citazione",
@ -12,54 +12,62 @@
"edit": "Modifica", "edit": "Modifica",
"delete": "Cancella", "delete": "Cancella",
"move": "Muovi", "move": "Muovi",
"fork": "Fork", "fork": "Dividi",
"banned": "bannato", "banned": "bannato",
"link": "Link", "link": "Link",
"share": "Share", "share": "Condividi",
"tools": "Tools", "tools": "Strumenti",
"flag": "Flag", "flag": "Segnala",
"flag_title": "Flag this post for moderation", "flag_title": "Segnala questo post per la moderazione",
"deleted_message": "This thread has been deleted. Only users with thread management privileges can see it.", "deleted_message": "Questo argomento è stato cancellato. Solo gli utenti che possono gestire gli argomenti riescono a vederlo.",
"watch": "Watch", "following_topic.title": "Argomento seguente",
"share_this_post": "Share this Post", "following_topic.message": "Da ora riceverai notifiche quando qualcuno posterà in questa discussione.",
"not_following_topic.title": "Non stai seguendo questo argomento",
"not_following_topic.message": "Non riceverai più notifiche da questa discussione.",
"login_to_subscribe": "Per favore registrati o accedi per sottoscrivere questo argomento",
"watch": "Guarda",
"share_this_post": "Condividi questo Post",
"thread_tools.title": "Strumenti per il Thread", "thread_tools.title": "Strumenti per il Thread",
"thread_tools.markAsUnreadForAll": "Mark Unread", "thread_tools.markAsUnreadForAll": "Segna come non letto",
"thread_tools.pin": "Pin Topic", "thread_tools.pin": "Pinna Argomento",
"thread_tools.unpin": "Unpin Topic", "thread_tools.unpin": "Unpin Argomento",
"thread_tools.lock": "Lock Topic", "thread_tools.lock": "Blocca Discussione",
"thread_tools.unlock": "Unlock Topic", "thread_tools.unlock": "Sblocca Discussione",
"thread_tools.move": "Move Topic", "thread_tools.move": "Sposta Discussione",
"thread_tools.fork": "Fork Topic", "thread_tools.fork": "Dividi Discussione",
"thread_tools.delete": "Delete Topic", "thread_tools.delete": "Elimina Discussione",
"thread_tools.restore": "Restore Topic", "thread_tools.restore": "Ripristina Discussione",
"load_categories": "Caricamento delle Categorie", "load_categories": "Caricamento Categorie",
"disabled_categories_note": "Le Categorie disabilitate sono in grigio", "disabled_categories_note": "Le Categorie disabilitate sono in grigio",
"confirm_move": "Sposta", "confirm_move": "Sposta",
"confirm_fork": "Fork", "confirm_fork": "Dividi",
"favourite": "Preferito", "favourite": "Preferito",
"favourites": "Preferiti", "favourites": "Preferiti",
"favourites.not_logged_in.title": "Non collegato/a", "favourites.not_logged_in.title": "Non collegato/a",
"favourites.not_logged_in.message": "Log in per aggiungere questo post ai preferiti", "favourites.not_logged_in.message": "Accedi per aggiungere questo post ai preferiti",
"favourites.has_no_favourites": "Non hai ancun post preferito; aggiungi qualche post ai preferiti per vederli qui!", "favourites.has_no_favourites": "Non hai ancun post preferito; aggiungi qualche post ai preferiti per vederli qui!",
"vote.not_logged_in.title": "Not Logged In", "vote.not_logged_in.title": "Non loggato",
"vote.not_logged_in.message": "Please log in in order to vote", "vote.not_logged_in.message": "Accedi per poter votare",
"vote.cant_vote_self.title": "Invalid Vote", "vote.cant_vote_self.title": "Voto non valido",
"vote.cant_vote_self.message": "You cannot vote for your own post", "vote.cant_vote_self.message": "Non puoi votare per i tuoi post",
"loading_more_posts": "Caricamento altri post", "loading_more_posts": "Caricamento altri post",
"move_topic": "Spsota Discussione", "move_topic": "Sposta Discussione",
"move_post": "Sposta Post", "move_post": "Sposta Post",
"fork_topic": "Fork Topic", "fork_topic": "Dividi il Topic",
"topic_will_be_moved_to": "Questa discussione verrà spostata nella categoria", "topic_will_be_moved_to": "Questa discussione verrà spostata nella categoria",
"fork_topic_instruction": "Clicca sui post che vuoi forkare", "fork_topic_instruction": "Clicca sui post che vuoi dividere",
"fork_no_pids": "Nessun post selezionato!", "fork_no_pids": "Nessun post selezionato!",
"fork_success": "Discussione forkata con successo!", "fork_success": "Discussione divisa con successo!",
"reputation": "Reputazione", "reputation": "Reputazione",
"posts": "Post", "posts": "Post",
"composer.title_placeholder": "Enter your topic title here...", "composer.title_placeholder": "Inserisci qui il titolo della discussione...",
"composer.write": "Write", "composer.write": "Scrivi",
"composer.preview": "Preview", "composer.preview": "Anteprima",
"composer.discard": "Discard", "composer.discard": "Scarta",
"composer.submit": "Submit", "composer.submit": "Invia",
"composer.replying_to": "Replying to", "composer.replying_to": "Rispondendo a",
"composer.new_topic": "New Topic" "composer.new_topic": "Nuovo Argomento",
"composer.drag_and_drop_images": "Trascina e rilascia le immagini qui",
"composer.content_is_parsed_with": "Il contenuto è analizzato con",
"composer.upload_instructions": "Carica immagini trascinandole e rilasciandole."
} }

@ -1,5 +1,5 @@
{ {
"title": "Unread", "title": "Non letto",
"no_unread_topics": "Non ci sono discussioni non lette.", "no_unread_topics": "Non ci sono discussioni non lette.",
"mark_all_read": "Segna tutto come già letto", "mark_all_read": "Segna tutto come già letto",
"load_more": "Carica Altro" "load_more": "Carica Altro"

@ -9,39 +9,39 @@
"age": "Età", "age": "Età",
"joined": "Iscrizione", "joined": "Iscrizione",
"lastonline": "Ultima volta in linea", "lastonline": "Ultima volta in linea",
"profile": "Profile", "profile": "Profilo",
"profile_views": "Visite al profilo", "profile_views": "Visite al profilo",
"reputation": "Reputazione", "reputation": "Reputazione",
"posts": "Post", "posts": "Post",
"favourites": "Favourites", "favourites": "Favoriti",
"followers": "Da chi è seguito", "followers": "Da chi è seguito",
"following": "Chi segue", "following": "Chi segue",
"signature": "Firma", "signature": "Firma",
"gravatar": "Gravatar", "gravatar": "Gravatar",
"birthday": "Data di nascita", "birthday": "Data di nascita",
"chat": "Chat", "chat": "Chat",
"follow": "Follow", "follow": "Segui",
"unfollow": "Unfollow", "unfollow": "Smetti di seguire",
"change_picture": "Cambia la foto", "change_picture": "Cambia Foto",
"edit": "Modifica", "edit": "Modifica",
"uploaded_picture": "Foto caricata", "uploaded_picture": "Foto caricata",
"upload_new_picture": "Carica una nuova foto", "upload_new_picture": "Carica una nuova foto",
"current_password": "Current Password", "current_password": "Password corrente",
"change_password": "Cambia la Password", "change_password": "Cambia la Password",
"confirm_password": "Conferma la Password", "confirm_password": "Conferma la Password",
"password": "Password", "password": "Password",
"upload_picture": "Carica foto", "upload_picture": "Carica foto",
"upload_a_picture": "Carica una foto", "upload_a_picture": "Carica una foto",
"image_spec": "You may only upload PNG, JPG, or GIF files", "image_spec": "Puoi caricare solo file PNG, JPG o GIF",
"max": "max.", "max": "massimo.",
"settings": "Settings", "settings": "Impostazioni",
"show_email": "Mostra la mia Email", "show_email": "Mostra la mia Email",
"has_no_follower": "Questo utente non è seguito da nessuno :(", "has_no_follower": "Questo utente non è seguito da nessuno :(",
"follows_no_one": "Questo utente non segue nessuno :(", "follows_no_one": "Questo utente non segue nessuno :(",
"has_no_posts": "This user didn't post anything yet.", "has_no_posts": "Questo utente non ha ancora postato nulla.",
"email_hidden": "Email Nascosta", "email_hidden": "Email Nascosta",
"hidden": "nascosta", "hidden": "nascosta",
"paginate_description": "Paginate topics and posts instead of using infinite scroll.", "paginate_description": "Dividi argomenti e post in pagine anziché usare lo scroll infinito.",
"topics_per_page": "Topics per Page", "topics_per_page": "Argomenti per Pagina",
"posts_per_page": "Posts per Page" "posts_per_page": "Post per Pagina"
} }

@ -5,5 +5,5 @@
"online": "In linea", "online": "In linea",
"search": "Cerca", "search": "Cerca",
"enter_username": "Inserisci il nome utente da cercare", "enter_username": "Inserisci il nome utente da cercare",
"load_more": "Carica di più" "load_more": "Carica altri"
} }

@ -0,0 +1,14 @@
{
"new_topic_button": "Nieuw onderwerp",
"no_topics": "<strong>Er zijn geen onderwerpen in deze categorie.</strong><br />Waarom maak je er niet een aan?",
"sidebar.recent_replies": "Recente Reacties",
"sidebar.active_participants": "Actieve Deelnemers",
"sidebar.moderators": "Moderators",
"posts": "berichten",
"views": "weergaven",
"posted": "geplaatst",
"browsing": "verkennen",
"no_replies": "Niemand heeft gereageerd",
"replied": "gereageerd",
"last_edited_by": "voor het laatst aangepast door"
}

@ -0,0 +1,7 @@
{
"stats.online": "Online",
"stats.users": "Gebruikers",
"stats.topics": "Onderwerpen",
"stats.posts": "Berichten",
"success": "succes"
}

@ -0,0 +1,58 @@
{
"home": "Home",
"search": "Zoeken",
"buttons.close": "Sluiten",
"403.title": "Toegang Geweigerd",
"403.message": "Het lijkt erop dat je op een pagina beland bent waar je geen toegang tot hebt. Misschien moet je <a href='/login'>inloggen</a>?",
"404.title": "Niet Gevonden",
"404.message": "Het lijkt erop dat je op een pagina beland bent die niet bestaat. Ga terug naar de <a href='/'>home pagina</a>.",
"500.title": "Interne fout.",
"500.message": "Oeps! Het lijkt erop dat iets is fout gegaan!",
"register": "Registeren",
"login": "Inloggen",
"please_log_in": "Please Log In",
"posting_restriction_info": "Posting is currently restricted to registered members only, click here to log in.",
"welcome_back": "Welcome Back ",
"you_have_successfully_logged_in": "You have successfully logged in",
"logout": "Uitloggen",
"logout.title": "Je bent nu uitgelogd.",
"logout.message": "Je bent met succes uitgelogd van NodeBB",
"save_changes": "Aanpassingen Opslaan",
"close": "Sluiten",
"pagination": "Pagination",
"header.admin": "Admin",
"header.recent": "Recent",
"header.unread": "Ongelezen",
"header.popular": "Populair",
"header.users": "Gebruikers",
"header.chats": "Chats",
"header.notifications": "Notificaties",
"header.search": "Zoeken",
"header.profile": "Profiel",
"notifications.loading": "Notificaties Laden",
"chats.loading": "Chats Laden",
"motd.welcome": "Welkom bij NodeBB, het discussie platform van de toekomst.",
"motd.get": "Verkrijg NodeBB",
"motd.fork": "Fork",
"motd.like": "Like",
"motd.follow": "Volgen",
"previouspage": "Vorige Pagina",
"nextpage": "Volgende Pagina",
"alert.success": "Succes",
"alert.error": "Fout",
"alert.banned": "Verbannen",
"alert.banned.message": "Je bent verbannen en zal uitgelogd worden!",
"alert.unfollow": "Je volgt niet langer %1!",
"alert.follow": "Je volgt nu %1!",
"posts": "Berichten",
"views": "Weergaven",
"posted": "geplaatst",
"in": "in",
"recentposts": "Recente Berichten",
"online": "Online",
"away": "Afwezig",
"dnd": "Niet Storen",
"invisible": "Onzichtbaar",
"offline": "Offline",
"privacy": "Privacy"
}

@ -0,0 +1,5 @@
{
"name": "Nederlands",
"code": "nl",
"dir": "ltr"
}

@ -0,0 +1,10 @@
{
"login": "Inloggen",
"username": "Gebruikersnaam",
"password": "Wachtwoord",
"remember_me": "Mij Onthouden?",
"forgot_password": "Wachtwoord Vergeten?",
"alternative_logins": "Alternatieve Logins",
"failed_login_attempt": "Mislukte inlog poging, probeer het later opnieuw.",
"login_successful": "Je bent succesvol ingelogd!"
}

@ -0,0 +1,6 @@
{
"chat.chatting_with": "Chat met <span id=\"chat-with-name\"></span>",
"chat.placeholder": "type chat bericht hier, druk op enter om te verzenden",
"chat.send": "Verzenden",
"chat.no_active": "Je hebt geen actieve chats."
}

@ -0,0 +1,10 @@
{
"title": "Notificaties",
"no_notifs": "You have no new notifications",
"see_all": "Bekijk alle Notificaties",
"back_to_home": "Terug naar NodeBB",
"outgoing_link": "Uitgaande Link",
"outgoing_link_message": "Je verlaat nu",
"continue_to": "Doorgaan naar",
"return_to": "Teruggaan naar"
}

@ -0,0 +1,13 @@
{
"home": "Home",
"unread": "Ongelezen Onderwerpen",
"popular": "Popular Topics",
"recent": "Recente Onderwerpen",
"users": "Geregistreerde Gebruikers",
"notifications": "Notificaties",
"user.edit": "\"%1\" aanpassen",
"user.following": "Mensen %1 Volgt",
"user.followers": "Mensen die %1 Volgen",
"user.favourites": "%1's Favoriete Berichten",
"user.settings": "Gebruikersinstellingen"
}

@ -0,0 +1,7 @@
{
"title": "Recent",
"day": "Dag",
"week": "Week",
"month": "Maand",
"no_recent_topics": "Er zijn geen recente reacties."
}

@ -0,0 +1,18 @@
{
"register": "Registreren",
"help.email": "Je email is standaard verborgen voor andere gebruikers.",
"help.username_restrictions": "Een unieke gebruikersnaam tussen %1 en %2 karakters. Anderen kunnen je vermelden met @<span id='yourUsername'>gebruikersnaam</span>.",
"help.minimum_password_length": "Je wachtwoord moet tenminste %1 karakters lang zijn.",
"email_address": "Email Adres",
"email_address_placeholder": "Vul Email Adres in",
"username": "Gebruikersnaam",
"username_placeholder": "Vul Gebruikersnaam in",
"password": "Wachtwoord",
"password_placeholder": "Vul Wachtwoord in",
"confirm_password": "Bevestig Wachtwoord",
"confirm_password_placeholder": "Bevestig Wachtwoord",
"register_now_button": "Nu Registreren",
"alternative_registration": "Alternatieve Registratie",
"terms_of_use": "Gebruiksvoorwaarden",
"agree_to_terms_of_use": "Ik ga akkoord van de Gebruiksvoorwaarden"
}

@ -0,0 +1,13 @@
{
"reset_password": "Wachtwoord opnieuw instellen",
"update_password": "Wachtwoord Updaten",
"password_changed.title": "Wachtwoord Veranderd",
"password_changed.message": "<p>Wachtwoord is met succes gereset, log a.u.b. <a href=\"/login\">opnieuw in</a>.",
"wrong_reset_code.title": "Incorrecte Reset Code",
"wrong_reset_code.message": "De ontvangen reset code is incorrect. Probeer het opnieuw, of <a href=\"/reset\">vraag een nieuwe code aan</a>.",
"new_password": "Nieuw Wachtwoord",
"repeat_password": "Bevestig Wachtwoord",
"enter_email": "Vul a.u.b. je <strong>email address</strong> in en we versturen je een email met de stappen hoe je je account reset.",
"password_reset_sent": "Wachtwoord Reset Verzonden",
"invalid_email": "Fout Email Adres / Email Adres bestaat niet!"
}

@ -0,0 +1,73 @@
{
"topic": "Onderwerp",
"topics": "Onderwerpen",
"no_topics_found": "Geen onderwerpen gevonden!",
"no_posts_found": "Geen berichten gevonden!",
"profile": "Profiel",
"posted_by": "Geplaatst door",
"chat": "Chat",
"notify_me": "Krijg notificaties van nieuwe reacties op dit onderwerp",
"quote": "Citeren",
"reply": "Reageren",
"edit": "Aanpassen",
"delete": "Verwijderen",
"move": "Verplaatsen",
"fork": "Fork",
"banned": "verbannen",
"link": "Link",
"share": "Delen",
"tools": "Gereedschap",
"flag": "Markeren",
"flag_title": "Dit bericht markeren voor moderatie",
"deleted_message": "Dit onderwerp is verwijderd. Alleen gebruikers met onderwerp management privileges kunnen dit onderwerp zien.",
"following_topic.title": "Following Topic",
"following_topic.message": "You will now be receiving notifications when somebody posts to this topic.",
"not_following_topic.title": "Not Following Topic",
"not_following_topic.message": "You will no longer receive notifications from this topic.",
"login_to_subscribe": "Please register or log in in order to subscribe to this topic",
"watch": "Watch",
"share_this_post": "Share this Post",
"thread_tools.title": "Thread Gereedschap",
"thread_tools.markAsUnreadForAll": "Ongelezen Markeren",
"thread_tools.pin": "Onderwerp Vastmaken",
"thread_tools.unpin": "Onderwerp Losmaken",
"thread_tools.lock": "Onderwerp Sluiten",
"thread_tools.unlock": "Onderwerp Openen",
"thread_tools.move": "Onderwerp Verplaatsen",
"thread_tools.fork": "Onderwerp Forken",
"thread_tools.delete": "Onderwerp Verwijderen",
"thread_tools.restore": "Onderwerp Herstellen",
"load_categories": "Categorieën Laden",
"disabled_categories_note": "Uitgeschakelde Categorieën zijn grijs",
"confirm_move": "Verplaatsen",
"confirm_fork": "Fork",
"favourite": "Favoriet",
"favourites": "Favorieten",
"favourites.not_logged_in.title": "Niet Ingelogd",
"favourites.not_logged_in.message": "Log a.u.b. in om dit bericht als Favoriet op te slaan",
"favourites.has_no_favourites": "Je hebt geen favorieten, sla een aantal berichten op als favoriet om ze hier te zien!",
"vote.not_logged_in.title": "Niet Ingelogd",
"vote.not_logged_in.message": "Log a.u.b. in om te kunnen stemmen",
"vote.cant_vote_self.title": "Ongeldige Stem",
"vote.cant_vote_self.message": "Je kan niet op je eigen berichten stemmen",
"loading_more_posts": "Meer Berichten Laden",
"move_topic": "Onderwerp Verplaatsen",
"move_post": "Bericht Verplaatsen",
"fork_topic": "Onderwerp Forken",
"topic_will_be_moved_to": "Dit onderwerp zal verplaatst worden naar de categorie",
"fork_topic_instruction": "Klik op de berichten die je wilt forken",
"fork_no_pids": "Geen berichten geselecteerd!",
"fork_success": "Onderwerp is met succes geforkt!",
"reputation": "Reputatie",
"posts": "Berichten",
"composer.title_placeholder": "Vul de titel voor het onderwerp hier in...",
"composer.write": "Schrijven",
"composer.preview": "Voorbeeld",
"composer.discard": "Annuleren",
"composer.submit": "Opslaan",
"composer.replying_to": "Reageren op",
"composer.new_topic": "Nieuw Onderwerp",
"composer.drag_and_drop_images": "Drag and Drop Images Here",
"composer.content_is_parsed_with": "Content is parsed with",
"composer.upload_instructions": "Upload images by dragging & dropping them."
}

@ -0,0 +1,6 @@
{
"title": "Ongelezen",
"no_unread_topics": "Er zijn geen ongelezen onderwerpen",
"mark_all_read": "Alles markeren als Gelezen",
"load_more": "Meer Laden"
}

@ -0,0 +1,47 @@
{
"banned": "Verbannen",
"offline": "Offline",
"username": "Gebruikersnaam",
"email": "Email",
"fullname": "Volledige Naam",
"website": "Website",
"location": "Locatie",
"age": "Leeftijd",
"joined": "Geregistreerd",
"lastonline": "Laatst Online",
"profile": "Profiel",
"profile_views": "Profiel weergaven",
"reputation": "Reputatie",
"posts": "Berichten",
"favourites": "Favorieten",
"followers": "Volgers",
"following": "Volgend",
"signature": "Handtekening",
"gravatar": "Gravatar",
"birthday": "Verjaardag",
"chat": "Chat",
"follow": "Follow",
"unfollow": "Unfollow",
"change_picture": "Afbeelding Aanpassen",
"edit": "Aanpassen",
"uploaded_picture": "Afbeelding Uploaden",
"upload_new_picture": "Nieuwe Afbeelding Uploaden",
"current_password": "Current Password",
"change_password": "Wachtwoord Aanpassen",
"confirm_password": "Bevestig Wachtwoord",
"password": "Wachtwoord",
"upload_picture": "Afbeelding Uploaden",
"upload_a_picture": "Upload een afbeelding",
"image_spec": "You may only upload PNG, JPG, or GIF files",
"max": "max.",
"settings": "Instellingen",
"show_email": "Laat Mijn Email Zien",
"has_no_follower": "Deze gebruiker heeft geen volgers :(",
"follows_no_one": "Deze gebruiker volgt niemand :(",
"has_no_posts": "Deze gebruiker heeft nog geen berichten geplaatst",
"email_hidden": "Email Verborgen",
"hidden": "verborgen",
"paginate_description": "Paginate topics and posts instead of using infinite scroll.",
"topics_per_page": "Topics per Page",
"posts_per_page": "Posts per Page"
}

@ -0,0 +1,9 @@
{
"latest_users": "Nieuwste Gebruikers",
"top_posters": "Meest Actief",
"most_reputation": "Meeste Reputatie",
"online": "Online",
"search": "Zoeken",
"enter_username": "Vul een gebruikersnaam in om te zoeken",
"load_more": "Meer Laden"
}

@ -10,6 +10,8 @@
"500.message": "Coś poszło nie tak.", "500.message": "Coś poszło nie tak.",
"register": "Zarejestruj się", "register": "Zarejestruj się",
"login": "Zaloguj się", "login": "Zaloguj się",
"please_log_in": "Proszę się zalogować",
"posting_restriction_info": "Pisanie jest dostępne tylko dla zarejestrowanych członków forum, kliknij tutaj aby się zalogować.",
"welcome_back": "Witaj z powrotem!", "welcome_back": "Witaj z powrotem!",
"you_have_successfully_logged_in": "Zostałeś pomyślnie zalogowany.", "you_have_successfully_logged_in": "Zostałeś pomyślnie zalogowany.",
"logout": "Wyloguj się", "logout": "Wyloguj się",

@ -1,7 +1,7 @@
{ {
"home": "Strona główna", "home": "Strona główna",
"unread": "Nieprzeczytane wątki", "unread": "Nieprzeczytane wątki",
"popular": "Popular Topics", "popular": "Popularne wątki",
"recent": "Ostatnie wątki", "recent": "Ostatnie wątki",
"users": "Zarejestrowani użytkownicy", "users": "Zarejestrowani użytkownicy",
"notifications": "Powiadomienia", "notifications": "Powiadomienia",

@ -20,6 +20,11 @@
"flag": "Zgłoś", "flag": "Zgłoś",
"flag_title": "Zgłoś post do moderacji", "flag_title": "Zgłoś post do moderacji",
"deleted_message": "Ten wątek został usunięty. Tylko użytkownicy z uprawnieniami do zarządzania wątkami mogą go widzieć.", "deleted_message": "Ten wątek został usunięty. Tylko użytkownicy z uprawnieniami do zarządzania wątkami mogą go widzieć.",
"following_topic.title": "Obserwujesz wątek",
"following_topic.message": "Będziesz otrzymywał powiadomienia, gdy ktoś odpowie w tym wątku.",
"not_following_topic.title": "Nie obserwujesz wątku",
"not_following_topic.message": "Nie będziesz otrzymywał więcej powiadomień z tego wątku.",
"login_to_subscribe": "Zaloguj się, aby subskrybować ten wątek.",
"watch": "Obserwuj", "watch": "Obserwuj",
"share_this_post": "Udostępnij", "share_this_post": "Udostępnij",
"thread_tools.title": "Narzędzia wątków", "thread_tools.title": "Narzędzia wątków",
@ -61,5 +66,8 @@
"composer.discard": "Odrzuć", "composer.discard": "Odrzuć",
"composer.submit": "Wyślij", "composer.submit": "Wyślij",
"composer.replying_to": "Odpowiadasz", "composer.replying_to": "Odpowiadasz",
"composer.new_topic": "Nowy wątek" "composer.new_topic": "Nowy wątek",
"composer.drag_and_drop_images": "Przeciągnij i upuść obrazek tutaj.",
"composer.content_is_parsed_with": "Tekst jest parsowany przy pomocy",
"composer.upload_instructions": "Prześlij obrazki przeciągając i upuszczając je."
} }

@ -7,50 +7,52 @@
"404.title": "无法找到该页", "404.title": "无法找到该页",
"404.message": "你所查找的页面并不存在,返回<a href='/'>主页</a>。", "404.message": "你所查找的页面并不存在,返回<a href='/'>主页</a>。",
"500.title": "内部错误", "500.title": "内部错误",
"500.message": "不好!看来是哪里出错了!", "500.message": "哎呀!看来是哪里出错了!",
"register": "注册", "register": "注册",
"login": "登录", "login": "登录",
"please_log_in": "请登录",
"posting_restriction_info": "发表目前仅限于注册会员,点击这里登录。",
"welcome_back": "欢迎回来", "welcome_back": "欢迎回来",
"you_have_successfully_logged_in": "You have successfully logged in", "you_have_successfully_logged_in": "你已经退出登录",
"logout": "退出", "logout": "退出",
"logout.title": "你已经退出。", "logout.title": "你已经退出。",
"logout.message": "你已经成功退出登录。", "logout.message": "你已经成功退出登录。",
"save_changes": "保存修改", "save_changes": "保存修改",
"close": "关闭", "close": "关闭",
"pagination": "Pagination", "pagination": "分页",
"header.admin": "管理", "header.admin": "管理",
"header.recent": "最近", "header.recent": "最近",
"header.unread": "未读", "header.unread": "未读",
"header.popular": "Popular", "header.popular": "流行",
"header.users": "用户", "header.users": "用户",
"header.chats": "Chats", "header.chats": "聊天",
"header.notifications": "Notifications", "header.notifications": "通知",
"header.search": "搜索", "header.search": "搜索",
"header.profile": "设置", "header.profile": "设置",
"notifications.loading": "消息载入中", "notifications.loading": "消息载入中",
"chats.loading": "聊天载入中", "chats.loading": "聊天载入中",
"motd.welcome": "Welcome to NodeBB, the discussion platform of the future.", "motd.welcome": "欢迎来到NodeBB未来的社区论坛平台。",
"motd.get": "Get NodeBB", "motd.get": "获取NodeBB",
"motd.fork": "Fork", "motd.fork": "分支",
"motd.like": "", "motd.like": "",
"motd.follow": "关注", "motd.follow": "关注",
"previouspage": "Previous Page", "previouspage": "上一页",
"nextpage": "Next Page", "nextpage": "下一页",
"alert.success": "Success", "alert.success": "成功",
"alert.error": "Error", "alert.error": "错误",
"alert.banned": "Banned", "alert.banned": "禁止",
"alert.banned.message": "You are banned you will be logged out!", "alert.banned.message": "你被禁止了将会退出登录。",
"alert.unfollow": "You are no longer following %1!", "alert.unfollow": "你不再是关注的那1%!",
"alert.follow": "You are now following %1!", "alert.follow": "你现在属于关注的1%!",
"posts": "Posts", "posts": "帖子",
"views": "Views", "views": "浏览",
"posted": "posted", "posted": "发布",
"in": "in", "in": "",
"recentposts": "Recent Posts", "recentposts": "最新发表",
"online": "Online", "online": " 在线",
"away": "Away", "away": "离开",
"dnd": "Do not Disturb", "dnd": "不打扰",
"invisible": "Invisible", "invisible": "不可见",
"offline": "Offline", "offline": "离线",
"privacy": "Privacy" "privacy": "隐私"
} }

@ -1,10 +1,10 @@
{ {
"title": "消息", "title": "通知",
"no_notifs": "You have no new notifications", "no_notifs": "你没有新的通知",
"see_all": "See all Notifications", "see_all": "查看所有通知",
"back_to_home": "返回主页", "back_to_home": "返回主页",
"outgoing_link": "站外链接", "outgoing_link": "站外链接",
"outgoing_link_message": "你正在离开本站", "outgoing_link_message": "你正在离开本站",
"continue_to": "继续前往", "continue_to": "继续前往",
"return_to": "返回" "return_to": "返回"
} }

@ -1,13 +1,13 @@
{ {
"home": "Home", "home": "主页",
"unread": "Unread Topics", "unread": "未读",
"popular": "Popular Topics", "popular": "受欢迎的主题",
"recent": "Recent Topics", "recent": "最新主题",
"users": "Registered Users", "users": "已注册用户",
"notifications": "Notifications", "notifications": "提醒",
"user.edit": "Editing \"%1\"", "user.edit": "编辑 \"%1\"",
"user.following": "People %1 Follows", "user.following": "%1的人关注",
"user.followers": "People who Follow %1", "user.followers": "%1关注的人",
"user.favourites": "%1's Favourite Posts", "user.favourites": "%1 喜爱的帖子",
"user.settings": "User Settings" "user.settings": "用户设置"
} }

@ -1,7 +1,7 @@
{ {
"title": "Recent", "title": "最近",
"day": "今日", "day": "今日",
"week": "本周", "week": "本周",
"month": "本月", "month": "本月",
"no_recent_topics": "There are no recent topics." "no_recent_topics": "没有最近的话题。"
} }

@ -3,7 +3,7 @@
"help.email": "默认情况下,你的邮箱不会公开。", "help.email": "默认情况下,你的邮箱不会公开。",
"help.username_restrictions": "用户名由%1到%2个字符组成。其他人可以通过 @<span id='yourUsername'>用户名</span> 点名你。", "help.username_restrictions": "用户名由%1到%2个字符组成。其他人可以通过 @<span id='yourUsername'>用户名</span> 点名你。",
"help.minimum_password_length": "密码必须至少包含%1个字符。", "help.minimum_password_length": "密码必须至少包含%1个字符。",
"email_address": "Email", "email_address": "邮箱地址",
"email_address_placeholder": "输入邮箱地址", "email_address_placeholder": "输入邮箱地址",
"username": "用户名", "username": "用户名",
"username_placeholder": "输入用户名", "username_placeholder": "输入用户名",
@ -13,6 +13,6 @@
"confirm_password_placeholder": "再次输入密码", "confirm_password_placeholder": "再次输入密码",
"register_now_button": "现在注册", "register_now_button": "现在注册",
"alternative_registration": "其他方式注册", "alternative_registration": "其他方式注册",
"terms_of_use": "Terms of Use", "terms_of_use": "使用条款",
"agree_to_terms_of_use": "I agree to the Terms of Use" "agree_to_terms_of_use": "我同意使用条款"
} }

@ -2,9 +2,9 @@
"topic": "主题", "topic": "主题",
"topics": "主题", "topics": "主题",
"no_topics_found": "没有找到主题!", "no_topics_found": "没有找到主题!",
"no_posts_found": "No posts found!", "no_posts_found": "没有找到帖子!",
"profile": "资料", "profile": "资料",
"posted_by": "Posted by", "posted_by": "发表",
"chat": "聊天", "chat": "聊天",
"notify_me": "该主题有新回复时通知我", "notify_me": "该主题有新回复时通知我",
"quote": "引用", "quote": "引用",
@ -13,25 +13,30 @@
"delete": "删除", "delete": "删除",
"move": "移动", "move": "移动",
"fork": "作为主题", "fork": "作为主题",
"banned": "禁", "banned": "",
"link": "链接", "link": "链接",
"share": "Share", "share": "分享",
"tools": "Tools", "tools": "工具",
"flag": "Flag", "flag": "标志",
"flag_title": "Flag this post for moderation", "flag_title": "标志受限的帖子",
"deleted_message": "This thread has been deleted. Only users with thread management privileges can see it.", "deleted_message": "这个帖子已经删除,只有帖子的拥有者才有权限去查看。",
"watch": "Watch", "following_topic.title": "关注该主题",
"share_this_post": "Share this Post", "following_topic.message": "当有回复提交的时候你将会收到通知。",
"not_following_topic.title": "非关注主题",
"not_following_topic.message": "你将不再接受来自该帖子的通知。",
"login_to_subscribe": "请注册或登录以订阅该主题",
"watch": "查看",
"share_this_post": "分享帖子",
"thread_tools.title": "管理工具", "thread_tools.title": "管理工具",
"thread_tools.markAsUnreadForAll": "Mark Unread", "thread_tools.markAsUnreadForAll": "标记未读",
"thread_tools.pin": "Pin Topic", "thread_tools.pin": "置顶主题",
"thread_tools.unpin": "Unpin Topic", "thread_tools.unpin": "解除置顶",
"thread_tools.lock": "Lock Topic", "thread_tools.lock": "锁定主题",
"thread_tools.unlock": "Unlock Topic", "thread_tools.unlock": "解除锁定",
"thread_tools.move": "Move Topic", "thread_tools.move": "移动主题",
"thread_tools.fork": "Fork Topic", "thread_tools.fork": "分叉主题",
"thread_tools.delete": "Delete Topic", "thread_tools.delete": "删除主题",
"thread_tools.restore": "Restore Topic", "thread_tools.restore": "恢复主题",
"load_categories": "版面载入中", "load_categories": "版面载入中",
"disabled_categories_note": "停用的版面为灰色", "disabled_categories_note": "停用的版面为灰色",
"confirm_move": "移动", "confirm_move": "移动",
@ -41,10 +46,10 @@
"favourites.not_logged_in.title": "未登录", "favourites.not_logged_in.title": "未登录",
"favourites.not_logged_in.message": "收藏帖子之前请先登录。", "favourites.not_logged_in.message": "收藏帖子之前请先登录。",
"favourites.has_no_favourites": "你还没有任何收藏,收藏的帖子将会出现在这里!", "favourites.has_no_favourites": "你还没有任何收藏,收藏的帖子将会出现在这里!",
"vote.not_logged_in.title": "Not Logged In", "vote.not_logged_in.title": "未登录",
"vote.not_logged_in.message": "Please log in in order to vote", "vote.not_logged_in.message": "收藏帖子之前请先登录。",
"vote.cant_vote_self.title": "Invalid Vote", "vote.cant_vote_self.title": "废票 ",
"vote.cant_vote_self.message": "You cannot vote for your own post", "vote.cant_vote_self.message": "你不能为自己的帖子投票",
"loading_more_posts": "载入更多帖子", "loading_more_posts": "载入更多帖子",
"move_topic": "移动主题", "move_topic": "移动主题",
"move_post": "移动帖子", "move_post": "移动帖子",
@ -55,11 +60,14 @@
"fork_success": "成功将帖子作为主题!", "fork_success": "成功将帖子作为主题!",
"reputation": "声望", "reputation": "声望",
"posts": "发帖数", "posts": "发帖数",
"composer.title_placeholder": "Enter your topic title here...", "composer.title_placeholder": "在这里输入你的主题标题...",
"composer.write": "Write", "composer.write": "书写",
"composer.preview": "Preview", "composer.preview": "预览",
"composer.discard": "Discard", "composer.discard": "丢弃",
"composer.submit": "Submit", "composer.submit": "提交",
"composer.replying_to": "Replying to", "composer.replying_to": "回复",
"composer.new_topic": "New Topic" "composer.new_topic": "新主题",
"composer.drag_and_drop_images": "把图像拖到此处",
"composer.content_is_parsed_with": "内容已经被解析",
"composer.upload_instructions": "拖拽图片以上传"
} }

@ -1,5 +1,5 @@
{ {
"title": "Unread", "title": "未读",
"no_unread_topics": "没有未读主题。", "no_unread_topics": "没有未读主题。",
"mark_all_read": "标记全部为已读", "mark_all_read": "标记全部为已读",
"load_more": "载入更多" "load_more": "载入更多"

@ -68,7 +68,8 @@ define(['uploader'], function(uploader) {
$('#entry-container').sortable({ $('#entry-container').sortable({
stop: function( event, ui ) { stop: function( event, ui ) {
updateCategoryOrders(); updateCategoryOrders();
} },
distance: 10
}); });
$('.blockclass').each(function() { $('.blockclass').each(function() {
$(this).val(this.getAttribute('data-value')); $(this).val(this.getAttribute('data-value'));

@ -139,6 +139,7 @@ define(['forum/admin/settings'], function(Settings) {
helper: function(e) { helper: function(e) {
return $(e.target).parents('.panel').clone().addClass('block').width($(e.target.parentNode).width()); return $(e.target).parents('.panel').clone().addClass('block').width($(e.target.parentNode).width());
}, },
distance: 10,
connectToSortable: ".widget-area" connectToSortable: ".widget-area"
}); });
@ -148,7 +149,8 @@ define(['forum/admin/settings'], function(Settings) {
target = target.attr('data-container-html') ? target : target.parents('[data-container-html]'); target = target.attr('data-container-html') ? target : target.parents('[data-container-html]');
return target.clone().addClass('block').width(target.width()).css('opacity', '0.5'); return target.clone().addClass('block').width(target.width()).css('opacity', '0.5');
} },
distance: 10
}); });
function appendToggle(el) { function appendToggle(el) {

@ -1,6 +1,8 @@
define(['composer', 'forum/pagination'], function(composer, pagination) { define(['composer', 'forum/pagination'], function(composer, pagination) {
var Topic = {}, var Topic = {},
infiniteLoaderActive = false; infiniteLoaderActive = false,
scrollingToPost = false,
currentUrl = '';
function showBottomPostBar() { function showBottomPostBar() {
if($('#post-container .post-row').length > 1 || !$('#post-container li[data-index="0"]').length) { if($('#post-container .post-row').length > 1 || !$('#post-container li[data-index="0"]').length) {
@ -606,9 +608,10 @@ define(['composer', 'forum/pagination'], function(composer, pagination) {
socket.on('get_users_in_room', function(data) { socket.on('get_users_in_room', function(data) {
if(data && data.room.indexOf('topic') !== -1) { if(data && data.room.indexOf('topic') !== -1) {
var activeEl = $('.thread_active_users'); var activeEl = $('li.post-bar[data-index="0"] .thread_active_users');
function createUserIcon(uid, picture, userslug, username) { function createUserIcon(uid, picture, userslug, username) {
if(!activeEl.find('[href="'+ RELATIVE_PATH +'/user/' + data.users[i].userslug + '"]').length) { if(!activeEl.find('[href="'+ RELATIVE_PATH +'/user/' + data.users[i].userslug + '"]').length) {
var userIcon = $('<img src="'+ picture +'"/>'); var userIcon = $('<img src="'+ picture +'"/>');
@ -643,7 +646,7 @@ define(['composer', 'forum/pagination'], function(composer, pagination) {
var i=0; var i=0;
// add self // add self
for(i = 0; i<data.users.length; ++i) { for(i = 0; i<data.users.length; ++i) {
if(data.users[i].uid == app.uid) { if(parseInt(data.users[i].uid, 10) === parseInt(app.uid, 10)) {
var icon = createUserIcon(data.users[i].uid, data.users[i].picture, data.users[i].userslug, data.users[i].username); var icon = createUserIcon(data.users[i].uid, data.users[i].picture, data.users[i].userslug, data.users[i].username);
activeEl.prepend(icon); activeEl.prepend(icon);
data.users.splice(i, 1); data.users.splice(i, 1);
@ -983,7 +986,6 @@ define(['composer', 'forum/pagination'], function(composer, pagination) {
}; };
function updateHeader() { function updateHeader() {
var paginationEl = $('#pagination');
$('.pagination-block a').off('click').on('click', function() { $('.pagination-block a').off('click').on('click', function() {
return false; return false;
@ -997,16 +999,10 @@ define(['composer', 'forum/pagination'], function(composer, pagination) {
app.scrollToBottom(); app.scrollToBottom();
}); });
var windowHeight = jQuery(window).height(); if($(window).scrollTop() > 50) {
var scrollTop = jQuery(window).scrollTop(); $('#header-topic-title').text(templates.get('topic_name')).show();
var scrollBottom = scrollTop + windowHeight;
var progressBar = $('.progress-bar');
var tid = templates.get('topic_id');
if(scrollTop > 50) {
$('#header-topic-title').html(templates.get('topic_name')).show();
} else { } else {
$('#header-topic-title').html('').hide(); $('#header-topic-title').text('').hide();
} }
$($('.posts > .post-row').get().reverse()).each(function() { $($('.posts > .post-row').get().reverse()).each(function() {
@ -1017,20 +1013,35 @@ define(['composer', 'forum/pagination'], function(composer, pagination) {
if(index > Topic.postCount) { if(index > Topic.postCount) {
index = Topic.postCount; index = Topic.postCount;
} }
paginationEl.html(index + ' out of ' + Topic.postCount); $('#pagination').html(index + ' out of ' + Topic.postCount);
progressBar.width((index / Topic.postCount * 100) + '%'); $('.progress-bar').width((index / Topic.postCount * 100) + '%');
return false; return false;
} }
}); });
$('.posts > .post-row').each(function() { $('.posts > .post-row').each(function() {
var el = $(this); var el = $(this);
if (elementInView(el)) { if (elementInView(el)) {
var index = parseInt(el.attr('data-index'), 10) + 1; var index = parseInt(el.attr('data-index'), 10) + 1;
if(index === 0) { if(index === 0) {
localStorage.removeItem("topic:" + tid + ":bookmark"); localStorage.removeItem("topic:" + templates.get('topic_id') + ":bookmark");
} else {
localStorage.setItem("topic:" + templates.get('topic_id') + ":bookmark", el.attr('data-pid'));
if (!scrollingToPost) {
var newUrl = window.location.protocol + '//' + window.location.host + window.location.pathname + '#' + el.attr('data-pid')
if (newUrl !== currentUrl) {
if (history.replaceState) {
history.replaceState({
url: window.location.pathname.slice(1) + '#' + el.attr('data-pid')
}, null, newUrl);
} else { } else {
localStorage.setItem("topic:" + tid + ":bookmark", el.attr('data-pid')); location.hash = '#' + el.attr('data-pid');
}
currentUrl = newUrl;
}
}
} }
return false; return false;
} }
@ -1038,7 +1049,7 @@ define(['composer', 'forum/pagination'], function(composer, pagination) {
} }
function elementInView(el) { function elementInView(el) {
var scrollTop = $(window).scrollTop(); var scrollTop = $(window).scrollTop() + $('#header-menu').height();
var scrollBottom = scrollTop + $(window).height(); var scrollBottom = scrollTop + $(window).height();
var elTop = el.offset().top; var elTop = el.offset().top;
@ -1092,15 +1103,16 @@ define(['composer', 'forum/pagination'], function(composer, pagination) {
tid = $('#post-container').attr('data-tid'); tid = $('#post-container').attr('data-tid');
function animateScroll() { function animateScroll() {
scrollingToPost = true;
$("html, body").animate({ $("html, body").animate({
scrollTop: (scrollTo.offset().top - $('#header-menu').height() - offset) + "px" scrollTop: (scrollTo.offset().top - $('#header-menu').height() - offset) + "px"
}, duration !== undefined ? duration : 400, function() { }, duration !== undefined ? duration : 400, function() {
updateHeader(); scrollingToPost = false;
if (highlight) { if (highlight) {
scrollTo.parent().addClass('highlight'); scrollTo.parent().find('.topic-item').addClass('highlight');
setTimeout(function() { setTimeout(function() {
scrollTo.parent().removeClass('highlight'); scrollTo.parent().find('.topic-item').removeClass('highlight');
}, 5000); }, 5000);
} }
}); });

@ -130,6 +130,7 @@ define(['taskbar', 'string'], function(taskbar, S) {
stop:function() { stop:function() {
chatModal.find('#chat-message-input').focus(); chatModal.find('#chat-message-input').focus();
}, },
distance: 10,
handle: '.modal-header' handle: '.modal-header'
}); });

@ -108,6 +108,18 @@
</div> </div>
</div> </div>
<!-- IF ips.length -->
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">[[global:recentips]]</h3>
</div>
<div class="panel-body">
<!-- BEGIN ips -->
{ips.ip}
<!-- END ips -->
</div>
</div>
<!-- ENDIF ips.length -->
</div> </div>

@ -37,7 +37,7 @@
<script src="//code.jquery.com/ui/1.10.3/jquery-ui.js"></script> <script src="//code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script src="{relative_path}/src/utils.js"></script> <script src="{relative_path}/src/utils.js"></script>
<link rel="stylesheet" type="text/css" href="{relative_path}/css/theme.css?{cache-buster}" /> <link rel="stylesheet" type="text/css" href="{relative_path}/stylesheet.css?{cache-buster}" />
</head> </head>
<body class="admin"> <body class="admin">

@ -12,7 +12,7 @@
<ul class="plugins"> <ul class="plugins">
<!-- BEGIN plugins --> <!-- BEGIN plugins -->
<li data-plugin-id="{plugins.id}"> <li data-plugin-id="{plugins.id}">
<h2>{plugins.name}</h2> <h2><strong>{plugins.name}</strong></h2>
<div class="pull-right"> <div class="pull-right">
<button data-action="toggleActive" class="btn <!-- IF plugins.active -->btn-warning<!-- ELSE -->btn-success<!-- ENDIF plugins.active -->">{plugins.activeText}</button> <button data-action="toggleActive" class="btn <!-- IF plugins.active -->btn-warning<!-- ELSE -->btn-success<!-- ENDIF plugins.active -->">{plugins.activeText}</button>
</div> </div>

@ -6,7 +6,7 @@
<meta<!-- IF metaTags.name --> name="{metaTags.name}"<!-- ENDIF metaTags.name --><!-- IF metaTags.property --> property="{metaTags.property}"<!-- ENDIF metaTags.property --><!-- IF metaTags.content --> content="{metaTags.content}"<!-- ENDIF metaTags.content --> /> <meta<!-- IF metaTags.name --> name="{metaTags.name}"<!-- ENDIF metaTags.name --><!-- IF metaTags.property --> property="{metaTags.property}"<!-- ENDIF metaTags.property --><!-- IF metaTags.content --> content="{metaTags.content}"<!-- ENDIF metaTags.content --> />
<!-- END metaTags --> <!-- END metaTags -->
<link rel="stylesheet" href="{relative_path}/vendor/fontawesome/css/font-awesome.min.css"> <link rel="stylesheet" href="{relative_path}/vendor/fontawesome/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="{relative_path}/css/theme.css?{cache-buster}" /> <link rel="stylesheet" type="text/css" href="{relative_path}/stylesheet.css?{cache-buster}" />
<!-- IF bootswatchCSS --><link href="{bootswatchCSS}" rel="stylesheet" media="screen"><!-- ENDIF bootswatchCSS --> <!-- IF bootswatchCSS --><link href="{bootswatchCSS}" rel="stylesheet" media="screen"><!-- ENDIF bootswatchCSS -->
<!-- BEGIN linkTags --> <!-- BEGIN linkTags -->
<link<!-- IF linkTags.link --> link="{linkTags.link}"<!-- ENDIF linkTags.link --><!-- IF linkTags.rel --> rel="{linkTags.rel}"<!-- ENDIF linkTags.rel --><!-- IF linkTags.type --> type="{linkTags.type}"<!-- ENDIF linkTags.type --><!-- IF linkTags.href --> href="{linkTags.href}"<!-- ENDIF linkTags.href --> /> <link<!-- IF linkTags.link --> link="{linkTags.link}"<!-- ENDIF linkTags.link --><!-- IF linkTags.rel --> rel="{linkTags.rel}"<!-- ENDIF linkTags.rel --><!-- IF linkTags.type --> type="{linkTags.type}"<!-- ENDIF linkTags.type --><!-- IF linkTags.href --> href="{linkTags.href}"<!-- ENDIF linkTags.href --> />

@ -38,7 +38,7 @@
</a> </a>
</div> </div>
<div class="col-md-11 panel panel-default post-block"> <div class="col-md-11 panel panel-default post-block topic-item">
<a class="main-post avatar" href="{relative_path}/user/{posts.userslug}"> <a class="main-post avatar" href="{relative_path}/user/{posts.userslug}">
<img itemprop="image" src="{posts.picture}" align="left" class="img-thumbnail" width=150 height=150 /> <img itemprop="image" src="{posts.picture}" align="left" class="img-thumbnail" width=150 height=150 />
@ -154,6 +154,7 @@
<div style="clear:both;"></div> <div style="clear:both;"></div>
</li> </li>
<!-- IF !posts.index -->
<li class="well post-bar" data-index="{posts.index}"> <li class="well post-bar" data-index="{posts.index}">
<div class="inline-block"> <div class="inline-block">
<small class="topic-stats"> <small class="topic-stats">
@ -190,6 +191,7 @@
</div> </div>
<div style="clear:both;"></div> <div style="clear:both;"></div>
</li> </li>
<!-- ENDIF !posts.index -->
<!-- END posts --> <!-- END posts -->
</ul> </ul>

@ -424,6 +424,6 @@ var db = require('./database'),
Categories.addActiveUser(cid, uid, timestamp); Categories.addActiveUser(cid, uid, timestamp);
}); });
} };
}(exports)); }(exports));

@ -153,24 +153,13 @@ var async = require('async'),
downvoted: function(next) { downvoted: function(next) {
db.isSetMember('pid:' + pid + ':downvote', uid, next); db.isSetMember('pid:' + pid + ':downvote', uid, next);
} }
}, function(err, results) { }, callback);
callback(err, results)
});
}; };
Favourites.getVoteStatusByPostIDs = function(pids, uid, callback) { Favourites.getVoteStatusByPostIDs = function(pids, uid, callback) {
var data = {}; async.map(pids, function(pid, next) {
Favourites.hasVoted(pid, uid, next);
function iterator(pid, next) { }, callback);
Favourites.hasVoted(pid, uid, function(err, voteStatus) {
data[pid] = voteStatus;
next()
});
}
async.each(pids, iterator, function(err) {
callback(data);
});
}; };
Favourites.favourite = function (pid, room_id, uid, socket) { Favourites.favourite = function (pid, room_id, uid, socket) {
@ -248,33 +237,15 @@ var async = require('async'),
}; };
Favourites.getFavouritesByPostIDs = function(pids, uid, callback) { Favourites.getFavouritesByPostIDs = function(pids, uid, callback) {
var data = {}; async.map(pids, function(pid, next) {
Favourites.hasFavourited(pid, uid, next);
function iterator(pid, next) { }, callback);
Favourites.hasFavourited(pid, uid, function(err, hasFavourited) {
data[pid] = hasFavourited;
next()
});
}
async.each(pids, iterator, function(err) {
callback(data);
});
}; };
Favourites.getFavouritedUidsByPids = function(pids, callback) { Favourites.getFavouritedUidsByPids = function(pids, callback) {
var data = {}; async.map(pids, function(pid, next) {
db.getSetMembers('pid:' + pid + ':users_favourited', next);
function getUids(pid, next) { }, callback)
db.getSetMembers('pid:' + pid + ':users_favourited', function(err, uids) {
data[pid] = uids;
next();
});
}
async.each(pids, getUids, function(err) {
callback(data);
});
}; };
}(exports)); }(exports));

@ -223,6 +223,7 @@ var fs = require('fs'),
}; };
Meta.js = { Meta.js = {
cache: undefined,
scripts: [ scripts: [
'vendor/jquery/js/jquery.js', 'vendor/jquery/js/jquery.js',
'vendor/jquery/js/jquery-ui-1.10.4.custom.js', 'vendor/jquery/js/jquery-ui-1.10.4.custom.js',
@ -240,7 +241,7 @@ var fs = require('fs'),
'src/translator.js', 'src/translator.js',
'src/utils.js' 'src/utils.js'
], ],
minFile: path.join(__dirname, '..', 'public/src/nodebb.min.js'), minFile: nconf.get('relative_path') + 'nodebb.min.js',
get: function (callback) { get: function (callback) {
plugins.fireHook('filter:scripts.get', this.scripts, function(err, scripts) { plugins.fireHook('filter:scripts.get', this.scripts, function(err, scripts) {
var ctime, var ctime,
@ -266,42 +267,9 @@ var fs = require('fs'),
Meta.js.scripts = jsPaths.filter(function(path) { return path !== null }); Meta.js.scripts = jsPaths.filter(function(path) { return path !== null });
if (process.env.NODE_ENV !== 'development') { if (process.env.NODE_ENV !== 'development') {
async.parallel({
ctime: function (next) {
async.map(jsPaths, fs.stat, function (err, stats) {
async.reduce(stats, 0, function (memo, item, next) {
if(item) {
ctime = +new Date(item.ctime);
next(null, ctime > memo ? ctime : memo);
} else {
next(null, memo);
}
}, next);
});
},
minFile: function (next) {
if (!fs.existsSync(Meta.js.minFile)) {
winston.info('No minified client-side library found');
return next(null, 0);
}
fs.stat(Meta.js.minFile, function (err, stat) {
next(err, +new Date(stat.ctime));
});
}
}, function (err, results) {
if (results.minFile > results.ctime) {
winston.info('No changes to client-side libraries -- skipping minification');
callback(null, [path.relative(path.join(__dirname, '../public'), Meta.js.minFile)]);
} else {
winston.info('Minifying client-side libraries -- please wait');
Meta.js.minify(function () {
callback(null, [ callback(null, [
path.relative(path.join(__dirname, '../public'), Meta.js.minFile) Meta.js.minFile
]); ]);
});
}
});
} else { } else {
callback(null, scripts); callback(null, scripts);
} }
@ -317,17 +285,8 @@ var fs = require('fs'),
} }
minified = uglifyjs.minify(jsPaths); minified = uglifyjs.minify(jsPaths);
fs.writeFile(Meta.js.minFile, minified.code, function (err) { this.cache = minified.code;
if (!err) {
if (process.env.NODE_ENV === 'development') {
winston.info('Minified client-side libraries');
}
callback(); callback();
} else {
winston.error('Problem minifying client-side libraries, exiting.');
process.exit();
}
});
} }
}; };
@ -337,6 +296,10 @@ var fs = require('fs'),
} }
}; };
Meta.css = {
cache: undefined
};
Meta.restart = function() { Meta.restart = function() {
if (process.send) { if (process.send) {
process.send('nodebb:restart'); process.send('nodebb:restart');

@ -16,6 +16,7 @@ var fs = require('fs'),
Plugins.loadedHooks = {}; Plugins.loadedHooks = {};
Plugins.staticDirs = {}; Plugins.staticDirs = {};
Plugins.cssFiles = []; Plugins.cssFiles = [];
Plugins.lessFiles = [];
Plugins.initialized = false; Plugins.initialized = false;
@ -221,6 +222,20 @@ var fs = require('fs'),
} else { } else {
next(); next();
} }
},
function(next) {
// LESS files for plugins
if (pluginData.less && pluginData.less instanceof Array) {
if (global.env === 'development') {
winston.info('[plugins] Found ' + pluginData.less.length + ' LESS file(s) for plugin ' + pluginData.id);
}
Plugins.lessFiles = Plugins.lessFiles.concat(pluginData.less.map(function(file) {
return path.join(pluginData.id, file);
}));
}
next();
} }
], function(err) { ], function(err) {
if (!err) { if (!err) {

@ -0,0 +1,57 @@
var path = require('path'),
nconf = require('nconf'),
less = require('less'),
meta = require('../meta'),
db = require('../database'),
plugins = require('../plugins');
(function (Meta) {
Meta.createRoutes = function(app) {
app.get('/stylesheet.css', function(req, res) {
if (meta.css.cache) {
res.type('text/css').send(200, meta.css.cache);
return;
}
db.getObjectFields('config', ['theme:type', 'theme:id'], function(err, themeData) {
var themeId = (themeData['theme:id'] || 'nodebb-theme-vanilla'),
baseThemePath = path.join(nconf.get('themes_path'), (themeData['theme:type'] && themeData['theme:type'] === 'local' ? themeId : 'nodebb-theme-vanilla')),
paths = [baseThemePath, path.join(__dirname, '../../node_modules')],
source = '@import "./theme";',
x, numLESS;
// Add the imports for each LESS file
for(x=0,numLESS=plugins.lessFiles.length;x<numLESS;x++) {
source += '\n@import "./' + plugins.lessFiles[x] + '";';
}
var parser = new (less.Parser)({
paths: paths
});
parser.parse(source, function(err, tree) {
if (err) {
res.send(500, err.message);
return;
}
meta.css.cache = tree.toCSS({
compress: true
});
res.type('text/css').send(200, meta.css.cache);
});
});
});
app.get('/nodebb.min.js', function(req, res) {
if (meta.js.cache) {
res.type('text/javascript').send(meta.js.cache);
} else {
meta.js.minify(function() {
res.type('text/javascript').send(meta.js.cache);
});
}
});
};
})(exports);

@ -230,6 +230,7 @@ var fs = require('fs'),
app.get('/api/user/:userslug/posts', isAllowed, getUserPosts); app.get('/api/user/:userslug/posts', isAllowed, getUserPosts);
app.get('/api/user/uid/:uid', isAllowed, getUserData); app.get('/api/user/uid/:uid', isAllowed, getUserData);
app.get('/api/user/:userslug', isAllowed, getUserProfile); app.get('/api/user/:userslug', isAllowed, getUserProfile);
app.get('/api/users', isAllowed, getOnlineUsers); app.get('/api/users', isAllowed, getOnlineUsers);
app.get('/api/users/sort-posts', isAllowed, getUsersSortedByPosts); app.get('/api/users/sort-posts', isAllowed, getUsersSortedByPosts);
app.get('/api/users/sort-reputation', isAllowed, getUsersSortedByReputation); app.get('/api/users/sort-reputation', isAllowed, getUsersSortedByReputation);
@ -590,6 +591,9 @@ var fs = require('fs'),
}, },
followStats: function(next) { followStats: function(next) {
user.getFollowStats(uid, next); user.getFollowStats(uid, next);
},
ips: function(next) {
user.getIPs(uid, 4, next);
} }
}, function(err, results) { }, function(err, results) {
if(err || !results.userData) { if(err || !results.userData) {
@ -599,6 +603,7 @@ var fs = require('fs'),
var userData = results.userData; var userData = results.userData;
var userSettings = results.userSettings; var userSettings = results.userSettings;
var isAdmin = results.isAdmin; var isAdmin = results.isAdmin;
var self = parseInt(callerUID, 10) === parseInt(userData.uid, 10);
userData.joindate = utils.toISOString(userData.joindate); userData.joindate = utils.toISOString(userData.joindate);
if(userData.lastonline) { if(userData.lastonline) {
@ -614,19 +619,23 @@ var fs = require('fs'),
} }
function canSeeEmail() { function canSeeEmail() {
return isAdmin || parseInt(callerUID, 10) === parseInt(userData.uid, 10) || (userData.email && userSettings.showemail); return ;
} }
if (!canSeeEmail()) { if (!(isAdmin || self || (userData.email && userSettings.showemail))) {
userData.email = ""; userData.email = "";
} }
if (parseInt(callerUID, 10) === parseInt(userData.uid, 10) && !userSettings.showemail) { if (self && !userSettings.showemail) {
userData.emailClass = ""; userData.emailClass = "";
} else { } else {
userData.emailClass = "hide"; userData.emailClass = "hide";
} }
if (isAdmin || self) {
userData.ips = results.ips;
}
userData.websiteName = userData.website.replace('http://', '').replace('https://', ''); userData.websiteName = userData.website.replace('http://', '').replace('https://', '');
userData.banned = parseInt(userData.banned, 10) === 1; userData.banned = parseInt(userData.banned, 10) === 1;
userData.uid = userData.uid; userData.uid = userData.uid;

@ -207,17 +207,28 @@ SocketPosts.getPrivileges = function(socket, pid, callback) {
SocketPosts.getFavouritedUsers = function(socket, pid, callback) { SocketPosts.getFavouritedUsers = function(socket, pid, callback) {
favourites.getFavouritedUidsByPids([pid], function(data) { favourites.getFavouritedUidsByPids([pid], function(err, data) {
if(err) {
return callback(err);
}
if(!Array.isArray(data) || !data.length) {
callback(null, "");
}
console.log(data);
var max = 5; //hardcoded var max = 5; //hardcoded
var usernames = ""; var usernames = "";
var pid_uids = data[pid]; var pid_uids = data[0];
var rest_amount = 0; var rest_amount = 0;
if (data.hasOwnProperty(pid) && pid_uids.length > 0) {
if (pid_uids.length > max) { if (pid_uids.length > max) {
rest_amount = pid_uids.length - max; rest_amount = pid_uids.length - max;
pid_uids = pid_uids.slice(0, max); pid_uids = pid_uids.slice(0, max);
} }
user.getUsernamesByUids(pid_uids, function(err, result) { user.getUsernamesByUids(pid_uids, function(err, result) {
if(err) { if(err) {
return callback(err); return callback(err);
@ -228,9 +239,6 @@ SocketPosts.getFavouritedUsers = function(socket, pid, callback) {
: ""); : "");
callback(null, usernames); callback(null, usernames);
}); });
} else {
callback(null, "");
}
}); });
}; };

@ -350,12 +350,7 @@ var async = require('async'),
}); });
}; };
Topics.getTopicPosts = function(tid, start, end, current_user, reverse, callback) { Topics.getTopicPosts = function(tid, start, end, uid, reverse, callback) {
if (typeof reverse === 'function') {
callback = reverse;
reverse = false;
}
posts.getPostsByTid(tid, start, end, reverse, function(err, postData) { posts.getPostsByTid(tid, start, end, reverse, function(err, postData) {
if(err) { if(err) {
return callback(err); return callback(err);
@ -373,65 +368,34 @@ var async = require('async'),
return post.pid; return post.pid;
}); });
function getFavouritesData(next) { async.parallel({
favourites.getFavouritesByPostIDs(pids, current_user, function(fav_data) { favourites : function(next) {
next(null, fav_data); favourites.getFavouritesByPostIDs(pids, uid, next);
}); },
} voteData : function(next) {
favourites.getVoteStatusByPostIDs(pids, uid, next);
function getVoteStatusData(next) { },
favourites.getVoteStatusByPostIDs(pids, current_user, function(vote_data) { userData : function(next) {
next(null, vote_data); async.each(postData, posts.addUserInfoToPost, next);
}) },
} privileges : function(next) {
async.map(pids, function (pid, next) {
function addUserInfoToPosts(next) { postTools.privileges(pid, uid, next);
function iterator(post, callback) { }, next);
posts.addUserInfoToPost(post, function() {
callback(null);
});
}
async.each(postData, iterator, function(err) {
next(err, null);
});
}
function getPrivileges(next) {
var privs = {};
async.each(pids, getPostPrivileges, function(err) {
next(err, privs);
});
function getPostPrivileges(pid, next) {
postTools.privileges(pid, current_user, function(err, postPrivileges) {
if(err) {
return next(err);
}
privs[pid] = postPrivileges;
next();
});
}
} }
}, function(err, results) {
async.parallel([getFavouritesData, addUserInfoToPosts, getPrivileges, getVoteStatusData], function(err, results) {
if(err) { if(err) {
return callback(err); return callback(err);
} }
var fav_data = results[0],
privileges = results[2],
voteStatus = results[3];
for (var i = 0; i < postData.length; ++i) { for (var i = 0; i < postData.length; ++i) {
var pid = postData[i].pid; postData[i].favourited = results.favourites[i];
postData[i].favourited = fav_data[pid]; postData[i].upvoted = results.voteData[i].upvoted;
postData[i].upvoted = voteStatus[pid].upvoted; postData[i].downvoted = results.voteData[i].downvoted;
postData[i].downvoted = voteStatus[pid].downvoted;
postData[i].votes = postData[i].votes || 0; postData[i].votes = postData[i].votes || 0;
postData[i].display_moderator_tools = (current_user != 0) && privileges[pid].editable; postData[i].display_moderator_tools = (uid != 0) && results.privileges[i].editable;
postData[i].display_move_tools = privileges[pid].move; postData[i].display_move_tools = results.privileges[i].move;
if(parseInt(postData[i].deleted, 10) === 1 && !privileges[pid].view_deleted) { if(parseInt(postData[i].deleted, 10) === 1 && !results.privileges[i].view_deleted) {
postData[i].content = 'This post is deleted!'; postData[i].content = 'This post is deleted!';
} }
} }
@ -696,7 +660,7 @@ var async = require('async'),
function isTopicVisible(topicData, topicInfo) { function isTopicVisible(topicData, topicInfo) {
var deleted = parseInt(topicData.deleted, 10) !== 0; var deleted = parseInt(topicData.deleted, 10) !== 0;
return !deleted || (deleted && topicInfo.privileges.view_deleted) || topicData.uid === current_user; return !deleted || (deleted && topicInfo.privileges.view_deleted) || parseInt(topicData.uid, 10) === parseInt(current_user, 10);
} }
function loadTopic(tid, next) { function loadTopic(tid, next) {
@ -765,7 +729,7 @@ var async = require('async'),
} }
function getTopicPosts(next) { function getTopicPosts(next) {
Topics.getTopicPosts(tid, start, end, current_user, next); Topics.getTopicPosts(tid, start, end, current_user, false, next);
} }
function getPrivileges(next) { function getPrivileges(next) {
@ -958,9 +922,7 @@ var async = require('async'),
return callback(null, []); return callback(null, []);
} }
async.map(tids, function(tid, next) { async.map(tids, Topics.getTeaser, callback)
Topics.getTeaser(tid, next);
}, callback);
}; };
Topics.getTeaser = function(tid, callback) { Topics.getTeaser = function(tid, callback) {
@ -1039,7 +1001,7 @@ var async = require('async'),
Topics.isLocked = function(tid, callback) { Topics.isLocked = function(tid, callback) {
Topics.getTopicField(tid, 'locked', function(err, locked) { Topics.getTopicField(tid, 'locked', function(err, locked) {
if(err) { if(err) {
return callback(err, null); return callback(err);
} }
callback(null, parseInt(locked, 10) === 1); callback(null, parseInt(locked, 10) === 1);
}); });
@ -1074,16 +1036,18 @@ var async = require('async'),
function getUid(pid, next) { function getUid(pid, next) {
posts.getPostField(pid, 'uid', function(err, uid) { posts.getPostField(pid, 'uid', function(err, uid) {
if (err) if (err) {
return next(err); return next(err);
}
uids[uid] = 1; uids[uid] = 1;
next(null); next();
}); });
} }
async.each(pids, getUid, function(err) { async.each(pids, getUid, function(err) {
if (err) if (err) {
return callback(err, null); return callback(err);
}
callback(null, Object.keys(uids)); callback(null, Object.keys(uids));
}); });

@ -968,6 +968,18 @@ var bcrypt = require('bcryptjs'),
db.sortedSetAdd('uid:' + uid + ':ip', +new Date(), ip || 'Unknown'); db.sortedSetAdd('uid:' + uid + ':ip', +new Date(), ip || 'Unknown');
}; };
User.getIPs = function(uid, end, callback) {
db.getSortedSetRevRange('uid:' + uid + ':ip', 0, end, function(err, ips) {
if(err) {
return callback(err);
}
callback(null, ips.map(function(ip) {
return {ip:ip};
}));
});
};
User.email = { User.email = {
verify: function(uid, email) { verify: function(uid, email) {
if (!plugins.hasListeners('action:email.send')) { if (!plugins.hasListeners('action:email.send')) {

@ -22,16 +22,18 @@ var path = require('path'),
topics = require('./topics'), topics = require('./topics'),
ThreadTools = require('./threadTools'), ThreadTools = require('./threadTools'),
notifications = require('./notifications'), notifications = require('./notifications'),
admin = require('./routes/admin'),
userRoute = require('./routes/user'),
apiRoute = require('./routes/api'),
feedsRoute = require('./routes/feeds'),
auth = require('./routes/authentication'), auth = require('./routes/authentication'),
meta = require('./meta'), meta = require('./meta'),
plugins = require('./plugins'), plugins = require('./plugins'),
logger = require('./logger'), logger = require('./logger'),
templates = require('./../public/src/templates'), templates = require('./../public/src/templates'),
translator = require('./../public/src/translator'); translator = require('./../public/src/translator'),
admin = require('./routes/admin'),
userRoute = require('./routes/user'),
apiRoute = require('./routes/api'),
feedsRoute = require('./routes/feeds'),
metaRoute = require('./routes/meta');
if(nconf.get('ssl')) { if(nconf.get('ssl')) {
server = require('https').createServer({ server = require('https').createServer({
@ -322,13 +324,6 @@ process.on('uncaughtException', function(err) {
} }
} }
app.use(require('less-middleware')({
src: path.join(nconf.get('themes_path'), themeId),
dest: path.join(__dirname, '../public/css'),
prefix: nconf.get('relative_path') + '/css',
yuicompress: app.enabled('minification') ? true : false
}));
next(); next();
} else { } else {
// If not using a local theme (bootswatch, etc), drop back to vanilla // If not using a local theme (bootswatch, etc), drop back to vanilla
@ -487,8 +482,8 @@ process.on('uncaughtException', function(err) {
}; };
app.namespace(nconf.get('relative_path'), function () { app.namespace(nconf.get('relative_path'), function () {
auth.registerApp(app); auth.registerApp(app);
metaRoute.createRoutes(app);
admin.createRoutes(app); admin.createRoutes(app);
userRoute.createRoutes(app); userRoute.createRoutes(app);
apiRoute.createRoutes(app); apiRoute.createRoutes(app);

Loading…
Cancel
Save