diff --git a/install/package.json b/install/package.json
index af744e25b6..c51992816c 100644
--- a/install/package.json
+++ b/install/package.json
@@ -2,7 +2,7 @@
     "name": "nodebb",
     "license": "GPL-3.0",
     "description": "NodeBB Forum",
-    "version": "1.7.2",
+    "version": "1.7.3",
     "homepage": "http://www.nodebb.org",
     "repository": {
       "type": "git",
@@ -17,89 +17,89 @@
       "coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage"
     },
     "dependencies": {
-      "ace-builds": "^1.2.9",
-      "async": "2.6.0",
-      "autoprefixer": "7.1.6",
-      "bcryptjs": "2.4.3",
-      "benchpressjs": "^1.2.0",
-      "body-parser": "^1.18.2",
-      "bootstrap": "^3.3.7",
-      "chart.js": "^2.7.0",
-      "colors": "^1.1.2",
-      "compression": "^1.7.1",
-      "commander": "^2.11.0",
-      "connect-ensure-login": "^0.1.1",
-      "connect-flash": "^0.1.1",
-      "connect-mongo": "2.0.0",
-      "connect-multiparty": "^2.1.0",
-      "connect-redis": "3.3.2",
-      "cookie-parser": "^1.4.3",
-      "cron": "^1.3.0",
-      "cropperjs": "^1.1.3",
-      "csurf": "^1.9.0",
-      "daemon": "^1.1.0",
-      "express": "^4.16.2",
-      "express-session": "^1.15.6",
-      "express-useragent": "1.0.8",
-      "graceful-fs": "^4.1.11",
-      "html-to-text": "3.3.0",
-      "ipaddr.js": "^1.5.4",
-      "jimp": "0.2.28",
-      "jquery": "^3.2.1",
-      "jsesc": "2.5.1",
-      "json-2-csv": "^2.1.2",
-      "less": "^2.7.2",
-      "lodash": "^4.17.4",
-      "logrotate-stream": "^0.2.5",
-      "lru-cache": "4.1.1",
-      "material-design-lite": "^1.3.0",
-      "mime": "^2.0.3",
-      "mkdirp": "^0.5.1",
-      "mongodb": "2.2.33",
-      "morgan": "^1.9.0",
-      "mousetrap": "^1.6.1",
-      "nconf": "^0.9.1",
-      "nodebb-plugin-composer-default": "6.0.7",
-      "nodebb-plugin-dbsearch": "2.0.9",
-      "nodebb-plugin-emoji": "2.0.7",
-      "nodebb-plugin-emoji-android": "2.0.0",
-      "nodebb-plugin-markdown": "8.2.2",
-      "nodebb-plugin-mentions": "2.2.2",
-      "nodebb-plugin-soundpack-default": "1.0.0",
-      "nodebb-plugin-spam-be-gone": "0.5.1",
-      "nodebb-rewards-essentials": "0.0.9",
-      "nodebb-theme-lavender": "5.0.0",
-      "nodebb-theme-persona": "7.2.7",
-      "nodebb-theme-slick": "1.1.2",
-      "nodebb-theme-vanilla": "8.1.4",
-      "nodebb-widget-essentials": "4.0.1",
-      "nodemailer": "4.4.0",
-      "passport": "^0.4.0",
-      "passport-local": "1.0.0",
-      "postcss": "6.0.14",
-      "postcss-clean": "1.1.0",
-      "promise-polyfill": "^6.0.2",
-      "prompt": "^1.0.0",
-      "redis": "2.8.0",
-      "request": "2.83.0",
-      "rimraf": "2.6.2",
-      "rss": "^1.2.2",
-      "sanitize-html": "^1.14.1",
-      "semver": "^5.4.1",
-      "serve-favicon": "^2.4.5",
-      "sitemap": "^1.13.0",
-      "socket.io": "2.0.4",
-      "socket.io-client": "2.0.4",
-      "socket.io-redis": "5.2.0",
-      "socketio-wildcard": "2.0.0",
-      "spdx-license-list": "^3.0.1",
-      "toobusy-js": "^0.5.1",
-      "uglify-js": "^3.1.5",
-      "validator": "9.1.2",
-      "winston": "^2.4.0",
-      "xml": "^1.0.1",
-      "xregexp": "3.2.0",
-      "zxcvbn": "^4.4.2"
+        "ace-builds": "^1.2.9",
+        "async": "2.6.0",
+        "autoprefixer": "7.1.6",
+        "bcryptjs": "2.4.3",
+        "benchpressjs": "^1.2.0",
+        "body-parser": "^1.18.2",
+        "bootstrap": "^3.3.7",
+        "chart.js": "^2.7.0",
+        "colors": "^1.1.2",
+        "compression": "^1.7.1",
+        "commander": "^2.11.0",
+        "connect-ensure-login": "^0.1.1",
+        "connect-flash": "^0.1.1",
+        "connect-mongo": "2.0.0",
+        "connect-multiparty": "^2.1.0",
+        "connect-redis": "3.3.2",
+        "cookie-parser": "^1.4.3",
+        "cron": "^1.3.0",
+        "cropperjs": "^1.1.3",
+        "csurf": "^1.9.0",
+        "daemon": "^1.1.0",
+        "express": "^4.16.2",
+        "express-session": "^1.15.6",
+        "express-useragent": "1.0.8",
+        "graceful-fs": "^4.1.11",
+        "html-to-text": "3.3.0",
+        "ipaddr.js": "^1.5.4",
+        "jimp": "0.2.28",
+        "jquery": "^3.2.1",
+        "jsesc": "2.5.1",
+        "json-2-csv": "^2.1.2",
+        "less": "^2.7.2",
+        "lodash": "^4.17.4",
+        "logrotate-stream": "^0.2.5",
+        "lru-cache": "4.1.1",
+        "material-design-lite": "^1.3.0",
+        "mime": "^2.0.3",
+        "mkdirp": "^0.5.1",
+        "mongodb": "2.2.33",
+        "morgan": "^1.9.0",
+        "mousetrap": "^1.6.1",
+        "nconf": "^0.9.1",
+        "nodebb-plugin-composer-default": "6.0.7",
+        "nodebb-plugin-dbsearch": "2.0.9",
+        "nodebb-plugin-emoji": "2.0.9",
+        "nodebb-plugin-emoji-android": "2.0.0",
+        "nodebb-plugin-markdown": "8.2.2",
+        "nodebb-plugin-mentions": "2.2.2",
+        "nodebb-plugin-soundpack-default": "1.0.0",
+        "nodebb-plugin-spam-be-gone": "0.5.1",
+        "nodebb-rewards-essentials": "0.0.9",
+        "nodebb-theme-lavender": "5.0.0",
+        "nodebb-theme-persona": "7.2.8",
+        "nodebb-theme-slick": "1.1.2",
+        "nodebb-theme-vanilla": "8.1.4",
+        "nodebb-widget-essentials": "4.0.1",
+        "nodemailer": "4.4.0",
+        "passport": "^0.4.0",
+        "passport-local": "1.0.0",
+        "postcss": "6.0.14",
+        "postcss-clean": "1.1.0",
+        "promise-polyfill": "^6.0.2",
+        "prompt": "^1.0.0",
+        "redis": "2.8.0",
+        "request": "2.83.0",
+        "rimraf": "2.6.2",
+        "rss": "^1.2.2",
+        "sanitize-html": "^1.14.1",
+        "semver": "^5.4.1",
+        "serve-favicon": "^2.4.5",
+        "sitemap": "^1.13.0",
+        "socket.io": "2.0.4",
+        "socket.io-client": "2.0.4",
+        "socket.io-redis": "5.2.0",
+        "socketio-wildcard": "2.0.0",
+        "spdx-license-list": "^3.0.1",
+        "toobusy-js": "^0.5.1",
+        "uglify-js": "^3.1.5",
+        "validator": "9.1.2",
+        "winston": "^2.4.0",
+        "xml": "^1.0.1",
+        "xregexp": "3.2.0",
+        "zxcvbn": "^4.4.2"
     },
     "devDependencies": {
       "coveralls": "^3.0.0",
diff --git a/public/language/vi/admin/admin.json b/public/language/vi/admin/admin.json
index 726cef0e8b..8fdf8c210a 100644
--- a/public/language/vi/admin/admin.json
+++ b/public/language/vi/admin/admin.json
@@ -1,5 +1,5 @@
 {
-	"alert.confirm-reload": "Bạn có thật sự muốn tải lại NodeBB",
+	"alert.confirm-reload": "Bạn có thật sự muốn xác lập lại NodeBB",
 	"alert.confirm-restart": "Bạn có thật sự muốn khởi động lại NodeBB",
 
 	"acp-title": "%1 | Bảng điểu khiển",
diff --git a/public/language/vi/admin/advanced/cache.json b/public/language/vi/admin/advanced/cache.json
index 505b1a4510..d8b94de7a9 100644
--- a/public/language/vi/admin/advanced/cache.json
+++ b/public/language/vi/admin/advanced/cache.json
@@ -1,5 +1,5 @@
 {
-	"post-cache": "Cache bài viết",
+	"post-cache": "Bộ nhớ đệm bài viết",
 	"posts-in-cache": "Cache cho bài viết",
 	"average-post-size": "Kích thước bài viết",
 	"length-to-max": "Độ dài / Tối Đa",
diff --git a/public/language/vi/admin/settings/email.json b/public/language/vi/admin/settings/email.json
index 50ad2e06ea..96fb624791 100644
--- a/public/language/vi/admin/settings/email.json
+++ b/public/language/vi/admin/settings/email.json
@@ -1,5 +1,5 @@
 {
-	"email-settings": "Email Settings",
+	"email-settings": "Thiết lập Email",
 	"address": "Email Address",
 	"address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.",
 	"from": "From Name",
diff --git a/public/language/vi/category.json b/public/language/vi/category.json
index 494fa8b153..f9cf6a500a 100644
--- a/public/language/vi/category.json
+++ b/public/language/vi/category.json
@@ -8,13 +8,13 @@
     "no_replies": "Chưa có bình luận nào",
     "no_new_posts": "Không có bài mới.",
     "share_this_category": "Chia sẻ chuyên mục này",
-    "watch": "Theo dõi",
+    "watch": "Quan tâm",
     "ignore": "Bỏ qua",
-    "watching": "Đang theo dõi",
+    "watching": "Đang quan tâm",
     "ignoring": "Bỏ qua",
     "watching.description": "Hiện các chủ đề chưa đọc",
     "ignoring.description": "Không hiện những chủ đề chưa đọc",
     "watch.message": "Bạn đang theo dõi các cập nhật ở chuyên mục này và các chuyên mục con",
     "ignore.message": "Bạn đang bỏ qua các cập nhật ở chuyên mục này và các chuyên mục con",
-    "watched-categories": "Các chuyên mục đã xem"
+    "watched-categories": "Các chuyên mục đã quan tâm"
 }
\ No newline at end of file
diff --git a/public/language/vi/email.json b/public/language/vi/email.json
index 5199f136a5..0dc0cc8be6 100644
--- a/public/language/vi/email.json
+++ b/public/language/vi/email.json
@@ -30,12 +30,12 @@
     "notif.chat.unsub.info": "Thông báo tin nhắn này được gửi tới dựa theo cài đặt theo dõi của bạn.",
     "notif.post.cta": "Nhấn vào đây để đọc toàn bộ chủ đề",
     "notif.post.unsub.info": "Thông báo bài viết này được gửi cho bạn dựa tên thiết lập nhận thông báo của bạn",
-    "notif.cta": "Click here to go to forum",
+    "notif.cta": "Click vào đây để đi đến diễn đàn",
     "test.text1": "Đây là email kiểm tra xem chức năng gửi mail trên hệ thống NodeBB của bạn có hoạt động tốt hay không.",
     "unsub.cta": "Nhấn vào đây để thay đổi cài đặt.",
-    "banned.subject": "You have been banned from %1",
-    "banned.text1": "The user %1 has been banned from %2.",
-    "banned.text2": "This ban will last until %1.",
-    "banned.text3": "This is the reason why you have been banned:",
+    "banned.subject": "Bạn đã bị cấm khỏi %1",
+    "banned.text1": "Người dùng %1 đã bị cấm khỏi %2",
+    "banned.text2": "Lệnh cấm sẽ kéo dài đến %1.",
+    "banned.text3": "Đây là lý do tại sao bạn bị cấm:",
     "closing": "Xin cảm ơn!"
 }
\ No newline at end of file
diff --git a/public/language/vi/error.json b/public/language/vi/error.json
index 894ab8a3c6..490b661dd3 100644
--- a/public/language/vi/error.json
+++ b/public/language/vi/error.json
@@ -1,20 +1,20 @@
 {
     "invalid-data": "Dữ liệu không hợp lệ",
-    "invalid-json": "Invalid JSON",
+    "invalid-json": "JSON không hợp lệ",
     "not-logged-in": "Có vẻ bạn chưa đăng nhập.",
     "account-locked": "Tài khoản của bạn đang tạm thời bị khóa",
     "search-requires-login": "Bạn cần phải có tài khoản để tìm kiếm - vui lòng đăng nhập hoặc đăng ký.",
-    "goback": "Press back to return to the previous page",
+    "goback": "Nhấn back để quay về trang trước",
     "invalid-cid": "ID chuyên mục không hợp lệ",
     "invalid-tid": "ID chủ đề không hợp lệ",
     "invalid-pid": "ID bài viết không hợp lệ",
     "invalid-uid": "ID tài khoản không hợp lệ",
     "invalid-username": "Tên đăng nhập không hợp lệ",
     "invalid-email": "Email không hợp lệ",
-    "invalid-title": "Invalid title",
+    "invalid-title": "Tiêu đề không hợp lệ",
     "invalid-user-data": "Dữ liệu tài khoản không hợp lệ",
     "invalid-password": "Mật khẩu không hợp lệ",
-    "invalid-login-credentials": "Invalid login credentials",
+    "invalid-login-credentials": "Thông tin đăng nhập không hợp lệ",
     "invalid-username-or-password": "Xin hãy nhập cả tên đăng nhập và mật khẩu",
     "invalid-search-term": "Từ khóa không hợp lệ",
     "csrf-invalid": "Hệ thống không cho phép bạn đăng nhập, có vẻ như phiên đăng nhập cũ đã hết hạn. Hãy thử đăng nhập lại",
@@ -33,7 +33,7 @@
     "password-too-long": "Mật khẩu quá dài",
     "user-banned": "Tài khoản bị ban",
     "user-banned-reason": "Xin lỗi, tài khoản này đã bị khóa (Lí do: %1)",
-    "user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
+    "user-banned-reason-until": "Rất tiếc, tài khoản này đã bị cấm cho đến %1 (Lý do: %2)",
     "user-too-new": "Rất tiếc, bạn phải chờ %1 giây để đăng bài viết đầu tiên.",
     "blacklisted-ip": "Rất tiếc, địa chỉ IP của bạn đã bị cấm khỏi cộng đồng. Nếu bạn cảm thấy có gì không đúng, hãy liên lạc với người quản trị.",
     "ban-expiry-missing": "Vui lòng cung cấp ngày hết hạn của lệnh cấm",
@@ -81,7 +81,7 @@
     "cant-ban-other-admins": "Bạn không thể cấm được các quản trị viên khác",
     "cant-remove-last-admin": "Bạn là quản trị viên duy nhất. Hãy cho thành viên khác làm quản trị viên trước khi huỷ bỏ quyền quản trị của bạn.",
     "cant-delete-admin": "Hủy quyền quản trị của tài khoản này trước khi xóa",
-    "invalid-image": "Invalid image",
+    "invalid-image": "Hình ảnh không hợp lệ",
     "invalid-image-type": "Định dạng ảnh không hợp lệ. Những định dạng được cho phép là: %1",
     "invalid-image-extension": "Định dạng ảnh không hợp lệ",
     "invalid-file-type": "Định dạng file không hợp lệ. Những định dạng được cho phép là: %1",
@@ -109,7 +109,7 @@
     "chat-disabled": "Hệ thống chat đã bị vô hiệu hoá",
     "too-many-messages": "Bạn đã gửi quá nhiều tin nhắn, vui lòng đợi trong giây lát.",
     "invalid-chat-message": "Tin nhắn không hợp lệ",
-    "chat-message-too-long": "Chat messages can not be longer than %1 characters.",
+    "chat-message-too-long": "Thông điệp không thể dài hơn %1 chữ.",
     "cant-edit-chat-message": "Bạn không được phép chỉnh sửa tin nhắn này",
     "cant-remove-last-user": "Bạn không thể xoá thành viên cuối cùng",
     "cant-delete-chat-message": "Bạn không được phép xoá tin nhắn này",
@@ -119,13 +119,13 @@
     "not-enough-reputation-to-downvote": "Bạn không có đủ phiếu tín nhiệm để downvote bài này",
     "not-enough-reputation-to-flag": "Bạn không đủ tín nhiệm để đánh dấu bài viết này",
     "already-flagged": "Bạn đã gắn cờ cho bài viết này",
-    "self-vote": "You cannot vote on your own post",
+    "self-vote": "Bạn không thể tự bầu cho bài đăng của mình",
     "reload-failed": "NodeBB gặp lỗi trong khi tải lại: \"%1\". NodeBB sẽ tiếp tục hoạt động với dữ liệu trước đó, tuy nhiên bạn nên tháo gỡ những gì bạn vừa thực hiện trước khi tải lại.",
     "registration-error": "Lỗi đăng kí",
     "parse-error": "Có gì không ổn khi nhận kết quả từ máy chủ",
     "wrong-login-type-email": "Xin vui lòng sửa dụng email của bạn để đăng nhập",
     "wrong-login-type-username": "Vui lòng sử dụng tên đăng nhập của bạn để đăng nhập",
-    "sso-registration-disabled": "Registration has been disabled for %1 accounts, please register with an email address first",
+    "sso-registration-disabled": "Không thể đăng ký với tài khoản %1, vui lòng đăng ký với địa chỉ email của bạn",
     "invite-maximum-met": "Bạn đã sử dụng hết số lượng lời mời bạn có thể gửi (%1 đã gửi trên tổng số %2 được cho phép)",
     "no-session-found": "Không tìm thấy phiên đăng nhập!",
     "not-in-room": "Thành viên không có trong phòng",
@@ -135,5 +135,5 @@
     "invalid-home-page-route": "Đường dẫn trang chủ không hợp lệ",
     "invalid-session": "Không đúng session",
     "invalid-session-text": "Có vẻ như phiên đăng nhập của bạn đã không còn hoạt động nữa, hoặc không còn đúng với thông tin trên máy chủ. Vui lòng tải lại trang này",
-    "no-topics-selected": "No topics selected!"
+    "no-topics-selected": "Không có chủ đề nào đang được chọn!"
 }
\ No newline at end of file
diff --git a/public/language/vi/global.json b/public/language/vi/global.json
index bca009cd8c..5049b7bed2 100644
--- a/public/language/vi/global.json
+++ b/public/language/vi/global.json
@@ -104,6 +104,6 @@
     "cookies.accept": "Đã rõ!",
     "cookies.learn_more": "Xem thêm",
     "edited": "Đã cập nhật",
-    "disabled": "Disabled",
-    "select": "Select"
+    "disabled": "Bị khóa",
+    "select": "Chọn"
 }
\ No newline at end of file
diff --git a/public/language/vi/language.json b/public/language/vi/language.json
index f0787f748a..e6b933b8af 100644
--- a/public/language/vi/language.json
+++ b/public/language/vi/language.json
@@ -1,5 +1,5 @@
 {
-    "name": "Tiếng Việt",
+    "name": "Tiếng Anh (Anh Quốc/Ca-na-da)",
     "code": "vi",
-    "dir": "ltr"
+    "dir": "Trái qua phải"
 }
\ No newline at end of file
diff --git a/public/language/vi/notifications.json b/public/language/vi/notifications.json
index 1f3e674954..3605d52d4a 100644
--- a/public/language/vi/notifications.json
+++ b/public/language/vi/notifications.json
@@ -9,17 +9,17 @@
     "continue_to": "Tiếp tục tới %1",
     "return_to": "Quay lại %1",
     "new_notification": "Thông báo mới",
-    "new_notification_from": "You have a new Notification from %1",
+    "new_notification_from": "Bạn nhận được 1 thông báo từ %1",
     "you_have_unread_notifications": "Bạn có thông báo chưa đọc",
-    "all": "All",
-    "topics": "Topics",
-    "replies": "Replies",
-    "chat": "Chats",
-    "follows": "Follows",
-    "upvote": "Upvotes",
-    "new-flags": "New Flags",
-    "my-flags": "Flags assigned to me",
-    "bans": "Bans",
+    "all": "Toàn bộ",
+    "topics": "Chủ đề",
+    "replies": "Phản hồi",
+    "chat": "Thông điệp",
+    "follows": "Lượt theo dõi",
+    "upvote": "Lượt thích",
+    "new-flags": "Cảnh báo mới",
+    "my-flags": "Cảnh báo dành cho tôi",
+    "bans": "Cấm",
     "new_message_from": "Tin nhắn mới từ <strong>%1</strong>",
     "upvoted_your_post_in": "<strong>%1</strong> đã bình chọn bài của bạn trong <strong>%2</strong>.",
     "upvoted_your_post_in_dual": "<strong>%1</strong> và <strong>%2</strong> đã tán thành với bài viết của bạn trong <strong>%3</strong>.",
@@ -29,9 +29,9 @@
     "user_flagged_post_in": "<strong>%1</strong> gắn cờ 1 bài trong <strong>%2</strong>",
     "user_flagged_post_in_dual": "<strong>%1</strong> và <strong>%2</strong> đã gắn cờ một bài viết trong <strong>%3</strong>",
     "user_flagged_post_in_multiple": "<strong>%1</strong> và %2 người khác đã gắn cờ bài viết của bạn trong <strong>%3</strong>",
-    "user_flagged_user": "<strong>%1</strong> flagged a user profile (%2)",
-    "user_flagged_user_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a user profile (%3)",
-    "user_flagged_user_multiple": "<strong>%1</strong> and %2 others flagged a user profile (%3)",
+    "user_flagged_user": "<strong>%1</strong> đã cảnh báo một người dùng (%2)",
+    "user_flagged_user_dual": "<strong>%1</strong> và <strong>%2</strong> đã cảnh báo một người dùng (%3)",
+    "user_flagged_user_multiple": "<strong>%1</strong> và %2 người khác đã cảnh báo người dùng (%3)",
     "user_posted_to": "<strong>%1</strong> đã trả lời <strong>%2</strong>",
     "user_posted_to_dual": "<strong>%1</strong> và <strong>%2</strong> đã trả lời: <strong>%3</strong>",
     "user_posted_to_multiple": "<strong>%1</strong> và %2 người khác đã trả lời: <strong>%3</strong>",
@@ -41,24 +41,24 @@
     "user_started_following_you_multiple": "<strong>%1</strong> và %2 người khác đã bắt đầu theo dõi bạn.",
     "new_register": "<strong>%1</strong> đã gửi một yêu cầu tham gia.",
     "new_register_multiple": "Có <strong>%1</strong> đơn đăng ký đang chờ xem xét.",
-    "flag_assigned_to_you": "<strong>Flag %1</strong> has been assigned to you",
-    "post_awaiting_review": "Post awaiting review",
+    "flag_assigned_to_you": "<strong>Cảnh báo %1</strong> đã được ghi nhận đối với bạn",
+    "post_awaiting_review": "Bài đăng đang chờ xét duyệt",
     "email-confirmed": "Đã xác nhận email",
     "email-confirmed-message": "Cảm ơn bạn đã xác nhận địa chỉ email của bạn. Tài khoản của bạn đã được kích hoạt đầy đủ.",
     "email-confirm-error-message": "Đã có lỗi khi xác nhận địa chỉ email. Có thể đoạn mã không đúng hoặc đã hết hạn.",
     "email-confirm-sent": "Email xác nhận đã gửi.",
-    "none": "None",
-    "notification_only": "Notification Only",
-    "email_only": "Email Only",
-    "notification_and_email": "Notification & Email",
-    "notificationType_upvote": "When someone upvotes your post",
-    "notificationType_new-topic": "When someone you follow posts a topic",
-    "notificationType_new-reply": "When a new reply is posted in a topic you are watching",
-    "notificationType_follow": "When someone starts following you",
-    "notificationType_new-chat": "When you receive a chat message",
-    "notificationType_group-invite": "When you receive a group invite",
-    "notificationType_new-register": "When someone gets added to registration queue",
-    "notificationType_post-queue": "When a new post is queued",
-    "notificationType_new-post-flag": "When a post is flagged",
-    "notificationType_new-user-flag": "When a user is flagged"
+    "none": "Hoàn toàn không",
+    "notification_only": "Chỉ thông báo",
+    "email_only": "Chỉ email",
+    "notification_and_email": "Cả thông báo & email",
+    "notificationType_upvote": "Khi ai đó thích bài đăng của bạn",
+    "notificationType_new-topic": "Khi người bạn theo dõi đăng một chủ đề",
+    "notificationType_new-reply": "Khi phản hồi được đăng trong chủ đề bạn đang quan tâm",
+    "notificationType_follow": "Khi ai đó theo dõi bạn",
+    "notificationType_new-chat": "Khi bạn nhận được thông điệp chat",
+    "notificationType_group-invite": "Khi bạn nhận được lời mời gia nhập nhóm",
+    "notificationType_new-register": "Khi ai đó được thêm vào lượt chờ đăng ký",
+    "notificationType_post-queue": "Khi bài đăng được thêm vào lượt chờ",
+    "notificationType_new-post-flag": "Khi bài đăng được cảnh báo",
+    "notificationType_new-user-flag": "Khi người dùng bị cảnh báo"
 }
\ No newline at end of file
diff --git a/public/language/vi/pages.json b/public/language/vi/pages.json
index febfef2060..c70ca5e399 100644
--- a/public/language/vi/pages.json
+++ b/public/language/vi/pages.json
@@ -43,8 +43,8 @@
     "account/groups": "Nhóm của %1",
     "account/bookmarks": "Đã bookmark %1's chủ đề",
     "account/settings": "Thiết lập",
-    "account/watched": "Chủ đề %1 đang theo dõi",
-    "account/ignored": "Topics ignored by %1",
+    "account/watched": "Chủ đề được quan tâm bởi %1",
+    "account/ignored": "Các chủ đề đã bị phớt lờ bởi %1",
     "account/upvoted": "Bài viết %1 tán thành",
     "account/downvoted": "Bài viết %1 phản đối",
     "account/best": "Bài viết hay nhất của %1",
diff --git a/public/language/vi/search.json b/public/language/vi/search.json
index 7e4211c2c8..fc4e78954b 100644
--- a/public/language/vi/search.json
+++ b/public/language/vi/search.json
@@ -8,11 +8,11 @@
     "posted-by": "Đăng bởi",
     "in-categories": "Nằm trong chuyên mục",
     "search-child-categories": "Tìm kiếm chuyên mục con",
-    "has-tags": "Has tags",
+    "has-tags": "Có thẻ bên trong",
     "reply-count": "Số lượt trả lời",
     "at-least": "Tối thiểu",
     "at-most": "Tối đa",
-    "relevance": "Relevance",
+    "relevance": "Mức độ liên quan",
     "post-time": "Thời điểm đăng bài",
     "newer-than": "Mới hơn",
     "older-than": "Cũ hơn",
diff --git a/public/language/vi/success.json b/public/language/vi/success.json
index aff07d84ad..5b5e438697 100644
--- a/public/language/vi/success.json
+++ b/public/language/vi/success.json
@@ -1,7 +1,7 @@
 {
     "success": "Thành công",
     "topic-post": "Bạn đã gửi bài thành công",
-    "post-queued": "Your post is queued for approval.",
+    "post-queued": "Bài đăng của bạn đang được chờ xét duyệt.",
     "authentication-successful": "Xác thực thành công",
     "settings-saved": "Đã lưu thiết lập"
 }
\ No newline at end of file
diff --git a/public/language/vi/topic.json b/public/language/vi/topic.json
index 6f8290fa75..c59553269d 100644
--- a/public/language/vi/topic.json
+++ b/public/language/vi/topic.json
@@ -14,7 +14,7 @@
     "quote": "Trích dẫn",
     "reply": "Trả lời",
     "replies_to_this_post": "%1 trả lời",
-    "one_reply_to_this_post": "1 Reply",
+    "one_reply_to_this_post": "1 Phản hồi",
     "last_reply_time": "Trả lời cuối cùng",
     "reply-as-topic": "Trả lời dưới dạng chủ đề",
     "guest-login-reply": "Hãy đăng nhập để trả lời",
@@ -40,13 +40,13 @@
     "markAsUnreadForAll.success": "Chủ đề đã được đánh dấu là chưa đọc toàn bộ",
     "mark_unread": "Đánh dấu chưa đọc",
     "mark_unread.success": "Chủ đề đã được đánh dấu chưa đọc.",
-    "watch": "Theo dõi",
-    "unwatch": "Ngừng theo dõi",
+    "watch": "Quan tâm",
+    "unwatch": "Ngừng quan tâm",
     "watch.title": "Được thông báo khi có trả lời mới trong chủ đề này",
-    "unwatch.title": "Ngừng theo dõi chủ đề này",
+    "unwatch.title": "Ngừng quan tâm chủ đề này",
     "share_this_post": "Chia sẻ bài viết này",
-    "watching": "Đang xem",
-    "not-watching": "Không xem",
+    "watching": "Đang quan tâm",
+    "not-watching": "Không để ý",
     "ignoring": "Bỏ qua",
     "watching.description": "Thông báo cho tôi các trả lời mới. <br/>Hiển thị các mục chưa đọc",
     "not-watching.description": "Không thông báo tôi các trả lời mới. <br/>Hiển thị mục chưa đọc nếu danh mục bị bỏ qua.",
@@ -59,7 +59,7 @@
     "thread_tools.unlock": "Mở khóa chủ đề",
     "thread_tools.move": "Chuyển chủ đề",
     "thread_tools.move_all": "Chuyển tất cả",
-    "thread_tools.select_category": "Select Category",
+    "thread_tools.select_category": "Chọn chuyện mục",
     "thread_tools.fork": "Tạo bản sao chủ đề",
     "thread_tools.delete": "Xóa chủ đề",
     "thread_tools.delete-posts": "Xoá bài viết",
@@ -68,8 +68,8 @@
     "thread_tools.restore_confirm": "Bạn có muốn phục hồi chủ đề này?",
     "thread_tools.purge": "Xóa hẳn chủ đề",
     "thread_tools.purge_confirm": "Bạn có muốn xóa hẳn chủ đề này?",
-    "thread_tools.merge_topics": "Merge Topics",
-    "thread_tools.merge": "Merge",
+    "thread_tools.merge_topics": "Xác nhập chủ đề",
+    "thread_tools.merge": "Xác nhập",
     "topic_move_success": "Đã chuyển thành công chủ đề này sang %1",
     "post_delete_confirm": "Bạn có chắc là muốn xóa bài gửi này không?",
     "post_restore_confirm": "Bạn có chắc là muốn phục hồi bài gửi này không?",
@@ -91,7 +91,7 @@
     "fork_pid_count": "%1 bài viết(s) đã được gửi",
     "fork_success": "Tạo bản sao thành công! Nhấn vào đây để chuyển tới chủ đề vừa tạo.",
     "delete_posts_instruction": "Chọn những bài viết bạn muốn xoá",
-    "merge_topics_instruction": "Click the topics you want to merge",
+    "merge_topics_instruction": "Click vào các chủ đề bạn muốn xác nhập",
     "composer.title_placeholder": "Nhập tiêu đề cho chủ đề của bạn tại đây...",
     "composer.handle_placeholder": "Tên",
     "composer.discard": "Huỷ bỏ",
diff --git a/public/language/vi/unread.json b/public/language/vi/unread.json
index e0609d5e04..3c9d149bac 100644
--- a/public/language/vi/unread.json
+++ b/public/language/vi/unread.json
@@ -9,7 +9,7 @@
     "topics_marked_as_read.success": "Chủ đề được đánh dấu đã đọc",
     "all-topics": "Toàn bộ chủ đề",
     "new-topics": "Các chủ đề mới",
-    "watched-topics": "Các chủ đề đã xem",
-    "unreplied-topics": "Unreplied Topics",
-    "multiple-categories-selected": "Multiple Selected"
+    "watched-topics": "Các chủ đề đuợc quan tâm",
+    "unreplied-topics": "Chủ đề chưa có phản hồi nào",
+    "multiple-categories-selected": "Chọn nhiều cùng lúc"
 }
\ No newline at end of file
diff --git a/public/language/vi/user.json b/public/language/vi/user.json
index fb7413330f..03fb99398e 100644
--- a/public/language/vi/user.json
+++ b/public/language/vi/user.json
@@ -24,17 +24,17 @@
     "profile_views": "Số lượt người ghé thăm",
     "reputation": "Mức uy tín",
     "bookmarks": "Bookmarks",
-    "watched": "Đã theo dõi",
-    "ignored": "Ignored",
+    "watched": "Đã quan tâm",
+    "ignored": "Phớt lờ",
     "followers": "Số người theo dõi",
     "following": "Đang theo dõi",
     "aboutme": "Giới thiệu bản thân",
     "signature": "Chữ ký",
     "birthday": "Ngày sinh ",
     "chat": "Chat",
-    "chat_with": "Continue chat with %1",
-    "new_chat_with": "Start new chat with %1",
-    "flag-profile": "Flag Profile",
+    "chat_with": "Tiếp tục chat với %1",
+    "new_chat_with": "Bắt đầu chat với %1",
+    "flag-profile": "Cảnh báo người dùng",
     "follow": "Theo dõi",
     "unfollow": "Hủy theo dõi",
     "more": "Xem thêm",
@@ -61,14 +61,14 @@
     "username_taken_workaround": "Tên truy cập này đã tồn tại, vì vậy chúng tôi đã sửa đổi nó một chút. Tên truy cập của bạn giờ là <strong>%1</strong>",
     "password_same_as_username": "Mật khẩu của bạn trùng với tên đăng nhập, vui lòng chọn một mật khẩu khác.",
     "password_same_as_email": "Mật khẩu của bạn trùng với email của bạn, hãy chọn mật khẩu khác.",
-    "weak_password": "Weak password.",
+    "weak_password": "Mật khẩu yếu",
     "upload_picture": "Tải lên hình ảnh",
     "upload_a_picture": "Tải lên một hình ảnh",
     "remove_uploaded_picture": "Xoá ảnh đã tải lên",
     "upload_cover_picture": "Tải ảnh bìa lên",
-    "remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?",
-    "crop_picture": "Crop picture",
-    "upload_cropped_picture": "Crop and upload",
+    "remove_cover_picture_confirm": "Bạn có thật sự muốn xóa hình ảnh này?",
+    "crop_picture": "Cắt nhỏ hình ảnh",
+    "upload_cropped_picture": "Cắt nhỏ và đăng tải",
     "settings": "Thiết lập",
     "show_email": "Hiện Email của tôi",
     "show_fullname": "Hiện tên đầy đủ",
@@ -84,8 +84,8 @@
     "follows_no_one": "Người dùng này hiện chưa theo dõi ai :(",
     "has_no_posts": "Thành viên này chưa đăng bài viết nào cả.",
     "has_no_topics": "Thành viên này chưa đăng chủ đề nào cả.",
-    "has_no_watched_topics": "Thành viên này chưa theo dõi chủ đề nào cả.",
-    "has_no_ignored_topics": "This user hasn't ignored any topics yet.",
+    "has_no_watched_topics": "Thành viên này chưa quan tâm chủ đề nào cả.",
+    "has_no_ignored_topics": "Người dùng này chưa bỏ qua bất cứ chủ đề nào.",
     "has_no_upvoted_posts": "Thành viên này chưa tán thành bài viết nào cả.",
     "has_no_downvoted_posts": "Thành viên này chưa phản đối bài viết nào cả.",
     "has_no_voted_posts": "Thành viên này không có bài viết nào được tán thành.",
@@ -94,18 +94,18 @@
     "paginate_description": "Phân trang chủ đề và bài viết thay vì sử dụng cuộn vô hạn",
     "topics_per_page": "Số chủ đề trong một trang",
     "posts_per_page": "Số bài viết trong một trang",
-    "max_items_per_page": "Maximum %1",
+    "max_items_per_page": "Tối đa %1",
     "notification_sounds": "Phát âm thanh khi bạn nhận được thông báo mới",
     "notifications_and_sounds": "Thông báo & Âm thanh",
     "incoming-message-sound": "Âm báo tin nhắn tới",
     "outgoing-message-sound": "Âm báo tin nhắn đi",
     "notification-sound": "Âm thanh thông báo",
     "no-sound": "Không có âm thanh",
-    "upvote-notif-freq": "Upvote Notification Frequency",
-    "upvote-notif-freq.all": "All Upvotes",
-    "upvote-notif-freq.everyTen": "Every Ten Upvotes",
-    "upvote-notif-freq.logarithmic": "On 10, 100, 1000...",
-    "upvote-notif-freq.disabled": "Disabled",
+    "upvote-notif-freq": "Tần suất thông báo lượt thích",
+    "upvote-notif-freq.all": "Toàn bộ lượt thích",
+    "upvote-notif-freq.everyTen": "Mỗi 10 lượt thích",
+    "upvote-notif-freq.logarithmic": "Cứ mỗi 10, 100, 1000...",
+    "upvote-notif-freq.disabled": "Bị khóa",
     "browsing": "Đang xem cài đặt",
     "open_links_in_new_tab": "Mở link trong tab mới.",
     "enable_topic_searching": "Bật In-topic Searching",
@@ -113,8 +113,8 @@
     "delay_image_loading": "Việc tải ảnh đang bị chậm",
     "image_load_delay_help": "Nếu được bật, toàn bộ ảnh trong chủ đề sẽ chỉ được tải khi người dùng kéo chuột tới",
     "scroll_to_my_post": "Sau khi đăng một trả lời thì hiển thị bài viết mới",
-    "follow_topics_you_reply_to": "Theo dõi những chủ đề mà bạn đã bình luận",
-    "follow_topics_you_create": "Theo dõi những chủ đề do bạn t",
+    "follow_topics_you_reply_to": "Những chủ đề bạn quan tâm và từng bình luận",
+    "follow_topics_you_create": "Theo dõi chủ đề bạn tạo",
     "grouptitle": "Tên nhóm",
     "no-group-title": "Không có tên nhóm",
     "select-skin": "Chọn một giao diện",
@@ -126,9 +126,9 @@
     "sso.title": "Đăng nhập một lần",
     "sso.associated": "Đã liên kết với",
     "sso.not-associated": "Nhấn vào đây để liên kết với",
-    "sso.dissociate": "Dissociate",
-    "sso.dissociate-confirm-title": "Confirm Dissociation",
-    "sso.dissociate-confirm": "Are you sure you wish to dissociate your account from %1?",
+    "sso.dissociate": "Tách khỏi",
+    "sso.dissociate-confirm-title": "Xác nhận việc tách khỏi",
+    "sso.dissociate-confirm": "Bạn có chắc chắn muốn tách tài khoản của mình khỏi %1?",
     "info.latest-flags": "Cờ mới nhất",
     "info.no-flags": "Không có bài viết nào bị gắn c",
     "info.ban-history": "Lịch sử khóa tài khoản gần đây",
@@ -141,5 +141,5 @@
     "info.email-history": "Lịch sử email",
     "info.moderation-note": "Ghi chú quản lí",
     "info.moderation-note.success": "Đã lưu ghi chú quản l",
-    "info.moderation-note.add": "Add note"
+    "info.moderation-note.add": "Thêm ghi chú"
 }
\ No newline at end of file
diff --git a/public/src/modules/alerts.js b/public/src/modules/alerts.js
index 62f6da940e..0094c88f96 100644
--- a/public/src/modules/alerts.js
+++ b/public/src/modules/alerts.js
@@ -117,7 +117,6 @@ define('alerts', ['translator', 'components', 'benchpress'], function (translato
 		alert
 			.on('mouseenter', function () {
 				$(this).css('transition-duration', 0);
-				console.log(this);
 			});
 	}
 
diff --git a/src/socket.io/user/ban.js b/src/socket.io/user/ban.js
index a61a9b83ee..66f98eb061 100644
--- a/src/socket.io/user/ban.js
+++ b/src/socket.io/user/ban.js
@@ -1,6 +1,7 @@
 'use strict';
 
 var async = require('async');
+var winston = require('winston');
 
 var user = require('../../user');
 var meta = require('../../meta');
@@ -112,7 +113,12 @@ module.exports = function (SocketUser) {
 					reason: reason,
 				};
 
-				emailer.send('banned', uid, data, next);
+				emailer.send('banned', uid, data, function (err) {
+					if (err) {
+						winston.error('[emailer.send] ' + err.message);
+					}
+					next();
+				});
 			},
 			function (next) {
 				user.ban(uid, until, reason, next);
diff --git a/src/upgrade.js b/src/upgrade.js
index ae0d70a4c0..f30a5f43d4 100644
--- a/src/upgrade.js
+++ b/src/upgrade.js
@@ -205,7 +205,7 @@ Upgrade.incrementProgress = function (value) {
 	if (this.total) {
 		percentage = Math.floor((this.current / this.total) * 100) + '%';
 		filled = Math.floor((this.current / this.total) * 15);
-		unfilled = Math.min(0, 15 - filled);
+		unfilled = Math.max(0, 15 - filled);
 	}
 
 	readline.cursorTo(process.stdout, 0);
diff --git a/src/widgets/index.js b/src/widgets/index.js
index 968a5e7a9e..1d60664247 100644
--- a/src/widgets/index.js
+++ b/src/widgets/index.js
@@ -31,7 +31,7 @@ widgets.render = function (uid, options, callback) {
 			var returnData = {};
 
 			async.each(locations, function (location, done) {
-				widgetsByLocation[location] = (data.global[location] || []).concat(data[options.template][location] || []);
+				widgetsByLocation[location] = (data[options.template][location] || []).concat(data.global[location] || []);
 
 				if (!widgetsByLocation[location].length) {
 					return done(null, { location: location, widgets: [] });