diff --git a/src/i18n/vi.json b/src/i18n/vi.json
index 0967ef42..088d73cc 100644
--- a/src/i18n/vi.json
+++ b/src/i18n/vi.json
@@ -1 +1,435 @@
-{}
+{
+  "about": {
+    "mrf": {
+      "federation": "Liên hợp",
+      "keyword": {
+        "keyword_policies": "Chính sách quan trọng",
+        "reject": "Từ chối",
+        "replace": "Thay thế",
+        "is_replaced_by": "→",
+        "ftl_removal": "Giới hạn chung"
+      },
+      "mrf_policies": "Kích hoạt chính sách MRF",
+      "simple": {
+        "simple_policies": "Quy tắc máy chủ",
+        "accept": "Đồng ý",
+        "accept_desc": "Máy chủ này chỉ chấp nhận tin nhắn từ những máy chủ:",
+        "reject": "Từ chối",
+        "quarantine": "Bảo hành",
+        "quarantine_desc": "Máy chủ này sẽ gửi tút công khai đến những máy chủ:",
+        "ftl_removal": "Giới hạn chung",
+        "media_removal": "Ẩn Media",
+        "media_removal_desc": "Media từ những máy chủ sau sẽ bị ẩn:",
+        "media_nsfw": "Áp đặt nhạy cảm",
+        "media_nsfw_desc": "Nội dung từ những máy chủ sau sẽ bị tự động gắn nhãn nhạy cảm:",
+        "reject_desc": "Máy chủ này không chấp nhận tin nhắn từ những máy chủ:",
+        "ftl_removal_desc": "Nội dung từ những máy chủ sau sẽ bị ẩn:"
+      },
+      "mrf_policies_desc": "Các chính sách MRF kiểm soát sự liên hợp của máy chủ. Các chính sách sau được bật:"
+    },
+    "staff": "Nhân viên"
+  },
+  "domain_mute_card": {
+    "mute": "Ẩn",
+    "mute_progress": "Đang ẩn…",
+    "unmute": "Ngưng ẩn",
+    "unmute_progress": "Đang ngưng ẩn…"
+  },
+  "exporter": {
+    "export": "Xuất dữ liệu",
+    "processing": "Đang chuẩn bị tập tin cho bạn tải về"
+  },
+  "features_panel": {
+    "chat": "Chat",
+    "pleroma_chat_messages": "Pleroma Chat",
+    "gopher": "Gopher",
+    "media_proxy": "Proxy media",
+    "text_limit": "Giới hạn ký tự",
+    "title": "Tính năng",
+    "who_to_follow": "Đề xuất theo dõi",
+    "upload_limit": "Giới hạn tải lên",
+    "scope_options": "Đa dạng kiểu đăng"
+  },
+  "finder": {
+    "error_fetching_user": "Lỗi người dùng",
+    "find_user": "Tìm người dùng"
+  },
+  "shoutbox": {
+    "title": "Chat cùng nhau"
+  },
+  "general": {
+    "apply": "Áp dụng",
+    "submit": "Gửi tặng",
+    "more": "Nhiều hơn",
+    "loading": "Đang tải…",
+    "generic_error": "Đã có lỗi xảy ra",
+    "error_retry": "Xin hãy thử lại",
+    "retry": "Thử lại",
+    "optional": "tùy chọn",
+    "show_more": "Xem thêm",
+    "show_less": "Thu gọn",
+    "dismiss": "Bỏ qua",
+    "cancel": "Hủy bỏ",
+    "disable": "Tắt",
+    "enable": "Bật",
+    "confirm": "Xác nhận",
+    "verify": "Xác thực",
+    "close": "Đóng",
+    "peek": "Thu gọn",
+    "role": {
+      "admin": "Quản trị viên",
+      "moderator": "Kiểm duyệt viên"
+    },
+    "flash_security": "Lưu ý rằng điều này có thể tiềm ẩn nguy hiểm vì nội dung Flash là mã lập trình tùy ý.",
+    "flash_fail": "Tải nội dung Flash thất bại, tham khảo chi tiết trong console.",
+    "flash_content": "Nhấn để hiện nội dung Flash bằng Ruffle (Thử nghiệm, có thể không dùng được)."
+  },
+  "image_cropper": {
+    "crop_picture": "Cắt hình ảnh",
+    "save": "Lưu",
+    "save_without_cropping": "Bỏ qua cắt",
+    "cancel": "Hủy bỏ"
+  },
+  "importer": {
+    "submit": "Gửi đi",
+    "success": "Đã nhập dữ liệu thành công.",
+    "error": "Có lỗi xảy ra khi nhập dữ liệu từ tập tin này."
+  },
+  "login": {
+    "login": "Đăng nhập",
+    "description": "Đăng nhập bằng OAuth",
+    "logout": "Đăng xuất",
+    "password": "Mật khẩu",
+    "placeholder": "vd: cobetronxinh",
+    "register": "Đăng ký",
+    "username": "Tên người dùng",
+    "hint": "Đăng nhập để cùng trò chuyện",
+    "authentication_code": "Mã truy cập",
+    "enter_recovery_code": "Nhập mã khôi phục",
+    "recovery_code": "Mã khôi phục",
+    "heading": {
+      "totp": "Xác thực hai bước",
+      "recovery": "Khôi phục hai bước"
+    },
+    "enter_two_factor_code": "Nhập mã xác thực hai bước"
+  },
+  "media_modal": {
+    "previous": "Trước đó",
+    "next": "Kế tiếp"
+  },
+  "nav": {
+    "about": "Về máy chủ này",
+    "administration": "Vận hành bởi",
+    "back": "Quay lại",
+    "friend_requests": "Yêu cầu theo dõi",
+    "mentions": "Lượt nhắc đến",
+    "interactions": "Giao tiếp",
+    "dms": "Nhắn tin",
+    "public_tl": "Bảng tin máy chủ",
+    "timeline": "Bảng tin",
+    "home_timeline": "Bảng tin của bạn",
+    "twkn": "Thế giới",
+    "bookmarks": "Đã lưu",
+    "user_search": "Tìm kiếm người dùng",
+    "search": "Tìm kiếm",
+    "who_to_follow": "Đề xuất theo dõi",
+    "preferences": "Thiết lập",
+    "timelines": "Bảng tin",
+    "chats": "Chat"
+  },
+  "notifications": {
+    "broken_favorite": "Trạng thái chưa rõ, đang tìm kiếm…",
+    "favorited_you": "thích tút của bạn",
+    "followed_you": "theo dõi bạn",
+    "follow_request": "yêu cầu theo dõi bạn",
+    "load_older": "Xem những thông báo cũ hơn",
+    "notifications": "Thông báo",
+    "read": "Đọc!",
+    "repeated_you": "chia sẻ tút của bạn",
+    "no_more_notifications": "Không còn thông báo nào",
+    "migrated_to": "chuyển sang",
+    "reacted_with": "chạm tới {0}",
+    "error": "Lỗi xử lý thông báo: {0}"
+  },
+  "polls": {
+    "add_poll": "Tạo bình chọn",
+    "option": "Lựa chọn",
+    "votes": "người bình chọn",
+    "people_voted_count": "{count} người bình chọn | {count} người bình chọn",
+    "vote": "Bình chọn",
+    "type": "Kiểu bình chọn",
+    "single_choice": "Chỉ được chọn một lựa chọn",
+    "multiple_choices": "Cho phép chọn nhiều lựa chọn",
+    "expiry": "Thời hạn bình chọn",
+    "expires_in": "Bình chọn kết thúc sau {0}",
+    "not_enough_options": "Không đủ lựa chọn tối thiểu",
+    "add_option": "Thêm lựa chọn",
+    "votes_count": "{count} bình chọn | {count} bình chọn",
+    "expired": "Bình chọn đã kết thúc {0} trước"
+  },
+  "emoji": {
+    "stickers": "Sticker",
+    "emoji": "Emoji",
+    "keep_open": "Mở khung lựa chọn",
+    "search_emoji": "Tìm emoji",
+    "add_emoji": "Nhập emoji",
+    "custom": "Tùy chỉnh emoji",
+    "unicode": "Unicode emoji",
+    "load_all_hint": "Tải trước {saneAmount} emoji, tải toàn bộ emoji có thể gây xử lí chậm.",
+    "load_all": "Đang tải {emojiAmount} emoji"
+  },
+  "interactions": {
+    "favs_repeats": "Tương tác",
+    "follows": "Lượt theo dõi mới",
+    "moves": "Người dùng chuyển đi",
+    "load_older": "Xem tương tác cũ hơn"
+  },
+  "post_status": {
+    "new_status": "Đăng tút",
+    "account_not_locked_warning": "Tài khoản của bạn chưa {0}. Bất kỳ ai cũng có thể xem những tút dành cho người theo dõi của bạn.",
+    "account_not_locked_warning_link": "đã khóa",
+    "attachments_sensitive": "Đánh dấu media là nhạy cảm",
+    "media_description": "Mô tả media",
+    "content_type": {
+      "text/plain": "Văn bản",
+      "text/html": "HTML",
+      "text/markdown": "Markdown",
+      "text/bbcode": "BBCode"
+    },
+    "content_warning": "Tiêu đề (tùy chọn)",
+    "default": "Just landed in L.A.",
+    "direct_warning_to_first_only": "Người đầu tiên được nhắc đến mới có thể thấy tút này.",
+    "posting": "Đang đăng tút",
+    "post": "Đăng",
+    "preview": "Xem trước",
+    "preview_empty": "Trống",
+    "empty_status_error": "Không thể đăng một tút trống và không có media",
+    "media_description_error": "Cập nhật media thất bại, thử lại sau",
+    "scope_notice": {
+      "private": "Chỉ những người theo dõi bạn mới thấy tút này",
+      "unlisted": "Tút này sẽ không hiện trong bảng tin máy chủ và thế giới",
+      "public": "Mọi người đều có thể thấy tút này"
+    },
+    "scope": {
+      "public": "Công khai - hiện trên bảng tin máy chủ",
+      "private": "Riêng tư - Chỉ dành cho người theo dõi",
+      "unlisted": "Hạn chế - không hiện trên bảng tin",
+      "direct": "Tin nhắn - chỉ người được nhắc đến mới thấy"
+    },
+    "direct_warning_to_all": "Những ai được nhắc đến sẽ đều thấy tút này."
+  },
+  "registration": {
+    "bio": "Tiểu sử",
+    "email": "Email",
+    "fullname": "Tên hiển thị",
+    "password_confirm": "Xác nhận mật khẩu",
+    "registration": "Đăng ký",
+    "token": "Lời mời",
+    "captcha": "CAPTCHA",
+    "new_captcha": "Nhấn vào hình ảnh để đổi captcha mới",
+    "username_placeholder": "vd: cobetronxinh",
+    "fullname_placeholder": "vd: Cô Bé Tròn Xinh",
+    "bio_placeholder": "vd:\nHi, I'm Cô Bé Tròn Xinh.\nI’m an anime girl living in suburban Vietnam. You may know me from the school.",
+    "reason": "Lý do đăng ký",
+    "reason_placeholder": "Máy chủ này phê duyệt đăng ký thủ công.\nHãy cho quản trị viên biết lý do bạn muốn đăng ký.",
+    "register": "Đăng ký",
+    "validations": {
+      "username_required": "không được để trống",
+      "fullname_required": "không được để trống",
+      "email_required": "không được để trống",
+      "password_confirmation_required": "không được để trống",
+      "password_confirmation_match": "phải trùng khớp với mật khẩu",
+      "password_required": "không được để trống"
+    }
+  },
+  "remote_user_resolver": {
+    "remote_user_resolver": "Giải quyết người dùng từ xa",
+    "searching_for": "Tìm kiếm",
+    "error": "Không tìm thấy."
+  },
+  "selectable_list": {
+    "select_all": "Chọn tất cả"
+  },
+  "settings": {
+    "app_name": "Tên app",
+    "save": "Lưu thay đổi",
+    "security": "Bảo mật",
+    "enter_current_password_to_confirm": "Nhập mật khẩu để xác thực",
+    "mfa": {
+      "otp": "OTP",
+      "setup_otp": "Thiết lập OTP",
+      "wait_pre_setup_otp": "hậu thiết lập OTP",
+      "confirm_and_enable": "Xác nhận và kích hoạt OTP",
+      "title": "Xác thực hai bước",
+      "recovery_codes": "Những mã khôi phục.",
+      "waiting_a_recovery_codes": "Đang nhận mã khôi phục…",
+      "authentication_methods": "Phương pháp xác thực",
+      "scan": {
+        "title": "Quét",
+        "desc": "Sử dụng app xác thực hai bước để quét mã QR hoặc nhập mã khôi phục:",
+        "secret_code": "Mã"
+      },
+      "verify": {
+        "desc": "Để bật xác thực hai bước, nhập mã từ app của bạn:"
+      },
+      "generate_new_recovery_codes": "Tạo mã khôi phục mới",
+      "warning_of_generate_new_codes": "Khi tạo mã khôi phục mới, những mã khôi phục cũ sẽ không sử dụng được nữa.",
+      "recovery_codes_warning": "Hãy viết lại mã và cất ở một nơi an toàn - những mã này sẽ không xuất hiện lại nữa. Nếu mất quyền sử dụng app 2FA app và mã khôi phục, tài khoản của bạn sẽ không thể truy cập."
+    },
+    "allow_following_move": "Cho phép tự động theo dõi lại khi tài khoản đang theo dõi chuyển sang máy chủ khác",
+    "attachmentRadius": "Tập tin tải lên",
+    "attachments": "Tập tin tải lên",
+    "avatar": "Ảnh đại diện",
+    "avatarAltRadius": "Ảnh đại diện (thông báo)",
+    "avatarRadius": "Ảnh đại diện",
+    "background": "Ảnh nền",
+    "bio": "Tiểu sử",
+    "block_export": "Xuất danh sách chặn",
+    "block_import": "Nhập danh sách chặn",
+    "block_import_error": "Lỗi khi nhập danh sách chặn",
+    "mute_export": "Xuất danh sách ẩn",
+    "mute_export_button": "Xuất danh sách ẩn ra tập tin CSV",
+    "mute_import": "Nhập danh sách ẩn",
+    "mute_import_error": "Lỗi khi nhập danh sách ẩn",
+    "mutes_imported": "Đã nhập danh sách ẩn! Sẽ mất một lúc nữa để hoàn thành.",
+    "import_mutes_from_a_csv_file": "Nhập danh sách ẩn từ tập tin CSV",
+    "blocks_tab": "Danh sách chặn",
+    "bot": "Đây là tài khoản Bot",
+    "btnRadius": "Nút",
+    "cBlue": "Xanh (Trả lời, theo dõi)",
+    "cOrange": "Cam (Thích)",
+    "cRed": "Đỏ (Hủy bỏ)",
+    "change_email": "Đổi email",
+    "change_email_error": "Có lỗi xảy ra khi đổi email.",
+    "changed_email": "Đã đổi email thành công!",
+    "change_password": "Đổi mật khẩu",
+    "changed_password": "Đổi mật khẩu thành công!",
+    "chatMessageRadius": "Tin nhắn chat",
+    "follows_imported": "Đã nhập danh sách theo dõi! Sẽ mất một lúc nữa để hoàn thành.",
+    "collapse_subject": "Thu gọn những tút có tựa đề",
+    "composing": "Thu gọn",
+    "current_password": "Mật khẩu cũ",
+    "mutes_and_blocks": "Ẩn và Chặn",
+    "data_import_export_tab": "Nhập / Xuất dữ liệu",
+    "default_vis": "Kiểu đăng tút mặc định",
+    "delete_account": "Xóa tài khoản",
+    "delete_account_error": "Có lỗi khi xóa tài khoản. Xin liên hệ quản trị viên máy chủ để tìm hiểu.",
+    "delete_account_instructions": "Nhập mật khẩu bên dưới để xác nhận.",
+    "domain_mutes": "Máy chủ",
+    "avatar_size_instruction": "Kích cỡ tối thiểu 150x150 pixels.",
+    "pad_emoji": "Nhớ chừa khoảng cách khi chèn emoji",
+    "emoji_reactions_on_timeline": "Hiện tương tác emoji trên bảng tin",
+    "export_theme": "Lưu mẫu",
+    "filtering": "Bộ lọc",
+    "filtering_explanation": "Những tút chứa từ sau sẽ bị ẩn, mỗi chữ một hàng",
+    "word_filter": "Bộ lọc từ ngữ",
+    "follow_export": "Xuất danh sách theo dõi",
+    "follow_import": "Nhập danh sách theo dõi",
+    "follow_import_error": "Lỗi khi nhập danh sách theo dõi",
+    "accent": "Màu chủ đạo",
+    "foreground": "Màu phối",
+    "general": "Chung",
+    "hide_attachments_in_convo": "Ẩn tập tin đính kèm trong thảo luận",
+    "hide_media_previews": "Ẩn xem trước media",
+    "hide_all_muted_posts": "Ẩn những tút đã ẩn",
+    "hide_muted_posts": "Ẩn tút từ các người dùng đã ẩn",
+    "max_thumbnails": "Số ảnh xem trước tối đa cho mỗi tút",
+    "hide_isp": "Ẩn thanh bên của máy chủ",
+    "hide_shoutbox": "Ẩn thanh chat máy chủ",
+    "hide_wallpaper": "Ẩn ảnh nền máy chủ",
+    "preload_images": "Tải trước hình ảnh",
+    "use_one_click_nsfw": "Xem nội dung nhạy cảm bằng cách nhấn vào",
+    "hide_user_stats": "Ẩn số liệu người dùng (vd: số người theo dõi)",
+    "hide_filtered_statuses": "Ẩn những tút đã lọc",
+    "import_followers_from_a_csv_file": "Nhập danh sách theo dõi từ tập tin CSV",
+    "import_theme": "Tải mẫu có sẵn",
+    "inputRadius": "Chỗ nhập vào",
+    "checkboxRadius": "Hộp kiểm",
+    "instance_default": "(mặc định: {value})",
+    "instance_default_simple": "(mặc định)",
+    "interface": "Giao diện",
+    "interfaceLanguage": "Ngôn ngữ",
+    "limited_availability": "Trình duyệt không hỗ trợ",
+    "links": "Liên kết",
+    "lock_account_description": "Tự phê duyệt yêu cầu theo dõi",
+    "loop_video": "Lặp lại video",
+    "loop_video_silent_only": "Chỉ lặp lại những video không có âm thanh",
+    "mutes_tab": "Ẩn",
+    "play_videos_in_modal": "Phát video trong khung hình riêng",
+    "file_export_import": {
+      "backup_restore": "Sao lưu",
+      "backup_settings": "Thiết lập sao lưu",
+      "restore_settings": "Khôi phục thiết lập từ tập tin",
+      "errors": {
+        "invalid_file": "Tập tin đã chọn không hỗ trợ bởi Pleroma. Giữ nguyên mọi thay đổi.",
+        "file_too_old": "Phiên bản không tương thích: {fileMajor}, phiên bản tập tin quá cũ và không được hỗ trợ (min. set. ver. {feMajor})",
+        "file_slightly_new": "Phiên bản tập tin khác biệt, không thể áp dụng một vài thay đổi",
+        "file_too_new": "Phiên bản không tương thích: {fileMajor}, phiên bản PleromaFE(settings ver {feMajor}) của máy chủ này quá cũ để sử dụng"
+      },
+      "backup_settings_theme": "Thiết lập sao lưu dữ liệu và giao diện"
+    },
+    "profile_fields": {
+      "label": "Metadata",
+      "add_field": "Thêm mục",
+      "name": "Nhãn",
+      "value": "Nội dung"
+    },
+    "use_contain_fit": "Không cắt ảnh đính kèm trong bản xem trước",
+    "name": "Tên",
+    "name_bio": "Tên & tiểu sử",
+    "new_email": "Email mới",
+    "new_password": "Mật khẩu mới",
+    "notification_visibility_follows": "Theo dõi",
+    "notification_visibility_mentions": "Lượt nhắc",
+    "notification_visibility_repeats": "Chia sẻ",
+    "notification_visibility_moves": "Chuyển máy chủ",
+    "notification_visibility_emoji_reactions": "Tương tác",
+    "no_blocks": "Không có chặn",
+    "no_mutes": "Không có ẩn",
+    "hide_follows_description": "Ẩn danh sách những người tôi theo dõi",
+    "hide_followers_description": "Ẩn danh sách những người theo dõi tôi",
+    "hide_followers_count_description": "Ẩn số lượng người theo dõi tôi",
+    "show_admin_badge": "Hiện huy hiệu \"Quản trị viên\" trên trang của tôi",
+    "show_moderator_badge": "Hiện huy hiệu \"Kiểm duyệt viên\" trên trang của tôi",
+    "oauth_tokens": "OAuth tokens",
+    "token": "Token",
+    "refresh_token": "Làm tươi token",
+    "valid_until": "Có giá trị tới",
+    "revoke_token": "Gỡ",
+    "panelRadius": "Panels",
+    "pause_on_unfocused": "Dừng phát khi đang lướt các tút khác",
+    "presets": "Mẫu có sẵn",
+    "profile_background": "Ảnh nền trang cá nhân",
+    "profile_banner": "Ảnh bìa trang cá nhân",
+    "profile_tab": "Trang cá nhân",
+    "radii_help": "Thiết lập góc bo tròn (bằng pixels)",
+    "replies_in_timeline": "Trả lời trong bảng tin",
+    "reply_visibility_all": "Hiện toàn bộ trả lời",
+    "reply_visibility_self": "Chỉ hiện những trả lời có nhắc tới tôi",
+    "reply_visibility_following_short": "Hiện trả lời có những người tôi theo dõi",
+    "reply_visibility_self_short": "Hiện trả lời của bản thân",
+    "setting_changed": "Thiết lập khác với mặc định",
+    "block_export_button": "Xuất danh sách chặn ra tập tin CSV",
+    "blocks_imported": "Đã nhập danh sách chặn! Sẽ mất một lúc nữa để hoàn thành.",
+    "cGreen": "Green (Chia sẻ)",
+    "change_password_error": "Có lỗi xảy ra khi đổi mật khẩu.",
+    "confirm_new_password": "Xác nhận mật khẩu mới",
+    "delete_account_description": "Xóa vĩnh viễn mọi dữ liệu và vô hiệu hóa tài khoản của bạn.",
+    "discoverable": "Hiện tài khoản trong công cụ tìm kiếm và những tính năng khác",
+    "follow_export_button": "Xuất danh sách theo dõi ra tập tin CSV",
+    "hide_attachments_in_tl": "Ẩn tập tin đính kèm trong bảng tin",
+    "right_sidebar": "Hiện thanh bên bên phải",
+    "hide_post_stats": "Ẩn tương tác của tút (vd: số lượt thích)",
+    "import_blocks_from_a_csv_file": "Nhập danh sách chặn từ tập tin CSV",
+    "invalid_theme_imported": "Tập tin đã chọn không hỗ trợ bởi Pleroma. Giao diện của bạn sẽ giữ nguyên.",
+    "notification_visibility": "Những loại thông báo sẽ hiện",
+    "notification_visibility_likes": "Thích",
+    "no_rich_text_description": "Không hiện rich text trong các tút",
+    "hide_follows_count_description": "Ẩn số lượng người tôi theo dõi",
+    "nsfw_clickthrough": "Cho phép nhấn vào xem các tút nhạy cảm",
+    "reply_visibility_following": "Chỉ hiện những trả lời có nhắc tới tôi hoặc từ những người mà tôi theo dõi"
+  },
+  "errors": {
+    "storage_unavailable": "Pleroma không thể truy cập lưu trữ trình duyệt. Thông tin đăng nhập và những thiết lập tạm thời sẽ bị mất. Hãy cho phép cookies."
+  }
+}