diff --git a/nodebb b/nodebb
index 1b43292926..ded766b51e 100755
--- a/nodebb
+++ b/nodebb
@@ -1,6 +1,54 @@
-#!/bin/sh
-clear
-echo "Launching NodeBB in \"development\" mode."
-echo "To run the production build of NodeBB, please use \"forever\"."
-echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB"
-NODE_ENV=development supervisor --extensions 'node|js|tpl' -- app $1
+#!/bin/bash
+
+# $0 script path
+# $1 action
+# $2 subaction
+
+case "$1" in
+ start)
+ node app
+ ;;
+
+ dev)
+ echo "Launching NodeBB in \"development\" mode."
+ echo "To run the production build of NodeBB, please use \"forever\"."
+ echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB"
+ NODE_ENV=development node app
+ ;;
+
+ watch)
+ echo "Launching NodeBB in \"development\" mode."
+ echo "To run the production build of NodeBB, please use \"forever\"."
+ echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB"
+ NODE_ENV=development supervisor --extensions 'node|js|tpl' -- app $1
+ ;;
+
+ language)
+ case "$2" in
+ check)
+ node app --language="check"
+ ;;
+
+ *)
+ echo "Language Settings"
+ echo $"Usage: $0 language {check}"
+ echo ''
+ column -s ' ' -t <<< '
+ check Compare language files against the /en directory
+ '
+ ;;
+ esac
+ ;;
+
+ *)
+ echo "Welcome to NodeBB"
+ echo $"Usage: $0 {start|dev|watch|language}"
+ echo ''
+ column -s ' ' -t <<< '
+ start Start NodeBB in production mode
+ dev Start NodeBB in development mode
+ watch Start NodeBB in development mode and watch for changes
+ language Language settings
+ '
+ exit 1
+esac
diff --git a/public/language/de/category.json b/public/language/de/category.json
new file mode 100644
index 0000000000..87002879fa
--- /dev/null
+++ b/public/language/de/category.json
@@ -0,0 +1,14 @@
+{
+ "new_topic_button": "Neues Thema",
+ "no_topics": "Es gibt noch keine Threads in dieser Kategorie.
Warum beginnst du nicht den ersten?",
+ "sidebar.recent_replies": "Neuste Antworten",
+ "sidebar.active_participants": "Aktive Teilnehmer",
+ "sidebar.moderators": "Moderatoren",
+ "posts": "Posts",
+ "views": "Aufrufe",
+ "posted": "Geposted",
+ "browsing": "Sieht zu",
+ "no_replies": "Niemand hat geantwortet",
+ "replied": "geantwortet",
+ "last_edited_by": "zuletzt editiert durch"
+}
diff --git a/public/language/de/footer.json b/public/language/de/footer.json
new file mode 100644
index 0000000000..adf674ca29
--- /dev/null
+++ b/public/language/de/footer.json
@@ -0,0 +1,10 @@
+{
+ "chat.chatting_with": "Chatten mit ",
+ "chat.placeholder": "schreibe hier etwas, und drücke Enter zum absenden",
+ "chat.send": "Senden",
+ "stats.online": "Online",
+ "stats.users": "Benutzer",
+ "stats.topics": "Themen",
+ "stats.posts": "Beiträge",
+ "success": "erfolg"
+}
diff --git a/public/language/de/global.json b/public/language/de/global.json
new file mode 100644
index 0000000000..51dd759117
--- /dev/null
+++ b/public/language/de/global.json
@@ -0,0 +1,31 @@
+{
+ "home": "Übersicht",
+ "search": "Suche",
+ "buttons.close": "Schließen",
+ "403.title": "Zugriff Verweigert",
+ "403.message": "Du bist nicht dazu berechtigt, diese Seite aufzurufen. Logge dich ein und versuche es erneut.",
+ "404.title": " Nicht Gefunden",
+ "404.message": "Die abgefragte Seite wurde nicht gefunden. Zurück zur Übersicht.",
+ "500.title": "Internal error.",
+ "500.message": "Ooops! Looks like something went wrong!",
+
+ "register": "Registrierung",
+ "login": "Login",
+
+ "logout": "Logout",
+ "logout.title": "Du bist ausgeloggt.",
+ "logout.message": "Du hast dich soeben erfolgreich aus dem Forum ausgeloggt.",
+
+ "save_changes": "Speichere Änderungen",
+ "close": "Schließen",
+
+ "header.admin": "Admin",
+ "header.recent": "Aktuell",
+ "header.unread": "Ungelesen",
+ "header.users": "Benutzer",
+ "header.search": "Suche",
+ "header.profile": "Profil",
+
+ "notifications.loading": "Benachrichtigungen laden",
+ "chats.loading": "Nachrichten werden geladen"
+}
diff --git a/public/language/de/login.json b/public/language/de/login.json
new file mode 100644
index 0000000000..eb7f071969
--- /dev/null
+++ b/public/language/de/login.json
@@ -0,0 +1,10 @@
+{
+ "login": "Einloggen",
+ "username": "Benutzername",
+ "password": "Passwort",
+ "remember_me": "Eingeloggt bleiben?",
+ "forgot_password": "Passwort vergessen?",
+ "alternative_logins": "Login Alternativen",
+ "failed_login_attempt": " Anmeldeversuch fehlgeschlagen, versuche es erneut.",
+ "login_successful": "Du hast dich erfolgreich eingeloggt!"
+}
diff --git a/public/language/de/notifications.json b/public/language/de/notifications.json
new file mode 100644
index 0000000000..7e5ac112e9
--- /dev/null
+++ b/public/language/de/notifications.json
@@ -0,0 +1,9 @@
+{
+ "title": "Benachrichtigungen",
+ "back_to_home": "Zurück zur Startseite",
+ "mark_all_as_read": "Alles als gelesen markieren",
+ "outgoing_link": "Externer Link",
+ "outgoing_link_message": "Du verlässt nun",
+ "continue_to": "Gehe weiter zu",
+ "return_to": "Kehre zurück zu"
+}
diff --git a/public/language/de/recent.json b/public/language/de/recent.json
new file mode 100644
index 0000000000..c6d5301470
--- /dev/null
+++ b/public/language/de/recent.json
@@ -0,0 +1,5 @@
+{
+ "day": "Tag",
+ "week": "Woche",
+ "month": "Monat"
+}
diff --git a/public/language/de/register.json b/public/language/de/register.json
new file mode 100644
index 0000000000..2c1469ed7a
--- /dev/null
+++ b/public/language/de/register.json
@@ -0,0 +1,16 @@
+{
+ "register": "Registrieren",
+ "help.email": "Deine E-Mail Adresse ist standardmäßig nicht öffentlich sichtbar.",
+ "help.username_restrictions": "Einen einmaligen Benutzernamen. 3-16 Zeichen. Andere Benutzer können dich mit @Benutzername anschreiben.",
+ "help.minimum_password_length": "Dein Passwort muss mindestens sechs Zeichen lang sein.",
+ "email_address": "E-Mail",
+ "email_address_placeholder": "E-Mail Adresse hier eingeben",
+ "username": "Benutzername",
+ "username_placeholder": "Benutzernamen eingeben",
+ "password": "Passwort",
+ "password_placeholder": "Passwort eingeben",
+ "confirm_password": "Passwort bestätigen",
+ "confirm_password_placeholder": "Passwort zur Bestätigung erneut eingeben",
+ "register_now_button": "Jetzt registrieren",
+ "alternative_registration": "Alternative Registrierung"
+}
diff --git a/public/language/de/reset_password.json b/public/language/de/reset_password.json
new file mode 100644
index 0000000000..65eaca9028
--- /dev/null
+++ b/public/language/de/reset_password.json
@@ -0,0 +1,13 @@
+{
+ "reset_password": "Passwort zurücksetzen",
+ "update_password": "Ändere Passwort",
+ "password_change": "Passwort wurde geändert",
+ "password_reset_successful": "
Das Passwort wurde erfolgreich zurückgesetzt. Log dich neu ein.",
+ "wrong_reset_code.title": "Der Reset-Code ist falsch.",
+ "wrong_reset_code.message": "Der empfangene Reset-Code war falsch. Bitte versuche es erneut oder fordere einen neuen Code an.",
+ "new_password": "Neues Passwort",
+ "repeat_password": "Wiederhole das Passwort",
+ "enter_email": "Bitte gib Deine E-Mail Adresse ein und wir senden Dir eine Anleitung, wie Du Dein Passwort zurücksetzen kannst.",
+ "password_reset_sent": "Passwortzrücksetzung beantragt.",
+ "invalid_email": "Ungültige E-Mail / Adresse existiert nicht!"
+}
diff --git a/public/language/de/topic.json b/public/language/de/topic.json
new file mode 100644
index 0000000000..e882660101
--- /dev/null
+++ b/public/language/de/topic.json
@@ -0,0 +1,40 @@
+{
+ "topic": "Thema",
+ "topics": "Themen",
+
+ "no_topics_found": "Keine passende Themen gefunden.",
+
+ "profile": "Profil",
+ "posted_by": "geschrieben von",
+ "chat": "Chat",
+ "notify_me": "Werde bei neues Antworten auf dieses Thema benachrichtigt.",
+ "quote": "zitieren",
+ "reply": "antworten",
+ "edit": "bearbeiten",
+ "delete": "löschen",
+ "banned": "gesperrt",
+ "link": "Link",
+
+ "thread_tools.title": "Thread Tools",
+ "thread_tools.pin": "Thread pinnen",
+ "thread_tools.unpin": "Thread nicht mehr pinnen",
+ "thread_tools.lock": "Thread sperren",
+ "thread_tools.move": "Thread verschieben",
+ "thread_tools.delete": "Thread löschen",
+
+ "load_categories": "Kategorien laden",
+ "disabled_categories_note": "Deaktivierte Kategorien sind ausgegraut.",
+ "confirm_move": "verschieben",
+
+ "favourite": "Favorit",
+ "favourites": "Favoriten",
+ "favourites.not_logged_in.title": "Nicht eingeloggt!",
+ "favourites.not_logged_in.message": "Bitte logge dich ein, um diesen Beitrag favorisieren zu können.",
+ "favourites.has_no_favourites":"Du hast noch keine Favoriten.",
+
+ "posted_by": "Geposted von",
+ "loading": "Lade",
+ "more_posts": "Mehr Posts",
+ "move_topic": "Thema verschieben",
+ "topic_will_be_moved_to": "Dieses Thema wird verschoben nach"
+}
diff --git a/public/language/de/unread.json b/public/language/de/unread.json
new file mode 100644
index 0000000000..28585b0aa0
--- /dev/null
+++ b/public/language/de/unread.json
@@ -0,0 +1,5 @@
+{
+ "no_unread_topics": "Es gibt keine ungelesenen Themen.",
+ "mark_all_read": "alle als gelesen markieren",
+ "load_more": "mehr laden"
+}
\ No newline at end of file
diff --git a/public/language/de/user.json b/public/language/de/user.json
new file mode 100644
index 0000000000..492307f50d
--- /dev/null
+++ b/public/language/de/user.json
@@ -0,0 +1,38 @@
+{
+ "banned": "Gebannt",
+ "offline": "offline",
+ "email": "E-Mail",
+ "fullname": "Kompletter Name",
+ "website": "Homepage",
+ "location": "Wohnort",
+ "age": "Alter",
+ "joined": "Beigetreten",
+ "profil_views": "Profilaufrufe",
+ "reputation": "Reputation",
+ "posts": "Posts",
+ "followers": "Follower",
+ "following": "Folgt",
+ "signature": "Signatur",
+ "gravatar": "Gravatar",
+ "birthday": "Geburtstag",
+
+ "change_picture": "Ändere Profilbild",
+ "edit": "Ändern",
+ "uploaded_pictures": "Hochgeladene Bilder",
+ "upload_new_picture": "Neues Bild hochladen",
+ "change_password": "Ändere Passwort",
+ "confirm_password": "Passwort wiederholen",
+ "password": "Passwort",
+
+ "upload_picture": "Bild hochladen",
+ "upload_a_picture": "Ein Bild hochladen",
+ "image_spec": "Du solltest nur Dateien die PNG, JPG, oder GIF kleiner als 256kb hochladen.",
+
+ "settings": "Einstellungen",
+ "show_my_email": "Zeige meine E-Mail Adresse an.",
+
+ "has_no_follower": "Dieser User hat noch keine Follower.",
+ "follows_no_one": "Dieser User folgt noch niemanden."
+
+
+}
diff --git a/public/language/de/users.json b/public/language/de/users.json
new file mode 100644
index 0000000000..32ca305187
--- /dev/null
+++ b/public/language/de/users.json
@@ -0,0 +1,9 @@
+{
+ "latest_users": "neuste Benutzer",
+ "top_posters": "meiste Beiträge",
+ "most_reputation": "höhstes Ansehen",
+ "online": "Online",
+ "search": "Suchen",
+ "enter_username": "Benutzer durchsuchen",
+ "load_more": "mehr laden"
+}
diff --git a/public/language/en/category.json b/public/language/en/category.json
index 73d3bef853..d29e23eb95 100644
--- a/public/language/en/category.json
+++ b/public/language/en/category.json
@@ -3,5 +3,12 @@
"no_topics": "There are no topics in this category.
Why don't you try posting one?",
"sidebar.recent_replies": "Recent Replies",
"sidebar.active_participants": "Active Participants",
- "sidebar.moderators": "Moderators"
-}
\ No newline at end of file
+ "sidebar.moderators": "Moderators",
+ "posts": "posts",
+ "views": "views",
+ "posted": "posted",
+ "browsing": "browsing",
+ "no_replies": "No one has replied",
+ "replied": "replied",
+ "last_edited_by": "last edited by"
+}
diff --git a/public/language/en/footer.json b/public/language/en/footer.json
index 32d2e92bbe..a1270d4ea4 100644
--- a/public/language/en/footer.json
+++ b/public/language/en/footer.json
@@ -1,9 +1,10 @@
{
- "chat.chatting_with": "Chat with ",
+ "chat.chatting_with": "Chat with ",
"chat.placeholder": "type chat message here, press enter to send",
"chat.send": "Send",
"stats.online": "Online",
"stats.users": "Users",
"stats.topics": "Topics",
- "stats.posts": "Posts"
-}
\ No newline at end of file
+ "stats.posts": "Posts",
+ "success": "success"
+}
diff --git a/public/language/en/global.json b/public/language/en/global.json
index 32ea294957..7fb54239af 100644
--- a/public/language/en/global.json
+++ b/public/language/en/global.json
@@ -7,15 +7,25 @@
"404.title": "Not Found",
"404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.",
"500.title": "Internal error.",
- "500.message": "Ooops! Looks like something went wrong!",
+ "500.message": "Oops! Looks like something went wrong!",
+
+ "register": "Register",
+ "login": "Login",
+
"logout": "Logout",
"logout.title": "You are now logged out.",
"logout.message": "You have successfully logged out of NodeBB",
+
+ "save_changes": "Save Changes",
+ "close": "Close",
+
"header.admin": "Admin",
"header.recent": "Recent",
"header.unread": "Unread",
"header.users": "Users",
"header.search": "Search",
+ "header.profile": "Profile",
+
"notifications.loading": "Loading Notifications",
"chats.loading": "Loading Chats"
-}
\ No newline at end of file
+}
diff --git a/public/language/en/login.json b/public/language/en/login.json
index 947395a46d..f2090276a1 100644
--- a/public/language/en/login.json
+++ b/public/language/en/login.json
@@ -7,4 +7,4 @@
"alternative_logins": "Alternative Logins",
"failed_login_attempt": "Failed login attempt, please try again.",
"login_successful": "You have successfully logged in!"
-}
\ No newline at end of file
+}
diff --git a/public/language/en/notifications.json b/public/language/en/notifications.json
index 212cf3fa4f..bfe2a48ab8 100644
--- a/public/language/en/notifications.json
+++ b/public/language/en/notifications.json
@@ -1,3 +1,9 @@
{
- "title": "Notifications"
-}
\ No newline at end of file
+ "title": "Notifications",
+ "back_to_home": "back to NodeBB",
+ "mark_all_as_read": "Mark All as Read",
+ "outgoing_link": "Outgoing Link",
+ "outgoing_link_message": "You are now leaving",
+ "continue_to": "Continue to",
+ "return_to": "Return to "
+}
diff --git a/public/language/en/reset_password.json b/public/language/en/reset_password.json
new file mode 100644
index 0000000000..468bfb0254
--- /dev/null
+++ b/public/language/en/reset_password.json
@@ -0,0 +1,13 @@
+{
+ "reset_password": "Reset Password",
+ "update_password": "Update Password",
+ "password_changed.title": "Password Changed",
+ "password_changed.message": "
Password successfully reset, please log in again.",
+ "wrong_reset_code.title": "Incorrect Reset Code",
+ "wrong_reset_code.message": "The reset code received was incorrect. Please try again, or request a new reset code.",
+ "new_password": "New Password",
+ "repeat_password": "Confirm Password",
+ "enter_email": "Please enter your email address and we will send you an email with instructions on how to reset your account.",
+ "password_reset_sent": "Password Reset Sent",
+ "invalid_email": "Invalid Email / Email does not exist!"
+}
diff --git a/public/language/en/topic.json b/public/language/en/topic.json
index 278ceea37a..2584436a22 100644
--- a/public/language/en/topic.json
+++ b/public/language/en/topic.json
@@ -1,23 +1,39 @@
{
+ "topic": "Topic",
+ "topics": "Topics",
+
+ "no_topics_found": "No topics found!",
+
"profile": "Profile",
"posted_by": "Posted by",
"chat": "Chat",
"notify_me": "Be notified of new replies in this topic",
- "favourite": "Favourite",
"quote": "Quote",
"reply": "Reply",
"edit": "Edit",
"delete": "Delete",
"banned": "banned",
"link": "Link",
+
"thread_tools.title": "Thread Tools",
"thread_tools.pin": "Pin Thread",
"thread_tools.lock": "Lock Thread",
"thread_tools.move": "Move Thread",
"thread_tools.delete": "Delete Thread",
+
"load_categories": "Loading Categories",
"disabled_categories_note": "Disabled Categories are greyed out",
"confirm_move": "Move",
+
+ "favourite": "Favourite",
+ "favourites": "Favorites",
"favourites.not_logged_in.title": "Not Logged In",
- "favourites.not_logged_in.message": "Please log in in order to favourite this post"
-}
\ No newline at end of file
+ "favourites.not_logged_in.message": "Please log in in order to favourite this post",
+ "favourites.has_no_favourites": "You don't have any favourites, favourite some posts to see them here!",
+
+ "posted_by": "posted by",
+ "loading": "Lade",
+ "more_posts": "More Posts",
+ "move_topic": "Move Topic",
+ "topic_will_be_moved_to": "This topic will be moved to the category"
+}
diff --git a/public/language/en/user.json b/public/language/en/user.json
new file mode 100644
index 0000000000..512fad96c3
--- /dev/null
+++ b/public/language/en/user.json
@@ -0,0 +1,36 @@
+{
+ "banned": "Banned",
+ "offline": "offline",
+ "email": "email",
+ "fullname": "full name",
+ "website": "website",
+ "location": "location",
+ "age": "age",
+ "joined": "joined",
+ "profil_views": "profil views",
+ "reputation": "reputation",
+ "posts": "posts",
+ "followers": "followers",
+ "following": "following",
+ "signature": "signature",
+ "gravatar": "gravatar",
+ "birthday": "birthday",
+
+ "change_picture": "change picture",
+ "edit": "edit",
+ "uploaded_pictures": "uploaded pictures",
+ "upload_new_picture": "upload new picture",
+ "change_password": "change password",
+ "confirm_password": "confirm password",
+ "password": "password",
+
+ "upload_picture": "Upload picture",
+ "upload_a_picture": "Upload a picture",
+ "image_spec": "You may only upload PNG, JPG, or GIF files under 256kb.",
+
+ "settings": "settings",
+ "show_my_email": "show my email",
+
+ "has_no_follower": "This user doesn't have any followers :(",
+ "follows_no_one": "This user isn't following anyone :("
+}
diff --git a/public/language/es/category.json b/public/language/es/category.json
new file mode 100644
index 0000000000..5d24993edf
--- /dev/null
+++ b/public/language/es/category.json
@@ -0,0 +1,14 @@
+{
+ "new_topic_button": "Nuevo Tema",
+ "no_topics": "No hay temas en esta categoría.
Por que no te animas y publicas uno?",
+ "sidebar.recent_replies": "Respuestas recientes",
+ "sidebar.active_participants": "Miembros más activos",
+ "sidebar.moderators": "Moderadores",
+ "posts": "respuestas",
+ "views": "visitas",
+ "posted": "posted",
+ "browsing": "viendo ahora",
+ "no_replies": "Nadie ha respondido aún",
+ "replied": "respondio",
+ "last_edited_by": "ultima edición por"
+}
\ No newline at end of file
diff --git a/public/language/es/footer.json b/public/language/es/footer.json
new file mode 100644
index 0000000000..eeb962b234
--- /dev/null
+++ b/public/language/es/footer.json
@@ -0,0 +1,10 @@
+{
+ "chat.chatting_with": "Chatear con ",
+ "chat.placeholder": "ingresa tu mensaje aqui, y presiona enter para enviar",
+ "chat.send": "Enviar",
+ "stats.online": "Online",
+ "stats.users": "Usuarios",
+ "stats.topics": "Temas",
+ "stats.posts": "Posts",
+ "success": "exito!"
+}
\ No newline at end of file
diff --git a/public/language/es/global.json b/public/language/es/global.json
new file mode 100644
index 0000000000..ab14fef5fd
--- /dev/null
+++ b/public/language/es/global.json
@@ -0,0 +1,31 @@
+{
+ "home": "Inicio",
+ "search": "Buscar",
+ "buttons.close": "Cerrar",
+ "403.title": "Acceso denegado",
+ "403.message": "Al parecer no tienes premisos necesarios para estar en este lugar. Tal vez puedes intentar conectarte?",
+ "404.title": "Ups... 404, no se encontra che!",
+ "404.message": "Al parecer lo que estas buscando no existe. Te recomendamos que vuelvas al inicio.",
+ "500.title": "Error Interno.",
+ "500.message": "Ooops! Algo salio mal!, No te alarmes. Nuestros simios hiperinteligentes lo solucionarán",
+
+ "register": "Registrarse",
+ "login": "Conectarse",
+
+ "logout": "Salir",
+ "logout.title": "Te has desconectado.",
+ "logout.message": "Haz sido desconectado correctamente",
+
+ "save_changes": "Guardar Cambios",
+ "close": "Cerrar",
+
+ "header.admin": "Admin",
+ "header.recent": "Recientes",
+ "header.unread": "No Leeidos",
+ "header.users": "Miembros",
+ "header.search": "Buscar",
+ "header.profile": "Perfil",
+
+ "notifications.loading": "Cargando Notificaciones",
+ "chats.loading": "Cargando Chats"
+}
\ No newline at end of file
diff --git a/public/language/es/login.json b/public/language/es/login.json
new file mode 100644
index 0000000000..063c3aa5d2
--- /dev/null
+++ b/public/language/es/login.json
@@ -0,0 +1,10 @@
+{
+ "login": "Conectarse",
+ "username": "Usuario",
+ "password": "Contraseña",
+ "remember_me": "Recordarme?",
+ "forgot_password": "Olvidaste tu contraseña?",
+ "alternative_logins": "Conexiones Alternativas",
+ "failed_login_attempt": "Error al loguearte, intenta de nuevo.",
+ "login_successful": "Te has conectado con exito!"
+}
\ No newline at end of file
diff --git a/public/language/es/notifications.json b/public/language/es/notifications.json
new file mode 100644
index 0000000000..cc15c86859
--- /dev/null
+++ b/public/language/es/notifications.json
@@ -0,0 +1,9 @@
+{
+ "title": "Notificaciones",
+ "back_to_home": "volver al Inicio",
+ "mark_all_as_read": "Marcar todo como leeido",
+ "outgoing_link": "Link Externo",
+ "outgoing_link_message": "Estas saliendo del sitio",
+ "continue_to": "Continuar",
+ "return_to": "Volver a "
+}
diff --git a/public/language/es/recent.json b/public/language/es/recent.json
new file mode 100644
index 0000000000..5d6792e0d2
--- /dev/null
+++ b/public/language/es/recent.json
@@ -0,0 +1,5 @@
+{
+ "day": "Día",
+ "week": "Semana",
+ "month": "Mes"
+}
\ No newline at end of file
diff --git a/public/language/es/register.json b/public/language/es/register.json
new file mode 100644
index 0000000000..a5a7ed0381
--- /dev/null
+++ b/public/language/es/register.json
@@ -0,0 +1,16 @@
+{
+ "register": "Registrase",
+ "help.email": "Por defecto, tu email será oculto al publico.",
+ "help.username_restrictions": "El nombre de usuario debe tener entre %1 y %2 caracteres. Los miembros pueden responderte escribiendo @usuario.",
+ "help.minimum_password_length": "Tu contraseña debe tener al menos %1 caracteres.",
+ "email_address": "Email",
+ "email_address_placeholder": "Escribe tu email",
+ "username": "Usuario",
+ "username_placeholder": "Escribe tu usuario",
+ "password": "Contraseña",
+ "password_placeholder": "Escribe tu Contraseña",
+ "confirm_password": "Confirmar Contraseña",
+ "confirm_password_placeholder": "Confirmar Contraseña",
+ "register_now_button": "Registrarme ahora",
+ "alternative_registration": "Otros metodos interesantes para registrarse"
+}
\ No newline at end of file
diff --git a/public/language/es/reset_password.json b/public/language/es/reset_password.json
new file mode 100644
index 0000000000..11659f9b27
--- /dev/null
+++ b/public/language/es/reset_password.json
@@ -0,0 +1,13 @@
+{
+ "reset_password": "Resetear Contraseña",
+ "update_password": "Actualizar contraseña",
+ "password_changed.title": "Contraseña editada",
+ "password_changed.message": "
La contraseña fue modificada con exito, por favor conectate de nuevo.",
+ "wrong_reset_code.title": "Código de Reseteo Incorrecto",
+ "wrong_reset_code.message": "El código de reseteo ingresado no es correcto. Por favor intentalo de nuevo o pide un nuevo código.",
+ "new_password": "Nueva Contraseña",
+ "repeat_password": "Confirmar Contraseña",
+ "enter_email": "Por favor ingresa tu email y te enviaremos un email de como resetear tu cuenta.",
+ "password_reset_sent": "Resteo de contraseña enviado",
+ "invalid_email": "Email Invalido o no existe!"
+}
diff --git a/public/language/es/topic.json b/public/language/es/topic.json
new file mode 100644
index 0000000000..865c80a59b
--- /dev/null
+++ b/public/language/es/topic.json
@@ -0,0 +1,39 @@
+{
+ "topic": "Tema",
+ "topics": "Temas",
+
+ "no_topics_found": "No se encontraron temas!",
+
+ "profile": "Perfil",
+ "posted_by": "Publicado por",
+ "chat": "Chat",
+ "notify_me": "Seras notificado cuando haya nuevas respuestas en este tema",
+ "quote": "Citar",
+ "reply": "Responder",
+ "edit": "Editar",
+ "delete": "Borrar",
+ "banned": "banneado",
+ "link": "Link",
+
+ "thread_tools.title": "Herramientas del Tema",
+ "thread_tools.pin": "Poner Sticky",
+ "thread_tools.lock": "Cerrar Tema",
+ "thread_tools.move": "Mover Tema",
+ "thread_tools.delete": "Borrar Tema",
+
+ "load_categories": "Cargando Categorias",
+ "disabled_categories_note": "Las categorías deshabilidas estan en gris",
+ "confirm_move": "Mover",
+
+ "favourite": "Favorito",
+ "favourites": "Favoritos",
+ "favourites.not_logged_in.title": "No estas conectado :(",
+ "favourites.not_logged_in.message": "Por favor, conectate para agregar a favorito este post.",
+ "favourites.has_no_favourites": "No tienes favoritos, puedes agregar alguno y volver a verlos aqui!",
+
+ "posted_by": "Publicado por",
+ "loading": "Cargando",
+ "more_posts": "Más posts",
+ "move_topic": "Mover Tema",
+ "topic_will_be_moved_to": "Este tema sera movido a la categoría"
+}
\ No newline at end of file
diff --git a/public/language/es/unread.json b/public/language/es/unread.json
new file mode 100644
index 0000000000..07b0b63bb0
--- /dev/null
+++ b/public/language/es/unread.json
@@ -0,0 +1,5 @@
+{
+ "no_unread_topics": "No hay temas nuevos para leer.",
+ "mark_all_read": "Marcar todo como leeido",
+ "load_more": "Cargar más"
+}
\ No newline at end of file
diff --git a/public/language/es/user.json b/public/language/es/user.json
new file mode 100644
index 0000000000..f1bfdf4ed0
--- /dev/null
+++ b/public/language/es/user.json
@@ -0,0 +1,36 @@
+{
+ "banned": "Banneado",
+ "offline": "desconectado",
+ "email": "email",
+ "fullname": "nombre completo",
+ "website": "website",
+ "location": "ubicación",
+ "age": "edad",
+ "joined": "registro",
+ "profil_views": "visitas en su perfil",
+ "reputation": "reputación",
+ "posts": "posts",
+ "followers": "seguidores",
+ "following": "siguiendo",
+ "signature": "firma",
+ "gravatar": "gravatar",
+ "birthday": "cumpleaños",
+
+ "change_picture": "cambiar foto",
+ "edit": "editar",
+ "uploaded_pictures": "fotos cargadas",
+ "upload_new_picture": "cargar nueva foto",
+ "change_password": "cambiar contraseña",
+ "confirm_password": "confirmar contraseña",
+ "password": "contraseña",
+
+ "upload_picture": "Cargar foto",
+ "upload_a_picture": "Cargar una foto",
+ "image_spec": "Solo puedes usar PNG, JPG, o GIF hasta 256kb.",
+
+ "settings": "opciones",
+ "show_my_email": "mostrar mi email",
+
+ "has_no_follower": "Este miembro no tiene seguidores :(",
+ "follows_no_one": "Este miembro no sigue a nadie, que pena :("
+}
diff --git a/public/language/es/users.json b/public/language/es/users.json
new file mode 100644
index 0000000000..fc57fdcf4c
--- /dev/null
+++ b/public/language/es/users.json
@@ -0,0 +1,9 @@
+{
+ "latest_users": "Ultimos Miembros",
+ "top_posters": "Top Posteadores",
+ "most_reputation": "Mayor Reputación",
+ "online": "Conectados",
+ "search": "Buscar",
+ "enter_username": "Ingresa el nombre de usuario para buscar",
+ "load_more": "Cargar más"
+}
\ No newline at end of file
diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js
index e30b000470..bba039ea66 100644
--- a/public/src/ajaxify.js
+++ b/public/src/ajaxify.js
@@ -119,7 +119,7 @@ var ajaxify = {};
});
}
- utils.refreshTitle(url);
+ app.refreshTitle(url);
}, url, template);
diff --git a/public/src/app.js b/public/src/app.js
index 09c1f377bb..c7fe7835e7 100644
--- a/public/src/app.js
+++ b/public/src/app.js
@@ -396,7 +396,44 @@ var socket,
$('body,html').animate({
scrollTop: $('html').height() - 100
});
- }
+ };
+
+ var titleObj = {
+ active: false,
+ interval: undefined,
+ titles: []
+ };
+ app.alternatingTitle = function (title) {
+ if (typeof title !== 'string') return;
+
+ if (title.length > 0) {
+ titleObj.titles[1] = title;
+ if (titleObj.interval) {
+ clearInterval(titleObj.interval);
+ }
+ titleObj.interval = setInterval(function() {
+ window.document.title = titleObj.titles[titleObj.titles.indexOf(window.document.title) ^ 1];
+ }, 2000);
+ } else {
+ if (titleObj.interval) {
+ clearInterval(titleObj.interval);
+ }
+ if (titleObj.titles[0]) window.document.title = titleObj.titles[0];
+ }
+ };
+
+ app.refreshTitle = function(url) {
+ if (!url) {
+ var a = document.createElement('a');
+ a.href = document.location;
+ url = a.pathname.slice(1);
+ }
+
+ socket.emit('api:meta.buildTitle', url, function(title, numNotifications) {
+ titleObj.titles[0] = (numNotifications > 0 ? '(' + numNotifications + ') ' : '') + title;
+ app.alternatingTitle('');
+ });
+ };
jQuery('document').ready(function () {
$('#search-form').on('submit', function () {
@@ -410,5 +447,5 @@ var socket,
showWelcomeMessage = location.href.indexOf('loggedin') !== -1;
app.loadConfig();
-
+ app.alternatingTitle('');
}());
\ No newline at end of file
diff --git a/public/src/forum/footer.js b/public/src/forum/footer.js
index 9e67ba51d5..eb8d0f3e20 100644
--- a/public/src/forum/footer.js
+++ b/public/src/forum/footer.js
@@ -112,7 +112,7 @@
socket.emit('api:notifications.mark_all_read', null, function() {
notifIcon.toggleClass('active', false);
- utils.refreshTitle();
+ app.refreshTitle();
// Update favicon + local count
Tinycon.setBubble(0);
@@ -167,7 +167,7 @@
type: 'warning',
timeout: 2000
});
- utils.refreshTitle();
+ app.refreshTitle();
// Update the favicon + local storage
var savedCount = parseInt(localStorage.getItem('notifications:count'),10) || 0;
@@ -209,7 +209,6 @@
});
socket.on('chatMessage', function(data) {
-
require(['chat'], function(chat) {
var modal = null;
if (chat.modalExists(data.fromuid)) {
@@ -220,10 +219,12 @@
chat.load(modal.attr('UUID'));
} else {
chat.toggleNew(modal.attr('UUID'), true);
+ app.alternatingTitle(data.username + ' has messaged you');
}
} else {
modal = chat.createModal(data.username, data.fromuid);
chat.toggleNew(modal.attr('UUID'), true);
+ app.alternatingTitle(data.username + ' has messaged you');
}
});
});
diff --git a/public/src/modules/taskbar.js b/public/src/modules/taskbar.js
index df7e8c460d..96ba98ac38 100644
--- a/public/src/modules/taskbar.js
+++ b/public/src/modules/taskbar.js
@@ -26,6 +26,7 @@ define(function() {
taskbar.minimizeAll();
module.load(uuid);
taskbar.toggleNew(uuid, false);
+ app.alternatingTitle('');
// Highlight the button
$(taskbar.tasklist).removeClass('active');
diff --git a/public/src/translator.js b/public/src/translator.js
index 43dc448b37..22de13a045 100644
--- a/public/src/translator.js
+++ b/public/src/translator.js
@@ -82,7 +82,7 @@
var parsedKey = keys[key].replace('[[', '').replace(']]', '').split(':');
if (!(parsedKey[0] && parsedKey[1])) continue;
-
+
var languageFile = parsedKey[0];
parsedKey = parsedKey[1].split(',')[0];
diff --git a/public/src/utils.js b/public/src/utils.js
index a7afef8ef7..926c05a0c5 100644
--- a/public/src/utils.js
+++ b/public/src/utils.js
@@ -169,23 +169,6 @@
return tags;
},
- refreshTitle: function(url) {
- if (!url) {
- var a = document.createElement('a');
- a.href = document.location;
- url = a.pathname.slice(1);
- }
- var notificationIcon;
-
- socket.emit('api:meta.buildTitle', url, function(title, numNotifications) {
- document.title = (numNotifications > 0 ? '(' + numNotifications + ') ' : '') + title;
- notificationIcon = notificationIcon || document.querySelector('.notifications a i');
- if (numNotifications > 0 && notificationIcon) {
- notificationIcon.className = 'fa fa-circle active';
- }
- });
- },
-
isRelativeUrl: function(url) {
var firstChar = url.slice(0, 1);
return (firstChar === '.' || firstChar === '/');
diff --git a/public/templates/account.tpl b/public/templates/account.tpl
index eb14891b85..da0014b0fe 100644
--- a/public/templates/account.tpl
+++ b/public/templates/account.tpl
@@ -13,71 +13,68 @@