💡 Gói Unity Localization (
com.unity.localization) giúp thêm tiếng Việt (mã localevi) vào bất kỳ game Unity nào qua năm bước: cài gói, thêm locale vi, tạo String Table Collection, nhập bản dịch và gắn component LocalizedString. Hai điểm dễ bỏ sót: atlas phông TextMeshPro phải chứa đủ 134+ glyph dấu tiếng Việt, và vùng chứa UI cần rộng hơn 15-30% so với tiếng Anh.
Ý chính
- Cài
com.unity.localizationqua Package Manager; mã locale tiếng Việt làvi(BCP 47); Google Play hỗ trợ đầy đủvicho store listing. - String Table Collections xuất được XLIFF, gửi cho dịch thuật viên mà không cần chia sẻ toàn bộ dự án Unity.
- Chuyển TextMeshPro sang Dynamic atlas mode để hiển thị đủ 134+ glyph dấu tiếng Việt khi chạy.
- Chạy pseudo-localization trước khi dịch để phát hiện tràn văn bản UI sớm - tiếng Việt dài hơn tiếng Anh khoảng 20%.
- Dịch máy ổn cho văn bản giữ chỗ; cần native gamer tiếng Việt review in-context cho thuật ngữ thể loại và sắc thái văn hóa.
Thị trường game Việt Nam và lý do đầu tư bản địa hóa tiếng Việt
Việt Nam có hơn 77 triệu người dùng internet và thị trường game di động đang tăng trưởng mạnh. Google Play liệt kê tiếng Việt (vi) là ngôn ngữ được hỗ trợ đầy đủ cho cả store listing lẫn phát hiện locale trên thiết bị. Người chơi dùng thiết bị cài tiếng Việt kỳ vọng game phải khớp với ngôn ngữ của họ.
Với 97 triệu người nói tiếng Việt trên toàn thế giới, bổ sung tiếng Việt là quyết định doanh thu, không chỉ là việc hoàn thiện sản phẩm. Các studio game Trung Quốc là nguồn cung lớn nhất các game di động vào thị trường Việt Nam, và những tựa game ship kèm tiếng Việt ngay từ đầu thường đạt tỷ lệ giữ chân người chơi ngày 7 và ngày 30 cao hơn rõ rệt.
Làm thế nào để cài gói Unity Localization và thêm locale vi?
Mở Window > Package Manager, chuyển sang Unity Registry, tìm "Localization" và cài com.unity.localization (yêu cầu Unity 2021.3 LTS trở lên). Vào Edit > Project Settings > Localization, nhấn Add Locale, tích chọn Vietnamese (vi) và xác nhận. Unity tạo file asset locale vi trong dự án của bạn.
Đặt Default Locale (thường là tiếng Anh en) và thêm vi vào danh sách locale được hỗ trợ. System Locale Selector sẽ tự phát hiện locale trên Android, iOS và Windows. Để buộc tiếng Việt khi kiểm tra trong Editor:
// Buộc locale vi khi runtime để kiểm tra
LocalizationSettings.SelectedLocale =
LocalizationSettings.AvailableLocales.GetLocale("vi");
Cấu trúc String Table Collection cho tiếng Việt và xuất XLIFF ra sao?
String Table Collection lưu một hàng cho mỗi chuỗi và một cột cho mỗi locale. Mở qua Window > Asset Management > Localization Tables, nhấn New Table Collection, chọn các locale (bao gồm vi) và đặt tên. Lưu ý với tiếng Việt:
- Đặt tên key: dùng đường dẫn phân cách bằng dấu chấm (
ui.button.start,hud.label.hp,dlg.npc.guard.line_001), không dùng dấu cách. - Số nhiều: tiếng Việt không có số nhiều ngữ pháp. Smart String thường chỉ cần một dạng, đơn giản hơn so với tiếng Anh hay tiếng Pháp.
- Preloading: bật preloading cho bảng HUD và UI cốt lõi để chuỗi sẵn sàng ngay từ frame đầu tiên.
- Xuất XLIFF: vào Window > Asset Management > Localization Tables > Export, chọn XLIFF 1.2 hoặc 2.0, đặt nguồn là
envà đích làvi. Gửi file.xliffcho dịch thuật viên hoặc CAT tool (Trados, memoQ, Smartcat). Nhập file đã dịch về và rebuild Addressables. Dịch thuật viên không cần truy cập dự án Unity.
Tại sao cài đặt atlas phông TextMeshPro lại quan trọng với dấu tiếng Việt?
Tiếng Việt dùng chữ Latin cộng với sáu dấu thanh (sắc, huyền, hỏi, ngã, nặng, ngang) chồng lên nguyên âm, tạo ra hơn 134 biến thể glyph riêng biệt. Atlas TMP tĩnh được tạo từ bộ ký tự ASCII sẽ hiển thị ô vuông hoặc dấu hỏi với các chữ như ả, ụ, ễ, ồ.
Giải pháp: đặt font TMP sang Dynamic atlas mode (Atlas Population Mode: Dynamic trong Font Asset Creator). Unity tạo glyph theo yêu cầu khi chạy, bao phủ toàn bộ dải Unicode tiếng Việt. Với bản build production, xuất bộ ký tự từ String Table (Window > Localization Tables > Export Character Set) rồi bake atlas tĩnh từ bộ đó. Kết quả: không thiếu glyph và không có overhead khi chạy.
Những lỗi văn bản tiếng Việt phổ biến nhất trong game Unity là gì?
- Thiếu dấu: atlas TMP tĩnh thiếu glyph hiển thị ô vuông, làm văn bản không đọc được. Giải pháp: Dynamic atlas hoặc atlas tĩnh được bake từ bộ ký tự của String Table.
- Tràn văn bản UI: "Start" tiếng Anh (5 ký tự) thành "Bắt đầu" tiếng Việt (7 ký tự). Giải pháp: chạy pseudo-localization trước khi dịch để phát hiện sớm các vùng chứa quá chật.
- Chuỗi hard-code: bất kỳ
.text = "Start Game"trong script đều bỏ qua String Table. Thay tất cả bằng tham chiếuLocalizedString. - Lỗi encoding: công cụ Windows lưu XLIFF dạng Windows-1252 sẽ làm hỏng dấu tiếng Việt ngầm. Pipeline XLIFF native của Unity mặc định dùng UTF-8; đảm bảo dịch thuật viên cũng xuất UTF-8.
- Thiếu locale fallback: key không có giá trị
vivà không cài fallback sẽ hiển thị chuỗi trống. Cài fallback locale trong Localization Settings.
Nên tự làm phần nào và khi nào cần chuyên gia bản địa hóa tiếng Việt?
Nhóm kỹ thuật tự làm được: cài gói, cấu hình locale, cấu trúc String Table, xuất XLIFF, cài atlas phông TMP, chạy pseudo-localization và dịch máy cho văn bản giữ chỗ trong quá trình phát triển.
Dịch thuật viên tiếng Việt bản ngữ có kinh nghiệm game tạo ra giá trị thực khi:
- Thuật ngữ theo thể loại cần đúng văn phong: tên kỹ năng RPG, item MOBA, cơ chế thẻ bài đều có quy ước tiếng Việt riêng mà dịch máy gần như luôn sai.
- Dialogue có chơi chữ, tham chiếu văn hóa hoặc thành ngữ vùng miền cần chuyển thể thay vì dịch thẳng.
- Store listing trên Google Play và App Store cần đọc tự nhiên với người chơi Việt, không rõ ràng là dịch máy.
- LQA trên thiết bị thực cần người chơi bản ngữ kiểm tra: lỗi đọc đúng trên giấy nhưng nghe kỳ trong ngữ cảnh chỉ người bản ngữ mới phát hiện.
Dịch vụ bản địa hóa game tiếng Việt tại trang dịch thuật game của Dao Huy bao gồm quản lý thuật ngữ, review in-context và LQA pass.
Câu hỏi thường gặp
Có thể dùng DeepL hoặc Google Translate trực tiếp cho XLIFF Unity không?
Dịch máy ổn cho văn bản giữ chỗ nhưng thường sai register cho thuật ngữ game. Tên kỹ năng RPG, item MOBA và thông báo hệ thống hay bị dịch sang tiếng Việt gượng gạo hoặc sai nghĩa. Cần native gamer review chuỗi in-context trước khi ship.
Phiên bản Unity nào hỗ trợ com.unity.localization?
Unity 2021.3 LTS trở lên: 2022.x, 2023.x và Unity 6. Cài qua Unity Registry trong Package Manager. Không cần bước setup bổ sung nào ngoài việc cài gói và mở Localization Settings để thêm locale.
Tiếng Việt có cần hỗ trợ right-to-left trong TextMeshPro không?
Không. Tiếng Việt viết từ trái sang phải, dùng chữ Latin với dấu thanh chồng lên nguyên âm, không phải chữ viết phải-sang-trái. Layout LTR mặc định của TextMeshPro hoạt động bình thường, không cần thay đổi cấu hình RTL.
Làm sao kiểm tra chuỗi tiếng Việt trong Unity Editor mà không cần thiết bị thực?
Mở Window > Asset Management > Localization Scene Controls, đặt Active Locale là vi và bật Track Changes. Các component LocalizedString cập nhật trực tiếp trong Editor, cho phép kiểm tra độ vừa và dấu tiếng Việt mà không cần thiết bị.
Nên dùng vi hay vi-VN làm mã locale?
Dùng vi. Hướng dẫn W3C i18n là giữ BCP 47 tag ngắn gọn nhất có thể. Không có sự khác biệt đáng kể về văn bản viết giữa các biến thể tiếng Việt theo vùng miền để cần đến subtag vi-VN cho UI game. Google Play cũng chấp nhận vi là mã ngôn ngữ chuẩn.
Nguồn
Các nguồn chính thức được tham khảo:
- Tài liệu Unity Localization Package ([email protected]) - cài đặt locale, String Tables, xuất XLIFF, pseudo-localization. Xác minh tháng 11 năm 2026.
- Google Play - danh sách ngôn ngữ được hỗ trợ (vi = tiếng Việt) - xác nhận hỗ trợ vi cho store localization. Xác minh tháng 11 năm 2026.
- Dữ liệu locale tiếng Việt Unicode CLDR (vi) - bộ ký tự, dấu thanh, hệ số đếm. Xác minh tháng 11 năm 2026.
- W3C Internationalization - Language tags (BCP 47) - hướng dẫn vi vs vi-VN. Xác minh tháng 11 năm 2026.

Bài viết bởi Đào Huy (Lucas), biên dịch viên và chuyên viên bản địa hóa tiếng Việt (Anh, Trung, Pháp sang Việt). See translation services →
