Files
Crosspoint/lib/I18n/translations/vietnamese.yaml
T
Uri TauberandJulia Nguyen 1db1442319 fix: several bookmarks UX improvments (#2372)
## Summary

This PR enhances the EPUB reader's bookmark system with two
complementary improvements: a per-page bookmark indicator icon and
toggle behavior on the existing long-press action.

---

### What Changed

**Bookmark Toggle (was: add-only)**

The long-press Confirm action now toggles bookmarks rather than always
adding. `addBookmark()` checks whether a bookmark with the same xpath
already exists in the in-memory cache:
- If found → removes it and shows "Bookmark removed."
- If not found → adds it and shows "Bookmark added."

A new `STR_BOOKMARK_REMOVED` translation string was added to support the
removal message.

**Bookmark Icon Indicator**

A `BookmarkIcon` is now drawn at the top-right corner of the page
whenever the current page has a bookmark. `updateBookmarkFlag()` is
called at render time to determine whether the current page is
bookmarked.

**In-Memory Bookmark Cache**

Bookmarks are now loaded into `cachedBookmarks` on `onEnter()` rather
than being re-read from disk on every toggle. All subsequent add/remove
operations work against this cache and flush to disk, avoiding redundant
file reads on each bookmark action.

**Faster bookmarks list**

Previously, calculating "page X/Y" for each entry required decompressing
the entire spine item. We now persist `si`/`pc`/`pp` (spine index, page
count, and page progress) in the bookmark JSON when saving, and restore
them when loading. This avoids the expensive `toCrossPoint()` loop in
`onEnter()`, significantly reducing the cost of initializing the
bookmarks list.

---

### Files Changed

- `EpubReaderActivity.cpp` — `addBookmark()` toggle logic,
`updateBookmarkFlag()` (new), icon rendering in `renderContents()`,
cache initialization in `onEnter()`
- `EpubReaderActivity.h` — new fields: `currentPageBookmarked`,
`bookmarkRemoved`, `cachedBookmarks`; new method declaration
`updateBookmarkFlag()`

---

### AI Usage

While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.

Did you use AI tools to help write this code? _**< PARTIALLY >**_

---------

Co-authored-by: Julia Nguyen <julia@uxj.io>
2026-06-23 14:55:01 -04:00

381 lines
16 KiB
YAML

_language_name: "Tiếng Việt"
_language_code: "VI"
_order: "25"
STR_CROSSPOINT: "CrossPoint"
STR_BOOTING: "ĐANG KHỞI ĐỘNG"
STR_SLEEPING: "ĐANG NGỦ"
STR_ENTERING_SLEEP: "Đang vào chế độ ngủ"
STR_BROWSE_FILES: "Duyệt tập tin"
STR_FILE_TRANSFER: "Truyền tập tin"
STR_SETTINGS_TITLE: "Cài đặt"
STR_CONTINUE_READING: "Đọc tiếp"
STR_NO_OPEN_BOOK: "Chưa mở sách"
STR_START_READING: "Bắt đầu đọc bên dưới"
STR_NO_FILES_FOUND: "Không tìm thấy tập tin"
STR_SELECT_CHAPTER: "Chọn chương"
STR_NO_CHAPTERS: "Không có chương"
STR_END_OF_BOOK: "Hết sách"
STR_EMPTY_CHAPTER: "Chương trống"
STR_INDEXING: "Đang lập chỉ mục"
STR_MEMORY_ERROR: "Lỗi bộ nhớ"
STR_PAGE_LOAD_ERROR: "Lỗi tải trang"
STR_EMPTY_FILE: "Tập tin trống"
STR_OUT_OF_BOUNDS: "Vượt giới hạn"
STR_LOADING: "Đang tải..."
STR_LOADING_POPUP: "Đang tải"
STR_WIFI_NETWORKS: "Mạng Wi-Fi"
STR_NO_NETWORKS: "Không tìm thấy mạng"
STR_NETWORKS_FOUND: "Tìm thấy %zu mạng"
STR_SCANNING: "Đang quét..."
STR_CONNECTING: "Đang kết nối..."
STR_CONNECTED: "Đã kết nối!"
STR_CONNECTION_FAILED: "Kết nối thất bại"
STR_FORGET_NETWORK: "Quên mạng này?"
STR_SAVE_PASSWORD: "Lưu mật khẩu cho lần sau?"
STR_PRESS_OK_SCAN: "Nhấn OK để quét lại"
STR_JOIN_NETWORK: "Kết nối mạng"
STR_CREATE_HOTSPOT: "Tạo điểm phát"
STR_JOIN_DESC: "Kết nối tới mạng Wi-Fi có sẵn"
STR_HOTSPOT_DESC: "Tạo mạng Wi-Fi để máy khác kết nối"
STR_STARTING_HOTSPOT: "Đang tạo điểm phát..."
STR_HOTSPOT_MODE: "Chế độ điểm phát"
STR_CONNECT_WIFI_HINT: "Kết nối thiết bị của bạn vào mạng Wi-Fi này"
STR_OPEN_URL_HINT: "Mở URL này trong trình duyệt"
STR_OR_HTTP_PREFIX: "hoặc http://"
STR_SCAN_QR_HINT: "hoặc quét mã QR bằng điện thoại:"
STR_CALIBRE_WIRELESS: "Calibre không dây"
STR_NETWORK_LEGEND: "* = Mã hóa | + = Đã lưu"
STR_MAC_ADDRESS: "Địa chỉ MAC:"
STR_CHECKING_WIFI: "Đang kiểm tra Wi-Fi..."
STR_ENTER_WIFI_PASSWORD: "Nhập mật khẩu Wi-Fi"
STR_TO_PREFIX: "tới "
STR_CALIBRE_RECEIVING: "Đang nhận: "
STR_CALIBRE_RECEIVED: "Đã nhận: "
STR_CALIBRE_INSTRUCTION_1: "1) Cài plugin CrossPoint Reader"
STR_CALIBRE_INSTRUCTION_2: "2) Dùng chung một mạng Wi-Fi"
STR_CALIBRE_INSTRUCTION_3: "3) Trong Calibre: \"Send to device\""
STR_CALIBRE_INSTRUCTION_4: "\"Giữ màn hình này khi đang gửi\""
STR_CAT_DISPLAY: "Hiển thị"
STR_CAT_READER: "Trình đọc"
STR_CAT_CONTROLS: "Điều khiển"
STR_CAT_SYSTEM: "Hệ thống"
STR_SLEEP_SCREEN: "Màn hình ngủ"
STR_QUICK_RESUME_TIMEOUT: "Khôi phục nhanh khi hết giờ"
STR_SLEEP_COVER_MODE: "Kiểu ảnh bìa màn hình ngủ"
STR_HIDE_BATTERY: "Ẩn % pin"
STR_EXTRA_SPACING: "Giãn cách đoạn thêm"
STR_TEXT_AA: "Khử răng cưa chữ"
STR_IMAGES: "Hình ảnh"
STR_IMAGES_DISPLAY: "Hiển thị"
STR_IMAGES_PLACEHOLDER: "Khung thay thế"
STR_IMAGES_SUPPRESS: "Ẩn đi"
STR_SHORT_PWR_BTN: "Nhấn nhanh nút nguồn"
STR_ORIENTATION: "Hướng đọc"
STR_SIDE_BTN_LAYOUT: "Bố trí nút bên (trình đọc)"
STR_FRONT_BTN_FOLLOW_ORIENTATION: "Xoay nút trước theo hướng"
STR_LONG_PRESS_BEHAVIOR: "Hành vi nhấn giữ nút"
STR_LONG_PRESS_BEHAVIOR_OFF: "TẮT"
STR_LONG_PRESS_BEHAVIOR_SKIP: "Nhảy chương"
STR_LONG_PRESS_BEHAVIOR_ORIENTATION: "Đổi hướng"
STR_FONT_PREVIEW_TEXT: "Trường quê em do bố của em xây kĩ nên sạch và đẹp lắm"
STR_FONT_FAMILY: "Phông chữ trình đọc"
STR_FONT_SIZE: "Cỡ chữ trình đọc"
STR_LINE_SPACING: "Giãn dòng trình đọc"
STR_SCREEN_MARGIN: "Lề màn hình trình đọc"
STR_PARA_ALIGNMENT: "Canh lề đoạn trình đọc"
STR_HYPHENATION: "Ngắt từ bằng gạch nối"
STR_TIME_TO_SLEEP: "Thời gian chờ ngủ"
STR_SHOW_HIDDEN_FILES: "Hiện tập tin ẩn"
STR_REMOVE_READ_FROM_RECENTS: "Xóa sách đã đọc khỏi danh sách gần đây"
STR_MOVE_FINISHED_TO_READ: "Chuyển sách đọc xong vào thư mục Đã đọc"
STR_REFRESH_FREQ: "Tần suất làm tươi"
STR_KOREADER_SYNC: "Đồng bộ KOReader"
STR_CHECK_UPDATES: "Kiểm tra cập nhật"
STR_LANGUAGE: "Ngôn ngữ"
STR_CLEAR_READING_CACHE: "Xóa bộ nhớ đệm đọc"
STR_USERNAME: "Tên đăng nhập"
STR_PASSWORD: "Mật khẩu"
STR_SYNC_SERVER_URL: "URL máy chủ đồng bộ"
STR_DOCUMENT_MATCHING: "Khớp tài liệu"
STR_AUTHENTICATE: "Xác thực"
STR_KOREADER_USERNAME: "Tên đăng nhập KOReader"
STR_KOREADER_PASSWORD: "Mật khẩu KOReader"
STR_FILENAME: "Tên tập tin"
STR_BINARY: "Nhị phân"
STR_SET_CREDENTIALS_FIRST: "Hãy nhập thông tin đăng nhập trước"
STR_WIFI_CONN_FAILED: "Kết nối Wi-Fi thất bại"
STR_AUTHENTICATING: "Đang xác thực..."
STR_AUTH_SUCCESS: "Xác thực thành công!"
STR_KOREADER_AUTH: "Xác thực KOReader"
STR_SYNC_READY: "Đồng bộ KOReader đã sẵn sàng"
STR_AUTH_FAILED: "Xác thực thất bại"
STR_DONE: "Xong"
STR_CLEAR_CACHE_WARNING_1: "Thao tác này sẽ xóa toàn bộ dữ liệu sách đã lưu đệm."
STR_CLEAR_CACHE_WARNING_2: "Toàn bộ tiến độ đọc sẽ bị mất!"
STR_CLEAR_CACHE_WARNING_3: "Sách sẽ cần lập chỉ mục lại"
STR_CLEAR_CACHE_WARNING_4: "khi mở lại."
STR_CLEARING_CACHE: "Đang xóa bộ nhớ đệm..."
STR_CACHE_CLEARED: "Đã xóa bộ nhớ đệm"
STR_ITEMS_REMOVED: "mục đã xóa"
STR_FAILED_LOWER: "thất bại"
STR_CLEAR_CACHE_FAILED: "Không xóa được bộ nhớ đệm"
STR_CHECK_SERIAL_OUTPUT: "Xem chi tiết ở cổng serial"
STR_DARK: "Tối"
STR_LIGHT: "Sáng"
STR_CUSTOM: "Tùy chỉnh"
STR_COVER: "Ảnh bìa"
STR_NONE_OPT: "Không"
STR_FIT: "Vừa khung"
STR_CROP: "Cắt"
STR_NEVER: "Không bao giờ"
STR_IN_READER: "Trong trình đọc"
STR_ALWAYS: "Luôn luôn"
STR_IGNORE: "Bỏ qua"
STR_SLEEP: "Ngủ"
STR_PAGE_TURN: "Lật trang"
STR_FORCE_REFRESH: "Làm tươi màn hình"
STR_PORTRAIT: "Dọc"
STR_LANDSCAPE_CW: "Ngang (thuận)"
STR_INVERTED: "Lật ngược"
STR_LANDSCAPE_CCW: "Ngang (ngược)"
STR_PREV_NEXT: "Trước/Sau"
STR_NEXT_PREV: "Sau/Trước"
STR_DISABLED: "Tắt"
STR_NOTO_SERIF: "Noto Serif"
STR_NOTO_SANS: "Noto Sans"
STR_SMALL: "Nhỏ"
STR_MEDIUM: "Vừa"
STR_LARGE: "Lớn"
STR_X_LARGE: "Rất lớn"
STR_TIGHT: "Hẹp"
STR_NORMAL: "Bình thường"
STR_WIDE: "Rộng"
STR_JUSTIFY: "Đều hai bên"
STR_ALIGN_LEFT: "Trái"
STR_CENTER: "Giữa"
STR_ALIGN_RIGHT: "Phải"
STR_PAGES_1: "1 trang"
STR_PAGES_5: "5 trang"
STR_PAGES_10: "10 trang"
STR_PAGES_15: "15 trang"
STR_PAGES_30: "30 trang"
STR_UPDATE: "Cập nhật"
STR_CHECKING_UPDATE: "Đang kiểm tra cập nhật..."
STR_NEW_UPDATE: "Có bản cập nhật mới!"
STR_CURRENT_VERSION: "Phiên bản hiện tại: "
STR_NEW_VERSION: "Phiên bản mới: "
STR_UPDATING: "Đang cập nhật..."
STR_NO_UPDATE: "Không có bản cập nhật"
STR_UPDATE_FAILED: "Cập nhật thất bại"
STR_UPDATE_COMPLETE: "Cập nhật hoàn tất"
STR_POWER_ON_HINT: "Nhấn giữ nút nguồn để bật lại"
STR_RESTARTING_HINT: "Đang khởi động lại... Nếu máy không khởi động lại, hãy giữ nút nguồn vài giây."
STR_NO_ENTRIES: "Không tìm thấy mục nào"
STR_DOWNLOADING: "Đang tải về..."
STR_DOWNLOAD_FAILED: "Tải về thất bại"
STR_ERROR_MSG: "Lỗi:"
STR_UNNAMED: "Không tên"
STR_HOLD_OPEN_TO_DELETE: "Giữ Mở để xóa"
STR_NO_SERVER_URL: "Chưa cấu hình URL máy chủ"
STR_FETCH_FEED_FAILED: "Không tải được nguồn cấp"
STR_PARSE_FEED_FAILED: "Không phân tích được nguồn cấp"
STR_NEXT_PAGE: "Trang sau »"
STR_PREV_PAGE: "« Trang trước"
STR_NETWORK_PREFIX: "Mạng: "
STR_IP_ADDRESS_PREFIX: "Địa chỉ IP: "
STR_ERROR_GENERAL_FAILURE: "Lỗi: Sự cố chung"
STR_ERROR_NETWORK_NOT_FOUND: "Lỗi: Không tìm thấy mạng"
STR_ERROR_CONNECTION_TIMEOUT: "Lỗi: Kết nối quá thời gian"
STR_SD_CARD: "Thẻ SD"
STR_BACK: "« Quay lại"
STR_EXIT: "« Thoát"
STR_HOME: "« Thư viện"
STR_SELECT: "Chọn"
STR_SELECTED: "Đã chọn"
STR_TOGGLE: "Bật/Tắt"
STR_TOGGLE_BOOKMARK: "Bật/tắt dấu trang"
STR_CONFIRM: "Xác nhận"
STR_CANCEL: "Hủy"
STR_CONNECT: "Kết nối"
STR_OPEN: "Mở"
STR_DOWNLOAD: "Tải về"
STR_RETRY: "Thử lại"
STR_YES: "Có"
STR_NO: "Không"
STR_SHOW: "Hiện"
STR_HIDE: "Ẩn"
STR_STATE_ON: "BẬT"
STR_STATE_OFF: "TẮT"
STR_NOT_SET: "Chưa đặt"
STR_DIR_LEFT: "Trái"
STR_DIR_RIGHT: "Phải"
STR_DIR_UP: "Lên"
STR_DIR_DOWN: "Xuống"
STR_OK_BUTTON: "OK"
STR_SLEEP_COVER_FILTER: "Bộ lọc ảnh bìa màn hình ngủ"
STR_FILTER_CONTRAST: "Tương phản"
STR_CUSTOMISE_STATUS_BAR: "Tùy chỉnh thanh trạng thái"
STR_CHAPTER_PAGE_COUNT: "Số trang trong chương"
STR_BOOK_PROGRESS_PERCENTAGE: "Phần trăm tiến độ sách"
STR_PROGRESS_BAR: "Thanh tiến độ"
STR_PROGRESS_BAR_THICKNESS: "Độ dày thanh tiến độ"
STR_PROGRESS_BAR_THIN: "Mỏng"
STR_PROGRESS_BAR_MEDIUM: "Vừa"
STR_PROGRESS_BAR_THICK: "Dày"
STR_BOOK: "Sách"
STR_CHAPTER: "Chương"
STR_EXAMPLE_CHAPTER: "Chương 21"
STR_EXAMPLE_BOOK: "Tên sách"
STR_PREVIEW: "Xem trước"
STR_TITLE: "Tiêu đề"
STR_BATTERY: "Pin"
STR_XTC_STATUS_BAR: "Thanh trạng thái XTC"
STR_BOTTOM: "Dưới"
STR_TOP: "Trên"
STR_CLOCK: "Đồng hồ"
STR_CLOCK_UTC_OFFSET: "Chênh lệch UTC"
STR_CLOCK_FORMAT: "Định dạng giờ"
STR_CLOCK_FORMAT_24H: "24 giờ"
STR_CLOCK_FORMAT_12H: "12 giờ"
STR_CURRENT_TIME: "Giờ hiện tại:"
STR_NEXT_FIELD: "Tiếp"
STR_CLOCK_SYNC: "Đồng bộ đồng hồ"
STR_CLOCK_SYNC_NOW: "Đồng bộ đồng hồ ngay"
STR_CLOCK_SYNCING: "Đang đồng bộ từ NTP..."
STR_CLOCK_SYNC_OK: "Đã đồng bộ đồng hồ"
STR_CLOCK_SYNC_FAIL: "Đồng bộ thất bại"
STR_CLOCK_SYNC_NO_WIFI: "Chưa kết nối Wi-Fi"
STR_CLOCK_SYNC_NO_WIFI_HINT: "Hãy kết nối Wi-Fi trước, rồi thử lại."
STR_CLOCK_SYNCED: "Đã đồng bộ đồng hồ"
STR_UI_THEME: "Giao diện"
STR_THEME_CLASSIC: "Cổ điển"
STR_THEME_LYRA: "Lyra"
STR_THEME_ROUNDEDRAFF: "RoundedRaff"
STR_THEME_LYRA_EXTENDED: "Lyra mở rộng"
STR_SUNLIGHT_FADING_FIX: "Khắc phục mờ dưới nắng"
STR_REMAP_FRONT_BUTTONS: "Gán lại nút mặt trước"
STR_BOOKMARKS: "Dấu trang"
STR_BOOKMARK_ADDED: "Đã thêm dấu trang."
STR_BOOKMARK_REMOVED: "Đã xóa dấu trang."
STR_OPDS_BROWSER: "Trình duyệt OPDS"
STR_SEARCH: "Tìm kiếm"
STR_COVER_CUSTOM: "Ảnh bìa + Tùy chỉnh"
STR_QUICK_RESUME: "Khôi phục nhanh"
STR_MENU_RECENT_BOOKS: "Sách gần đây"
STR_REMOVE_FROM_RECENTS: "Xóa khỏi sách gần đây?"
STR_NO_RECENT_BOOKS: "Không có sách gần đây"
STR_CALIBRE_DESC: "Dùng truyền không dây của Calibre"
STR_FORGET_AND_REMOVE: "Quên mạng và xóa mật khẩu đã lưu?"
STR_FORGET_BUTTON: "Quên"
STR_CALIBRE_STARTING: "Đang khởi động Calibre..."
STR_CALIBRE_SETUP: "Thiết lập"
STR_CALIBRE_STATUS: "Trạng thái"
STR_CLEAR_BUTTON: "Xóa"
STR_DEFAULT_VALUE: "Mặc định"
STR_REMAP_PROMPT: "Nhấn một nút mặt trước cho mỗi vai trò"
STR_UNASSIGNED: "Chưa gán"
STR_ALREADY_ASSIGNED: "Đã được gán"
STR_REMAP_RESET_HINT: "Nút bên Lên: Đặt lại bố trí mặc định"
STR_REMAP_CANCEL_HINT: "Nút bên Xuống: Hủy gán lại"
STR_HW_BACK_LABEL: "Quay lại (nút 1)"
STR_HW_CONFIRM_LABEL: "Xác nhận (nút 2)"
STR_HW_LEFT_LABEL: "Trái (nút 3)"
STR_HW_RIGHT_LABEL: "Phải (nút 4)"
STR_GO_TO_PERCENT: "Đến vị trí %"
STR_GO_HOME_BUTTON: "Về trang chủ"
STR_SYNC_PROGRESS: "Đồng bộ tiến độ"
STR_DELETE_CACHE: "Xóa bộ nhớ đệm sách"
STR_DELETE: "Xóa"
STR_CONFIRM_DELETE_BOOKMARK: "Xóa dấu trang này?"
STR_DISPLAY_QR: "Hiện trang dạng QR"
STR_CHAPTER_PREFIX: "Chương: "
STR_PAGES_SEPARATOR: " trang | "
STR_BOOK_PREFIX: "Sách: "
STR_CALIBRE_URL_HINT: "Với Calibre, thêm /opds vào URL"
STR_PERCENT_STEP_HINT: "Trái/Phải: 1% Lên/Xuống: 10%"
STR_SYNCING_TIME: "Đang đồng bộ giờ..."
STR_CALC_HASH: "Đang tính mã băm tài liệu..."
STR_HASH_FAILED: "Không tính được mã băm tài liệu"
STR_FETCH_PROGRESS: "Đang lấy tiến độ từ máy chủ..."
STR_UPLOAD_PROGRESS: "Đang tải tiến độ lên..."
STR_NO_CREDENTIALS_MSG: "Chưa cấu hình thông tin đăng nhập"
STR_KOREADER_SETUP_HINT: "Thiết lập tài khoản KOReader trong Cài đặt"
STR_PROGRESS_FOUND: "Đã tìm thấy tiến độ!"
STR_REMOTE_LABEL: "Máy chủ:"
STR_LOCAL_LABEL: "Cục bộ:"
STR_PAGE_OVERALL_FORMAT: "Trang %d, %.2f%% toàn bộ"
STR_PAGE_TOTAL_OVERALL_FORMAT: "Trang %d/%d, %.2f%% toàn bộ"
STR_DEVICE_FROM_FORMAT: " Từ: %s"
STR_APPLY_REMOTE: "Áp dụng tiến độ máy chủ"
STR_UPLOAD_LOCAL: "Tải tiến độ cục bộ lên"
STR_NO_REMOTE_MSG: "Không có tiến độ trên máy chủ"
STR_UPLOAD_PROMPT: "Tải vị trí hiện tại lên?"
STR_UPLOAD_SUCCESS: "Đã tải tiến độ lên!"
STR_SYNC_FAILED_MSG: "Đồng bộ thất bại"
STR_SAVE_PROGRESS_FAILED: "Không lưu được tiến độ"
STR_SECTION_PREFIX: "Phần "
STR_UPLOAD: "Tải lên"
STR_BOOK_S_STYLE: "Kiểu của sách"
STR_EMBEDDED_STYLE: "Kiểu nhúng sẵn"
STR_FOCUS_READING: "Đọc tập trung"
STR_OPDS_SERVER_URL: "URL máy chủ OPDS"
STR_SET_SLEEP_COVER: "Đặt ảnh bìa"
STR_FOOTNOTES: "Chú thích"
STR_NO_FOOTNOTES: "Trang này không có chú thích"
STR_LINK: "[liên kết]"
STR_SCREENSHOT_BUTTON: "Chụp màn hình"
STR_SLEEP_TIMER_VALUE_FORMAT: "%u phút"
STR_SLEEP_NEVER: "Không bao giờ"
STR_SLEEP_TIMER_STEP_HINT: "Trái/Phải: 1 phút Lên/Xuống: 5 phút"
STR_ADD_SERVER: "Thêm máy chủ"
STR_SERVER_NAME: "Tên máy chủ"
STR_NO_SERVERS: "Chưa cấu hình máy chủ OPDS"
STR_DELETE_SERVER: "Xóa máy chủ"
STR_OPDS_SERVERS: "Máy chủ OPDS"
STR_AUTO_TURN_ENABLED: "Tự lật trang: "
STR_AUTO_TURN_PAGES_PER_MIN: "Tự lật (số trang mỗi phút)"
STR_MANAGE_FONTS: "Quản lý phông chữ"
STR_FONT_BROWSER: "Trình duyệt phông chữ"
STR_LOADING_FONT_LIST: "Đang tải danh sách phông..."
STR_NO_FONTS_AVAILABLE: "Không có phông chữ"
STR_FONT_INSTALLED: "Đã cài phông chữ!"
STR_FONT_INSTALL_FAILED: "Cài phông chữ thất bại"
STR_INSTALLED: "Đã cài"
STR_DOWNLOAD_ALL: "Tải tất cả"
STR_UPDATE_ALL: "Cập nhật tất cả"
STR_UPDATE_AVAILABLE: "Cập nhật"
STR_CRASH_TITLE: "Lỗi hệ thống"
STR_CRASH_DESCRIPTION: "Báo cáo chi tiết đã được lưu vào crash_report.txt. Vui lòng đính kèm tập tin này khi báo lỗi."
STR_CRASH_REASON: "Lý do lỗi:"
STR_CRASH_NO_REASON: "(Không ghi nhận lý do)"
STR_TILT_PAGE_TURN: "Lật trang khi nghiêng"
STR_KB_HINT_MOVE_CURSOR: "Nhấn TRÁI hoặc PHẢI để di chuyển con trỏ"
STR_KB_HINT_RETURN_CURSOR: "Nhấn TRÁI để quay lại vị trí con trỏ"
STR_KB_HINT_HIDE_PASSWORD: "Giữ PHẢI rồi nhấn [***] để ẩn mật khẩu"
STR_KB_HINT_SHOW_PASSWORD: "Giữ PHẢI rồi nhấn [abc] để hiện mật khẩu"
STR_KB_HINT_TOGGLE_HIDE_PASSWORD: "Nhấn [***] để ẩn mật khẩu"
STR_KB_HINT_TOGGLE_SHOW_PASSWORD: "Nhấn [abc] để hiện mật khẩu"
STR_KB_HINT_EDIT_ENTRY: "Giữ LÊN để sửa mục"
STR_KB_TIPS: "Mẹo:"
STR_KB_HINT_RETURN_KEYBOARD: "Nhấn XUỐNG để quay lại bàn phím"
STR_KB_HINT_EXIT_URL_MODE: "Nhấn ABC để thoát chế độ URL"
STR_KB_HINT_CLEAR_TEXT: "Giữ DEL để xóa toàn bộ chữ"
STR_KB_HINT_SECONDARY_CHAR: "Giữ CHỌN để nhập ký tự phụ"
STR_KB_HINT_UPPER_SECONDARY: "Giữ CHỌN để viết HOA hoặc ký tự phụ"
STR_KB_HINT_LOWER_SECONDARY: "Giữ CHỌN để viết thường hoặc ký tự phụ"
STR_KB_HINT_URL_SNIPPETS: "Nhấn URL để chèn mẫu"
STR_SD_FIRMWARE_UPDATE: "Cập nhật firmware từ thẻ SD"
STR_SELECT_FIRMWARE_FILE: "Chọn tập tin firmware (.bin)"
STR_NO_BIN_FILES: "Không tìm thấy tập tin .bin"
STR_VALIDATING_FIRMWARE: "Đang kiểm tra firmware..."
STR_INVALID_FIRMWARE: "Tập tin firmware không hợp lệ"
STR_FIRMWARE_TOO_LARGE: "Firmware quá lớn so với phân vùng"
STR_FIRMWARE_TOO_SMALL: "Tập tin firmware quá nhỏ"
STR_FIRMWARE_UPDATE_PROMPT: "Cập nhật firmware?"
STR_FIRMWARE_FILE_OPEN_FAILED: "Không mở được tập tin"
STR_FIRMWARE_WRITE_FAILED: "Ghi firmware thất bại"
STR_FIRMWARE_UPDATE_DO_NOT_POWER_OFF: "Không được tắt nguồn!"
STR_RECOVERY_MODE: "Chế độ phục hồi"
STR_RECOVERY_MODE_HINT: "Đặt firmware.bin ở thư mục gốc thẻ SD rồi chọn"