patch · sharing · tutorial · workflow
Cách làm bản vá dịch cho game
Bản vá dịch là thứ duy nhất mà dịch giả fan thật sự tạo ra: các dòng dịch, khớp với đúng chỗ của chúng trong game. Đây là toàn bộ công việc từ đầu đến cuối: chọn giữa lớp phủ lúc chạy và bản dựng đã vá, trích văn bản, dịch, sửa những chỗ máy dịch sai, xuất, thử trong game, và chia sẻ file bản vá thay vì chia sẻ game.
Bản vá dịch không phải là bản sao của game. Nó là công sức của người dịch (các dòng văn bản, cộng với đủ thông tin để biết dòng nào thuộc về đâu) dưới dạng mà người khác có thể áp vào bản game của họ. Mỗi thị trường có một tên riêng cho thứ này: bản vá Hàn Quốc, bản địa hóa Nga, bản địa hóa tiếng Trung. Sản phẩm giống nhau ở mọi nơi, và công việc làm ra nó cũng vậy.
Hai loại bản vá, và ngã rẽ quyết định mọi thứ
Trước khi đụng vào bất kỳ văn bản nào, hãy quyết định bạn đang làm loại nào trong hai loại, vì gần như mọi quyết định sau đó đều theo từ đây.
Lớp phủ lúc chạy dịch trong khi game đang chạy. Một thứ nào đó được nạp cạnh game (plugin bên trong engine, hook văn bản đọc bộ nhớ của game, hoặc bộ chụp màn hình đọc điểm ảnh) bắt từng dòng khi nó sắp được vẽ, rồi thay bằng bản dịch. Không có gì trong game thay đổi trên đĩa. XUnity.AutoTranslator là ví dụ nổi tiếng cho Unity, và MTool làm theo cách này cho RPG Maker.
Bản dựng đã vá đưa bản dịch vào chính các file của game. Văn bản được đọc ra từ dữ liệu mà engine thật sự nạp, được dịch, ghi lại, và kết quả là một thư mục game tự khởi động và tự chơi được, không có gì chạy bên cạnh. Đây là thứ RuneTranslate tạo ra, và là thứ Translator++ tạo ra trên những engine nó phân tích được.
Sự đánh đổi, nói thẳng:
- Lớp phủ không cần làm gì riêng cho từng game (nó hook được engine hoặc không), nhưng không có gì được lưu lại. Mỗi dòng bị dịch lại ở mỗi lần chơi, trên mỗi máy, và mỗi người chơi phải tự cài và cấu hình lớp phủ.
- Lớp phủ chỉ với tới văn bản vào lúc nó được vẽ. Chữ vẽ trong ảnh, chữ không đi qua thành phần đang được hook, và chữ do trình vẽ tùy chỉnh vẽ ra đều không được dịch.
- Bản dựng đã vá tốn thêm một bước xuất và một lượt thử, và phải làm lại khi game cập nhật. Nhưng thứ bạn nhận lại là vĩnh viễn: file giữ bản dịch, nên game đơn giản là đã được dịch, ngoại tuyến, cho bất kỳ ai áp công sức của bạn.
- Bản dựng đã vá cho bạn một bản ghi có thể chỉnh sửa. Sáu tháng sau bạn có thể sửa một dòng dở mà không phải dịch lại gì khác. Lớp phủ thì không có gì để sửa, chỉ có bộ nhớ đệm để xóa.
Nếu bạn dịch cho chính mình, một lần, trên engine mà bạn không phân tích được, lớp phủ là câu trả lời hợp lý và không có gì đáng xấu hổ. Nếu bạn định đưa công sức cho người khác, bạn cần một bản dựng đã vá, vì bản vá chỉ chia sẻ được khi nó tồn tại dưới dạng file.
Bạn cần gì trước khi bắt đầu
- Một bản game bạn sở hữu, đã cài và chơi được. Hãy chơi vài phút trước, vì bạn không thể đánh giá bản dịch đọc có đúng hay không nếu chưa từng thấy ngữ cảnh.
- Biết nó dùng engine nào. Điều này quyết định mọi thứ về cách văn bản được lấy ra và đưa trở lại.
- Một ngôn ngữ đích mà bạn thật sự đọc được. Dịch máy cho bạn bản nháp; nó không cho bạn một bản vá.
- Dung lượng đĩa cho bản sao thứ hai của game. Bản dựng đã vá là một thư mục riêng, bản gốc của bạn không bao giờ bị chỉnh sửa.
Nhận ra engine thường chỉ là nhìn vào thư mục game. Thư mục www/data hoặc data chứa các file JSON là RPG Maker MV hoặc MZ; thư mục <Game>_Data là Unity; game/*.rpy hoặc kho .rpa là Ren'Py; kho .xp3 là Kirikiri. Danh sách đầy đủ những gì phân tích được, kèm dấu hiệu nhận biết từng loại, nằm ở trang engine. RuneTranslate hỗ trợ 18 engine và định dạng, và việc phát hiện là tự động khi bạn trỏ nó vào thư mục.
Quy trình
Bất kể engine nào, làm bản vá luôn là năm bước giống nhau theo cùng thứ tự. Bạn sẽ bị cám dỗ bỏ qua bước ba. Đừng.
- Trích xuất: đọc mọi chuỗi dịch được ra khỏi file của game vào một danh sách bạn làm việc được.
- Dịch: chạy danh sách qua một nhà cung cấp dịch máy để có bản nháp đầu tiên đầy đủ.
- Rà soát: xem lại những dòng mà máy dịch luôn sai: tên riêng, kính ngữ, thuật ngữ, và mọi thứ có placeholder.
- Xuất: ghi bản dịch trở lại định dạng của game và tạo ra một bản dựng chơi được.
- Thử: khởi động bản dựng đó và thật sự chơi nó.
Trích xuất
Trích xuất là nơi hiểu biết về engine phát huy giá trị. Hội thoại hiếm khi nằm trong một file văn bản thuần: RPG Maker lưu nó trong mã lệnh sự kiện, Unity trong payload TextAsset và các trường MonoBehaviour bên trong file asset nhị phân, Kirikiri trong script nằm trong kho đóng gói, Unreal trong bảng .locres bên trong .pak. Một bộ trích xuất tốt cũng biết điều gì không nên đưa cho bạn: tên cảnh, khóa biến, toán hạng so sánh và đường dẫn tài nguyên đều trông như chuỗi và đều làm hỏng game nếu bị dịch. Chữ vẽ trong ảnh là một vấn đề riêng với công cụ riêng; xem dịch ảnh.
Dịch
Hãy lấy bản nháp dịch máy đầy đủ trước khi chỉnh tay bất cứ thứ gì, để bạn sửa văn bản thay vì nhìn chằm chằm vào một cột trống. RuneTranslate có sẵn 11 nhà cung cấp: Google, DeepL miễn phí, DeepL Classic/Next-gen và Gemini Nano (chạy trên PC của bạn, qua Chrome) không cần khóa API nào; API của DeepL, OpenAI, Anthropic Claude, DeepSeek, mọi endpoint tương thích OpenAI và mô hình cục bộ qua Ollama hoặc LM Studio là sáu nhà nữa; RuneLingua, dịch AI do chúng tôi làm, đi kèm gói trả phí. Gói Miễn phí mở khóa mười nhà còn lại và mọi engine; thứ nó giới hạn là thông lượng và việc giữ nhiều hơn một dự án cùng lúc. Nhà cung cấp nào hợp với loại game nào được trình bày trong so sánh nhà cung cấp.
Rà soát
Đây là bước làm cho bản vá đáng được áp dụng. Đầu ra của máy dịch trôi chảy nhưng sai một cách tự tin ở những chỗ có thể đoán trước, nên hãy xử lý có chủ đích những chỗ đó thay vì đọc hết từ đầu đến cuối:
- Tên nhân vật. Máy dịch tên theo cách khác nhau mỗi lần gặp, và đôi khi dịch chúng như từ thường. Hãy quyết định cách viết một lần.
- Kính ngữ và sắc thái xưng hô. Giữ hay bỏ -san / -chan là quyết định cho cả dự án, không phải từng dòng. Việc một nhân vật nói trang trọng hay không cũng vậy.
- Thuật ngữ. Kỹ năng, vật phẩm, địa điểm, hệ thống, mọi thứ game tự đặt ra. Một kỹ năng có ba tên khác nhau giữa menu, tooltip và nhật ký chiến đấu sẽ khiến game trông như bị hỏng.
- Placeholder và mã điều khiển. Mọi thứ như
\C[1],{player}hay[name]phải còn nguyên vẹn. Placeholder bị dịch là lỗi sập hoặc ô trống, không phải lỗi chính tả. - Những dòng trả về không đổi. Thường là từ tượng thanh, và thường là dấu hiệu nhà cung cấp đã bỏ cuộc với dòng đó.
Nhất quán thuật ngữ
Nhiều bản vá bị bỏ dở vì thiếu nhất quán hơn là vì văn dở. Người chơi tha thứ cho một câu cứng; họ không tha thứ khi cùng một nhân vật là Yuuki, Yuki và Snow trong một cuộc hội thoại, vì nó khiến họ không theo dõi được ai đang nói. Cách sửa là một bảng thuật ngữ: danh sách thuật ngữ gốc và thuật ngữ đích chính xác mà mỗi cái phải thành, áp dụng trước khi dịch để nhà cung cấp không có cơ hội tự ứng biến. Hãy lập nó sớm, từ những cái tên bạn gặp trong giờ đầu, và bổ sung dần. Hướng dẫn bảng thuật ngữ giải thích nó tương tác thế nào với việc che thẻ và vì sao nó thuộc về lúc bắt đầu chứ không phải một lượt tìm và thay thế ở cuối.
Phông chữ
Game Nhật đi kèm phông chữ Nhật, và phông chữ Nhật thường không có glyph cho chữ Cyrillic, Hy Lạp, Hangul, Thái hay các chữ có dấu của tiếng Ba Lan, Thổ Nhĩ Kỳ và tiếng Việt. Dịch sang một trong các ngôn ngữ đó thì game hiển thị ô vuông trống: bản dịch đúng, chỉ là phông chữ không vẽ được. Nhiều engine được xử lý sẵn: bản xuất Ren'Py, Unity, Unreal và GameMaker thêm một phông chữ vẽ được ngôn ngữ của bạn, Wolf RPG thêm một phông cho tiếng Thái và tiếng Việt, còn RPG Maker MV và MZ thêm một phông cho tiếng Ả Rập. Khi không tự động, thay file phông chữ bên trong bản dựng đã xuất thường là đủ. Dấu hỏi nguyên văn là một lỗi hoàn toàn khác: đó là bảng mã chuỗi của chính engine từ chối một ký tự, không phải thiếu glyph, và nên phân biệt rõ trước khi bạn đi tìm nhầm cách sửa. Cả hai trường hợp được nêu trong FAQ.
Thử bản dựng
Một lần xuất không báo lỗi không phải là bản vá đã được thử. Hãy khởi động nó và kiểm tra những thứ hỏng âm thầm:
- Game tới được màn hình tiêu đề và bắt đầu game mới. Bản dựng hỏng ở đây thường hỏng vì một dòng vốn không phải văn bản, tức một định danh đã bị dịch.
- Hộp thoại chứa đủ văn bản. Bản dịch dài hơn tiếng Nhật; hãy tìm những dòng tràn qua mép hộp hoặc bị cắt.
- Menu, tên vật phẩm và tooltip: những nơi một từ dài tràn khỏi nút có độ rộng cố định.
- Tệp lưu từ game gốc vẫn nạp được, và tệp lưu mới tạo trong bản dựng đã vá cũng nạp được.
- Một cảnh sâu trong game, không chỉ phần mở đầu. Thiếu sót khi trích xuất hiện ra thành những đoạn chưa dịch, không phải lỗi.
Chia sẻ công sức của bạn
Đây là phần quyết định bản vá của bạn có đưa cho người khác được hay không. Thứ bạn làm ra là bản dịch, tức các dòng văn bản. Game không phải của bạn, và đóng gói một bản game đã dịch nghĩa là phân phối game của người khác. Dạng trung thực của bản vá là chỉ phần công sức đó, được mỗi người nhận áp vào bản họ đã sở hữu.
RuneTranslate xuất đúng thứ đó thành file .rtpatch. Nó mang theo id của các dòng, các dòng gốc mà mỗi bản dịch khớp vào, và bản dịch của bạn. Không file game, không tài nguyên, không file nhị phân: file chỉ là văn bản của bạn và không gì khác, nên đủ nhỏ để đính kèm vào tin nhắn và an toàn để đưa cho bất kỳ ai.
Cùng các bản dịch đó cũng có thể lưu thành bảng tính Excel, file CSV hoặc file JSON. Những dạng này dùng để làm việc với các dòng bên ngoài RuneTranslate: đưa bảng tính cho người đọc soát, sửa cột đích của CSV trong bất kỳ trình soạn thảo văn bản nào, hoặc chạy JSON qua script của bạn, rồi nhập file đã sửa trở lại dự án. Mỗi loại mang cùng id và dòng gốc, nên khi nhập nó khớp đúng như cách một .rtpatch khớp.
Phía người nhận gồm ba bước:
- Họ tạo dự án từ bản game cùng loại đã cài của riêng họ, bước này trích ra cùng các dòng trên máy họ.
- Họ nhập
.rtpatchcủa bạn, bước này điền vào các dòng đó bản dịch của bạn. - Họ xuất bản dựng chơi được của riêng mình từ file game của riêng mình.
Việc khớp dựa vào id dòng trước, và quay về khớp theo chính dòng gốc khi id đã lệch, do game cập nhật hoặc bộ trích xuất thay đổi. Phương án dự phòng đó giữ cho bản vá dùng được sau khi game ra bản vá. Khi nhập, ứng dụng kiểm tra engine và ngôn ngữ đích có khớp không trước khi áp dụng, nên bản vá làm cho game Unity không thể bị thả nhầm vào dự án Ren'Py. Ở gói Miễn phí, việc chia sẻ bản vá được tính ở mức một lần xuất và một lần nhập trong mỗi khoảng ba ngày; mọi thứ khác về việc làm bản vá không bị giới hạn theo tính năng.
Cùng file đó là cách một nhóm làm việc chung: một người dịch cốt truyện, người khác dịch menu, và các bản vá gộp vào một dự án. Nó cũng là cách bạn giữ công sức của mình khi game cập nhật: trích xuất lại từ bản mới, nhập bản vá cũ, và chỉ những dòng thật sự thay đổi mới cần chú ý.
Bản thân game có được phân phối lại hay không là quyền của chủ sở hữu, không phải của bạn hay của chúng tôi. Hãy chia sẻ bản vá, nói cho mọi người biết nó được làm cho phiên bản game nào, và để họ tự mang bản game của mình.
Chi tiết theo từng engine
Mọi thứ ở trên là hình dạng của công việc. Điều khác nhau theo engine là văn bản nằm ở đâu, bản xuất tạo ra gì và cái gì nằm ngoài tầm với, và nên đọc trước khi bắt đầu thay vì sau khi một lần xuất làm bạn bất ngờ: Unity, RPG Maker, Ren'Py, hoặc danh sách engine đầy đủ cho mười bốn engine còn lại.
RuneTranslate chạy trên Windows 10 và 11, và chạy gốc trên Linux và Steam Deck. Lần khởi động đầu cần đăng nhập miễn phí (Patreon, Google hoặc email); gói Miễn phí mở mọi engine và mọi nhà cung cấp trừ RuneLingua. Nếu bạn đang cân nhắc nó với các lớp phủ và bộ công cụ mà mọi người thường tìm đến đầu tiên, các trang so sánh trình bày mỗi cách thật sự mang lại gì.
Bài liên quan
Sẵn sàng thử RuneTranslate?
Gói miễn phí mở khóa mọi engine và mọi nhà cung cấp dịch trừ RuneLingua. Supporter ($3.99/tháng) mở khóa tốc độ tối đa.
Tải cho Windows & Linux
