diff --git a/README.md b/README.md
index 5dce659..04bdb37 100644
--- a/README.md
+++ b/README.md
@@ -53,7 +53,7 @@ Feel free to contribute! Learn more: [Contributor's Guide: Adding Translations](
| Romanian, Romania | Română | ❌ | [ro.json](/discordgsm/translations/ro.json) | |
| Finnish | Suomi | ✔️ | [fi.json](/discordgsm/translations/fi.json) | [@sestain](https://github.com/sestain) |
| Swedish | Svenska | ❌ | [sv-SE.json](/discordgsm/translations/sv-SE.json) | |
-| Vietnamese | Tiếng Việt | ❌ | [vi.json](/discordgsm/translations/vi.json) | |
+| Vietnamese | Tiếng Việt | ✔️ | [vi.json](/discordgsm/translations/vi.json) | [@hoangvu12](https://github.com/hoangvu12) |
| Turkish | Türkçe | ✔️ | [tr.json](/discordgsm/translations/tr.json) | [@RedBuls81](https://github.com/RedBuls81) |
| Czech | Čeština | ❌ | [cs.json](/discordgsm/translations/cs.json) | |
| Greek | Ελληνικά | ❌ | [el.json](/discordgsm/translations/el.json) | |
diff --git a/discordgsm/translations/vi.json b/discordgsm/translations/vi.json
index 64ccabc..e13a46e 100644
--- a/discordgsm/translations/vi.json
+++ b/discordgsm/translations/vi.json
@@ -1,101 +1,101 @@
{
- "command.option.game_id": "Game ID. Learn more: https://discordgsm.com/guide/supported-games",
- "command.option.address": "IP address or domain name",
- "command.option.query_port": "Query port",
+ "command.option.game_id": "Game ID. Xem thêm: https://discordgsm.com/guide/supported-games",
+ "command.option.address": "Địa chỉ IP hoặc tên miền",
+ "command.option.query_port": "Cổng port truy vấn (Query)",
"command.option.channel": "Discord channel",
- "command.option.clock_format": "Clock format",
- "command.option.timezone": "TZ database name. Learn more: https://discordgsm.com/guide/timezones",
- "command.option.locale": "Locale. Learn more: https://discordgsm.com/guide/locales",
- "command.choice.12_hour_clock": "12-hour clock",
- "command.choice.24_hour_clock": "24-hour clock",
- "command.error.no_permission": "You don't have sufficient privileges to use this command.",
- "command.error.internal_error": "Internal Error. Please try again later.",
- "command.queryserver.description": "Query a game server (only once)",
- "command.addserver.description": "Add a server to the current channel",
- "command.addserver.text_channel_only": "This command is only supported in text channel.",
- "command.addserver.limit_exceeded": "The server quota has been exceeded. Limit: {limit}.",
- "command.delserver.description": "Delete the server in the current channel",
- "command.refresh.description": "Refresh servers' messages manually in the current channel",
- "command.factoryreset.description": "Delete all servers in current guild",
- "command.factoryreset.button.label": "Delete all servers",
- "command.factoryreset.content": "Are you sure you want to delete all servers in the current guild? This cannot be undone.",
- "command.factoryreset.success": "Factory reset successfully.",
- "command.moveup.description": "Move the server message upward",
- "command.movedown.description": "Move the server message downward",
- "command.changestyle.description": "Change server message style",
- "command.changestyle.content": "Select the message style for the server `{address}:{query_port}`",
- "command.editstyledata.description": "Edit server message style data",
- "command.editstyledata.modal.title": "Edit {address}:{query_port}",
- "command.switch.description": "Switch the server message(s) to another channel",
- "command.switch.same_channel": "You cannot switch servers to the same channel.",
- "command.switch.success": "Switched {count} servers from <#{channel_id1}> to <#{channel_id2}>",
- "command.settimezone.description": "Set server message time zone",
- "command.settimezone.invalid": "`{timezone}` is not a valid time zone. Learn more: https://discordgsm.com/guide/timezones",
- "command.setlocale.description": "Set server message locale",
- "command.setlocale.invalid": "`{locale}` is not a valid locale. Learn more: https://discordgsm.com/guide/locales",
- "command.setclock.description": "Set server message clock format",
- "command.setalert.description": "Set server status alert settings",
- "command.setalert.content": "Alert settings for the server `{address}:{query_port}`",
- "command.setalert.settings.button.label": "Alert Settings",
- "command.setalert.settings.modal.title": "Alert Settings",
- "command.setalert.test.button.label": "Send Test Alert",
- "command.setalert.test.success": "Test webhook sent.",
- "command.setalert.test.empty": "The Webhook URL cannot be empty.",
- "command.setalert.test.invalid": "The Webhook URL is invalid.",
- "command.setalert.test.not_found": "This webhook was not found.",
- "function.find_game.not_found": "`{game_id}` is not a valid game id. Learn more: https://discordgsm.com/guide/supported-games",
- "function.find_server.not_found": "The server `{address}:{query_port}` does not exist in the channel.",
- "function.find_servers.empty": "There are no servers in this channel.",
- "function.find_servers.parameter_error": "`address` and `query_port` must be given together.",
- "function.query_server_modal.invalid_port": "The port number must be between 0 and 65535.",
- "function.query_server_modal.already_exists": "This server already exists in the channel.",
- "function.query_server_modal.fail_to_query": "Fail to query `{game_id}` server `{address}:{query_port}`. Please try again.",
- "function.query_server_modal.success": "Query successfully!",
- "missing_permission.manage_messages": "Missing Permission: `Manage Messages`",
- "missing_permission.send_messages": "Missing Permission: `Send Messages`",
- "modal.text_input.address.label": "Address",
- "modal.text_input.query_port.label": "Query Port",
- "modal.text_input.guild_id.label": "Guild ID",
- "modal.text_input.webhook_url.label": "Webhook URL",
- "modal.text_input.webhook_content.label": "Webhook Content",
- "embed.alert.description.test": "🧪 This is a test alert!",
- "embed.alert.description.online": "✅ Your server is back online!",
- "embed.alert.description.offline": "🚨 Your server seems to be down!",
- "embed.alert.footer.query_time": "Query time: {query_time}",
- "embed.text_input.description.label": "Description",
- "embed.text_input.description.placeholder": "The description of the embed.",
- "embed.text_input.fullname.label": "Full Name",
- "embed.text_input.fullname.placeholder": "The display name of the game.",
- "embed.text_input.image_url.label": "Image URL",
- "embed.text_input.image_url.placeholder": "The source URL for the image. Only HTTP(S) is supported.",
- "embed.text_input.thumbnail_url.label": "Thumbnail URL",
- "embed.text_input.thumbnail_url.placeholder": "The source URL for the thumbnail. Only HTTP(S) is supported.",
- "embed.text_input.country.label": "Country",
- "embed.text_input.country.placeholder": "The country alpha-2 code.",
- "embed.description.instant_invite": "Instant Invite: {url}",
- "embed.description.connect": "Connect: {url}",
- "embed.field.status.name": "Status",
- "embed.field.status.value.online": ":green_circle: **Online**",
- "embed.field.status.value.offline": ":red_circle: **Offline**",
- "embed.field.address:port.name": "Address:Port",
- "embed.field.address:port:query.name": "Address:Port (Query)",
- "embed.field.country.name": "Country",
- "embed.field.game.name": "Game",
- "embed.field.current_map.name": "Current Map",
- "embed.field.players.name": "Players",
- "embed.field.presence.name": "Presence",
- "embed.field.members.name": "Members",
- "embed.field.player_list.name": "Player List",
- "embed.field.bot_list.name": "Bot List",
- "embed.field.footer.last_update": "Last update: {last_update}",
- "style.extra_small.display_name": "Extra Small",
- "style.extra_small.description": "An extra small-sized style that shows less information.",
- "style.small.display_name": "Small",
- "style.small.description": "A small-sized style that displays less server information.",
- "style.medium.display_name": "Medium",
- "style.medium.description": "A medium-sized style that shows server information.",
- "style.large.display_name": "Large",
- "style.large.description": "A large-sized style that shows server info and player list.",
- "style.extra_large.display_name": "Extra Large",
- "style.extra_large.description": "An extra large-sized style that shows with bot list."
-}
\ No newline at end of file
+ "command.option.clock_format": "Định dạng đồng hồ",
+ "command.option.timezone": "Cơ sở dữ liệu của múi giờ. Xem thêm: https://discordgsm.com/guide/timezones",
+ "command.option.locale": "Ngôn ngữ. Xem thêm: https://discordgsm.com/guide/locales",
+ "command.choice.12_hour_clock": "Đồng hồ 12 giờ",
+ "command.choice.24_hour_clock": "Đồng hồ 24 giờ",
+ "command.error.no_permission": "Bạn không có đủ quyền để sử dụng lệnh này.",
+ "command.error.internal_error": "Lỗi hệ thống. Vui lòng thử lại sau.",
+ "command.queryserver.description": "Truy vấn server trò chơi (chỉ một lần)",
+ "command.addserver.description": "Thêm một server vào kênh hiện tại",
+ "command.addserver.text_channel_only": "Lệnh này chỉ được hỗ trợ trong text channel.",
+ "command.addserver.limit_exceeded": "Đã vượt quá giới hạn server. Giới hạn: {limit}.",
+ "command.delserver.description": "Xóa server trong channel hiện tại",
+ "command.refresh.description": "Làm mới thông tin server trong channel hiện tại",
+ "command.factoryreset.description": "Xóa tất cả server trong guild hiện tại",
+ "command.factoryreset.button.label": "Xóa tất cả server",
+ "command.factoryreset.content": "Bạn có chắc chắn muốn xóa tất cả server trong guild hiện tại không? Điều này không thể hoàn tác.",
+ "command.factoryreset.success": "Đặt lại cài đặt gốc thành công.",
+ "command.moveup.description": "Di chuyển thông tin server lên trên",
+ "command.movedown.description": "Di chuyển thông tin server xuống dưới",
+ "command.changestyle.description": "Thay đổi style thông tin server",
+ "command.changestyle.content": "Chọn kiểu thông tin cho server {address}:{query_port}",
+ "command.editstyledata.description": "Chỉnh sửa dữ liệu style thông tin server",
+ "command.editstyledata.modal.title": "Chỉnh sửa {address}:{query_port}",
+ "command.switch.description": "Chuyển thông tin server sang channel khác",
+ "command.switch.same_channel": "Bạn không thể chuyển server sang cùng một channel.",
+ "command.switch.success": "Đã chuyển {count} server từ <#{channel_id1}> sang <#{channel_id2}>",
+ "command.settimezone.description": "Thiết lập múi giờ cho thông tin server",
+ "command.settimezone.invalid": "{timezone} không phải là múi giờ hợp lệ. Tìm hiểu thêm: https://discordgsm.com/guide/timezones",
+ "command.setlocale.description": "Thiết lập ngôn ngữ cho thông tin server",
+ "command.setlocale.invalid": "{locale} không phải là ngôn ngữ hợp lệ. Tìm hiểu thêm: https://discordgsm.com/guide/locales",
+ "command.setclock.description": "Thiết lập định dạng đồng hồ cho thông tin server",
+ "command.setalert.description": "Thiết lập cài đặt cảnh báo trạng thái server",
+ "command.setalert.content": "Cài đặt cảnh báo cho server {address}:{query_port}",
+ "command.setalert.settings.button.label": "Cài đặt Cảnh Báo",
+ "command.setalert.settings.modal.title": "Cài đặt Cảnh Báo",
+ "command.setalert.test.button.label": "Gửi Cảnh Báo Thử Nghiệm",
+ "command.setalert.test.success": "Đã gửi webhook thử nghiệm.",
+ "command.setalert.test.empty": "URL Webhook không được để trống.",
+ "command.setalert.test.invalid": "URL Webhook không hợp lệ.",
+ "command.setalert.test.not_found": "Không tìm thấy webhook này.",
+ "function.find_game.not_found": "{game_id} không phải là ID trò chơi hợp lệ. Tìm hiểu thêm: https://discordgsm.com/guide/supported-games",
+ "function.find_server.not_found": "Server {address}:{query_port} không tồn tại trong channel.",
+ "function.find_servers.empty": "Không có server nào trong channel này.",
+ "function.find_servers.parameter_error": "address và query_port phải được cung cấp cùng nhau.",
+ "function.query_server_modal.invalid_port": "Số cổng phải nằm trong khoảng từ 0 đến 65535.",
+ "function.query_server_modal.already_exists": "Server này đã tồn tại trong channel.",
+ "function.query_server_modal.fail_to_query": "Không truy vấn được server {game_id} {address}:{query_port}. Vui lòng thử lại.",
+ "function.query_server_modal.success": "Truy vấn thành công!",
+ "missing_permission.manage_messages": "Thiếu Quyền: Quản lý Tin Nhắn (Manage Messages)",
+ "missing_permission.send_messages": "Thiếu Quyền: Gửi Tin Nhắn (Send Messages)",
+ "modal.text_input.address.label": "Địa chỉ",
+ "modal.text_input.query_port.label": "Cổng Truy Vấn",
+ "modal.text_input.guild_id.label": "ID Guild",
+ "modal.text_input.webhook_url.label": "URL Webhook",
+ "modal.text_input.webhook_content.label": "Nội dung Webhook",
+ "embed.alert.description.test": "🧪 Đây là cảnh báo thử nghiệm!",
+ "embed.alert.description.online": "✅ Server của bạn đã trở lại trực tuyến!",
+ "embed.alert.description.offline": "🚨 Server của bạn dường như đã ngừng hoạt động!",
+ "embed.alert.footer.query_time": "Thời gian truy vấn: {query_time}",
+ "embed.text_input.description.label": "Mô tả",
+ "embed.text_input.description.placeholder": "Mô tả của embed.",
+ "embed.text_input.fullname.label": "Tên đầy đủ",
+ "embed.text_input.fullname.placeholder": "Tên hiển thị của trò chơi.",
+ "embed.text_input.image_url.label": "URL Hình Ảnh",
+ "embed.text_input.image_url.placeholder": "URL nguồn cho hình ảnh. Chỉ hỗ trợ HTTP(S).",
+ "embed.text_input.thumbnail_url.label": "URL Hình Thu Nhỏ",
+ "embed.text_input.thumbnail_url.placeholder": "URL nguồn cho hình thu nhỏ. Chỉ hỗ trợ HTTP(S).",
+ "embed.text_input.country.label": "Quốc Gia",
+ "embed.text_input.country.placeholder": "Mã quốc gia alpha-2.",
+ "embed.description.instant_invite": "Mời Ngay: {url}",
+ "embed.description.connect": "Kết Nối: {url}",
+ "embed.field.status.name": "Trạng Thái",
+ "embed.field.status.value.online": ":green_circle: Trực Tuyến",
+ "embed.field.status.value.offline": ":red_circle: Ngoại Tuyến",
+ "embed.field.address:port.name": "Địa Chỉ:Cổng",
+ "embed.field.address:port:query.name": "Địa Chỉ:Cổng (Truy Vấn)",
+ "embed.field.country.name": "Quốc Gia",
+ "embed.field.game.name": "Trò Chơi",
+ "embed.field.current_map.name": "Bản Đồ Hiện Tại",
+ "embed.field.players.name": "Người Chơi",
+ "embed.field.presence.name": "Hiện Diện",
+ "embed.field.members.name": "Thành Viên",
+ "embed.field.player_list.name": "Danh Sách Người Chơi",
+ "embed.field.bot_list.name": "Danh Sách Bot",
+ "embed.field.footer.last_update": "Cập nhật lần cuối: {last_update}",
+ "style.extra_small.display_name": "Rất Nhỏ",
+ "style.extra_small.description": "Hiển thị rất ít thông tin.",
+ "style.small.display_name": "Nhỏ",
+ "style.small.description": "Hiển thị ít thông tin server.",
+ "style.medium.display_name": "Trung Bình",
+ "style.medium.description": "Hiển thị đủ thông tin server.",
+ "style.large.display_name": "Lớn",
+ "style.large.description": "Hiển thị thông tin server và danh sách người chơi.",
+ "style.extra_large.display_name": "Rát Lớn",
+ "style.extra_large.description": "Hiển thị thông tin server với danh sách bot."
+}