EngineHướng dẫnFAQPatreonDiscordTải xuống
Đăng nhập

RuneTranslate · dịch game từ tiếng Nhật và hơn 30 ngôn ngữ

Sản phẩm

  • Tải xuống
  • Engine
  • Chữ trong ảnh
  • Trình sửa tệp lưu
  • Chế độ gian lận
  • Nhật ký thay đổi

Tài nguyên

  • Hướng dẫn
  • So sánh
  • FAQ

Cộng đồng

  • Patreon
  • Discord
  • YouTube
  • Trustpilot

Pháp lý

  • Quyền riêng tư
  • Điều khoản
  • Hoàn tiền
  • Liên hệ
© 2026 RuneTranslate
RuneTranslateTất cả bài viết

troubleshooting · workflow · export · exclusions

Game đã dịch không khởi động? Tìm dòng gây lỗi

Game đã dịch của bạn mở rồi đóng ngay, hoặc treo mãi ở màn hình tải. Một trong các dòng bạn dịch vốn không phải văn bản: một id, một đường dẫn, một cờ mà game so sánh. Hãy chứng minh lỗi nằm ở bản dịch trước, rồi tìm dòng đó bằng cách chia đôi: khoảng mười ba lần xuất đưa năm nghìn dòng xuống còn một.

29 thg 8, 2026·11 phút đọc

Cửa sổ mở ra. Cửa sổ đóng lại. Hôm qua game vẫn ổn, rồi bạn dành cả buổi tối để dịch, và giờ nó chết hẳn.

Đâu đó trong những dòng ấy có một dòng vốn chưa bao giờ là văn bản: tên một cảnh, một đường dẫn file, một cờ mà game dùng để so sánh. Engine chạm phải nó và bỏ cuộc trước khi vẽ được bất cứ thứ gì.

Bạn sẽ không đọc năm nghìn dòng để tìm ra nó. Bạn sẽ hỏi một câu có/không khoảng mười ba lần.

Câu trả lời ngắn. Trước hết hãy chứng minh lỗi nằm ở bản dịch, rồi chia đôi: dịch một nửa số dòng nghi ngờ, xuất, khởi động game. Nửa nào lỗi thì dòng của bạn nằm trong nửa đó. Lặp lại trên nửa ấy cho đến khi chỉ còn một dòng.

Trước khi đi tìm: có đúng là do bản dịch không?

  1. Chạy game gốc. Không phải bản xuất của bạn, mà là bản nguyên vẹn. Nếu nó cũng lỗi, vấn đề nằm ở máy của bạn, thư mục, hoặc chính game.
  2. Dịch một dòng ngắn, vô hại, xuất ra rồi chạy. Một từ trong menu mà bạn thấy được trên màn hình là đủ.
  3. Chỉ sau đó mới bắt đầu tìm dòng gây lỗi.

Bước 2 nói là một dòng, không phải không có gì, và có chủ ý. Nhiều adapter bỏ qua khi không có gì để ghi, nên một bản xuất rỗng chỉ kiểm tra việc sao chép file chứ không kiểm tra cách đưa bản dịch vào game, và có thể qua được trong khi bản thật thì hỏng.

Nếu bản dựng một dòng cũng lỗi thì không dòng nào riêng lẻ là thủ phạm và chia đôi sẽ không tìm ra gì. Hãy xuất lại vào một thư mục trống hoàn toàn mới, kiểm tra bạn đang chạy bản đã xuất chứ không phải bản gốc, và đọc các cảnh báo của lần xuất. Nếu vẫn lỗi, hãy báo như một lỗi ở khâu đưa bản dịch vào game.

Việc phân loại này tốn hai lần chạy và một lần xuất: vài phút với dự án RPG Maker nhỏ, lâu hơn với game Unity lớn. Nó giúp bạn khỏi mất cả buổi tối đi tìm một dòng không hề tồn tại.

Hai trường hợp trông giống nhau. Ô vuông, dấu hỏi hoặc chữ Latin loạn trong khi game vẫn chạy là vấn đề phông chữ hoặc bảng mã. Game sập ngay sau khi cài plugin hoặc lớp phủ là lỗi của công cụ, không phải của các dòng bạn dịch.

Tìm dòng gây lỗi bằng cách chia đôi

Phần lớn dự án có nhiều file, và danh sách file là thứ dễ cắt đôi nhất.

  1. Đặt lại toàn bộ bản dịch từ thanh công cụ.
  2. Mở Chọn file để dịch, dòng này tự giải thích: “Chọn những file cần dịch. File không được chọn sẽ được giữ nguyên.” Bỏ chọn một nửa số file, dịch phần còn lại.
  3. Xuất vào một thư mục trống hoàn toàn mới và chạy game.
  4. Nếu game khởi động, dòng của bạn nằm trong nửa bạn để yên; nếu không, nó nằm trong nửa bạn vừa dịch. Dù thế nào, danh sách cũng chỉ còn một nửa và bạn có thể quên nửa kia.
  5. Đặt lại toàn bộ bản dịch lần nữa, chia đôi danh sách còn lại, xuất, chạy.
  6. Lặp lại cho đến khi còn một file, rồi chia đôi bên trong file đó cho đến khi còn một dòng.

Chia theo file thô hơn chia theo dòng, nên số vòng phụ thuộc vào số file của bạn: bốn mươi file là khoảng sáu vòng để tới file đó, rồi bạn bắt đầu lại bên trong nó.

Dự án chỉ có một file, như script NScripter hay một game Kirikiri hoặc Wolf một kịch bản, thì không có danh sách file để cắt. Hãy kéo một khung xuống các hàng: ô chọn và thanh thao tác hàng loạt tự hiện ra, và Dịch lại mục đã chọn lo phần còn lại. Với đợt quét lớn hơn, hãy thu hẹp các hàng bằng bộ lọc và ô tìm kiếm trước, rồi Chọn tất cả mục hiển thị. Cẩn thận với nút này: nó lấy đúng những gì bộ lọc đang hiển thị, nên một bộ lọc bạn quên xóa sẽ âm thầm làm hỏng mọi vòng sau. Hãy ghi lại bộ lọc bạn đã dùng.

Một đợt một trăm dòng bị lỗi, diễn ra như sau:

  • Vòng 1: 100 dòng nghi ngờ, dịch 50 dòng đầu, game chạy được, vậy dòng lỗi nằm ở 50 dòng còn lại.
  • Vòng 2: 50 dòng nghi ngờ, dịch 25 dòng đầu, game hỏng, vậy dòng lỗi nằm trong 25 dòng này.
  • Vòng 3: 25 dòng nghi ngờ, dịch 13 dòng đầu, game chạy được, vậy dòng lỗi nằm ở 12 dòng còn lại.
  • Vòng 4: 12 dòng nghi ngờ, dịch 6 dòng đầu, game hỏng, vậy dòng lỗi nằm trong 6 dòng này.
  • Vòng 5: 6 dòng nghi ngờ, dịch 3 dòng đầu, game hỏng, vậy dòng lỗi nằm trong 3 dòng này.
  • Vòng 6: 3 dòng nghi ngờ, dịch 2 dòng đầu, game chạy được, vậy chỉ còn một dòng.

Bảy lần xuất là trường hợp xấu nhất với một trăm dòng, và khoảng mười ba lần là trường hợp xấu nhất với năm nghìn dòng.

Mỗi vòng tốn bao nhiêu

Một lần xuất, một lần chạy, và thời gian game cần để tới dòng hội thoại đầu tiên. Hai hoặc ba phút với dự án RPG Maker nhỏ. Với game Unity lớn, nơi lần xuất sao chép cả game và màn hình tiêu đề tải khá lâu, thì gần mười phút.

Vậy mười ba vòng là gần hết một buổi tối. Nhưng đó vẫn là lựa chọn rẻ, vì cách còn lại là đọc năm nghìn dòng rồi đoán trúng.

Có hai thứ dễ sai khi làm tay. Mỗi vòng hãy xuất vào một thư mục trống mới, vì vài engine nạp bản vá theo kiểu cộng dồn, nên vòng 3 đặt lên vòng 1 và 2 sẽ kiểm tra cả ba cùng lúc. Đặt lại là đặt lại: hãy dùng Đặt lại toàn bộ bản dịch, đừng sửa tay, vì nó khôi phục văn bản đã ghi lại khi dự án được tạo, kể cả khi bạn đã ghi đè thư mục nguồn từ đó.

Nếu đã hoàn lại dòng đó mà game vẫn lỗi

Thì không chỉ có một dòng, đây là kết quả bình thường của lần dịch-tất-cả đầu tiên trên engine nhạy với cú pháp. Cứ để dòng của bạn ở trạng thái đã hoàn lại và chạy lại vòng lặp trên những gì vẫn đang được dịch. Thủ phạm thứ hai rất thường là cùng loại chuỗi với cái đầu tiên, trong cùng một file.

Lần sau, hãy dịch theo từng đợt

Chia đợt không tiết kiệm lần xuất nào, vì dù sao bạn cũng sẽ xuất những lần đó, nhưng nó khiến mỗi lỗi đến với phạm vi đã thu hẹp sẵn. Nó hỏng ở đợt cuối, nên chia đôi bắt đầu từ một trăm dòng thay vì năm nghìn. Hãy bắt đầu với 100, và nới lên 500 hoặc cả một file khi vài đợt liền chạy sạch.

Engine nào hỏng nếu bạn dịch nhầm dòng?

Người ta hay nói engine nào khắt khe, engine nào dễ tính. Điều thật sự quyết định là bản dịch của bạn rơi vào đâu.

Vài engine đọc nó như dữ liệu: một file riêng và một hook lúc chạy trên Ren’Py, JSON đã escape trên RPG Maker, một giá trị .locres với các hash khóa được giữ nguyên trên Unreal. Cấu trúc của game không bao giờ thấy văn bản của bạn, nên một dòng sai chỉ làm bạn mất đúng một dòng. Các engine khác ghép nó vào một file mà game phân tích như script, mã đánh dấu hoặc luồng byte, và câu của bạn trở thành một phần cấu trúc file đó. Lúc này một dấu hai chấm, một dấu ngoặc, thêm một byte hay một chuỗi vốn cũng là khóa tra cứu là đủ làm game dừng.

Quy tắc chỉ có vậy. Tìm engine của bạn, đọc dòng của nó, rồi đi tiếp.

  • RPG Maker MV/MZ: Ít rủi ro cấu trúc: JSON và CSV đã escape. Văn bản sự kiện, cài đặt plugin và chữ trong plugin riêng của game chỉ được đưa ra khi game hiển thị chúng, còn các cài đặt chứa mã, giá trị hoặc lựa chọn cố định được giữ nguyên như phát hành. Rủi ro thật duy nhất là plugin so khớp chính xác tên người nói, và bộ xuất cũng viết lại khóa của plugin đó.
  • Ren’Py: Rất ít. Mã nguồn không bao giờ bị viết lại, nên chuỗi đồng thời là khóa logic vẫn an toàn.
  • Unreal Engine: Nhẹ với chuỗi .locres, theo bản chất là văn bản hiển thị. Game không có .locres dùng được thì văn bản được đọc từ asset đã cook, và ở đó một tên cảnh hoặc menu đã dịch mà game đọc lại có thể khiến nó kẹt ở màn hình trống; RuneTranslate nay bỏ những tên đó ra ngoài.
  • Unity: Nặng và âm thầm: tên cảnh, khóa biến và callback được lưu giống hệt hội thoại. Hãy chờ tải vô tận, một nút chết, hoặc màn hình đen.
  • Godot: Nặng. Đường dẫn node, StringName và tham chiếu res:// là địa chỉ mà engine tra cứu; việc ghi lại từ chối chúng.
  • Wolf RPG: Định dạng mong manh nhất ở đây. Lệch một byte là cả luồng mất đồng bộ và tiến trình dừng trước khi có cửa sổ.
  • Kirikiri / KAG: Nặng: ngoặc là cú pháp và tên lưu trữ là tên file. Tên thẻ bị dịch, ngoặc bị đổi hoặc tên file ảnh bị dịch, mỗi thứ đều làm game chết hẳn.
  • Electron VN: Nặng. Một placeholder mẫu ghi vào JavaScript đang chạy bên trong app.asar là lỗi cú pháp chứ không phải bản dịch tệ.
  • TyranoBuilder / TyranoScript: Cùng họ với Kirikiri: thẻ KAG là mã đánh dấu, nên thẻ bị dịch là lỗi cú pháp. Tham chiếu người nói nằm trong dòng không bao giờ bị viết lại.
  • NScripter: Nặng, theo kiểu riêng: ?, % và $ là ký hiệu biến, nên một ký tự lạc là lỗi cú pháp.
  • YU-RIS: Nặng, vì phần lớn thứ mà định dạng gọi là chuỗi thật ra là toán hạng. Tách chúng ra đã đưa một game từ 40,678 hàng đang dùng xuống 8,914, không mất hội thoại nào.

Các engine khác có trang riêng, mỗi trang kèm một hướng dẫn, trong mục engine.

Ba dòng đã giết chết một game

Mỗi quy tắc loại trừ trong RuneTranslate được đổi bằng một game đã ngừng chạy. Ba trường hợp này đã được sửa. Ở cả ba, dòng bị hỏng trông hoàn toàn bình thường, và lần xuất báo xanh.

Godot: game tự sinh ra một nhân vật. Một dòng ghi Warning: the door is locked. Tiếng Anh hoàn hảo. Dialogic escape mọi dấu hai chấm trong văn bản lưu, vì dấu hai chấm không escape là cách nó tách tên người nói. Khi ghi lại nguyên văn, câu đó bị phân tích lại thành một nhân vật tên Warning nói the door is locked, và addon cứ thế tạo ra anh ta.

Kirikiri: game đi tìm một file tên `End`. Thẻ của một nút mang theo tên file ảnh và nhãn đích, và bộ che không thể bao trọn một thẻ có ngoặc lồng bên trong, nên cả hai bị lộ ra và bị dịch. Giờ bộ quét nhận biết ngoặc: nó đóng ở ngoặc khớp, nên biểu thức lồng nhau nằm yên trong thẻ còn biểu thức thường kết thúc ở ] đầu tiên.

RPG Maker: một chân dung lặng lẽ biến mất. Một plugin chân dung đứng chọn ảnh của nhân vật bằng cách so tên người nói, từng chữ cái, với một bảng trong cấu hình của chính nó. Dịch tên là đúng; để yên cấu hình đó cũng đúng, vì nó đầy khóa tài nguyên. Hai điều ấy cộng lại làm phép so bằng sai, và chân dung nhân vật biến mất mà không có dòng log nào.

Cả ba lần xuất đều báo thành công. Một lần xuất sạch không phải bằng chứng game chạy được, trên bất kỳ engine nào. Bằng chứng duy nhất là khởi động nó.

Khi hoàn toàn không phải do các dòng của bạn

Chia đôi không tìm ra những trường hợp này, vì không nửa nào chạy được: vấn đề nằm ở chỗ bản xuất được đặt. Game Wolf RPG đọc kho .wolf của chúng trước mọi file rời bên cạnh, nên có game vào được màn hình tiêu đề trong khi dữ liệu đã dịch nằm trên đĩa mà không ai đọc. Addressables của Unity từ chối một bundle có byte không còn khớp checksum, và cho bạn màn hình đen mà không có gì trong bất kỳ log nào. Game RPG Maker đóng gói bỏ qua các file dữ liệu nằm cạnh file thực thi. Cả ba hiện đã được xử lý, nên lỗi khâu đưa bản dịch vào game đáng được báo hơn là đi săn.

Có dấu hiệu nào cho biết dòng nào là hội thoại không?

Không. Và hãy nghi ngờ bất cứ ai nói ngược lại.

Có lần một người dùng kể rằng anh ấy phát hiện một game Godot bọc mọi chuỗi hội thoại trong ||, chỉ dịch những chuỗi đó, và game chạy được. Thật sự hữu ích cho game ấy. Nhưng đó là thói quen của một nhà phát triển, không phải quy ước của Godot, và game tiếp theo sẽ làm khác.

Ví dụ ngược lại đến từ YU-RIS. Trong một game, kênh dấu backtick chứa toàn bộ bảng chuỗi giao diện, 687 trong 692 hàng là văn bản hiển thị, vậy mà dấu backtick vẫn không có ý nghĩa gì ở đó. Cả ba kiểu dấu nháy biên dịch ra cùng một thứ, nên quy tắc dựa vào dấu phân cách sẽ đánh dấu đỏ cả văn xuôi thật. Giá trị nằm ở đâu cho bạn biết tất cả; nó được đặt trong dấu nháy kiểu nào thì không cho biết gì.

Hãy dựa vào vị trí và hình dạng, và để game dạy bạn cả hai. Khởi động nó, đọc dòng hội thoại đầu tiên trên màn hình, rồi tìm đúng dòng đó trong trình chỉnh sửa: file của nó, nhóm của nó và các dòng bên cạnh chính là hình dạng của hội thoại trong game này. Bất cứ thứ gì nằm ở chỗ khác đều có thể không phải hội thoại.

Ứng dụng đánh dấu những gì, và không làm được gì

RuneTranslate đánh dấu các hàng mà nó cho là mã, đường dẫn tài nguyên hoặc id là bị loại trừ. Chúng bị ẩn theo mặc định, với số lượng nằm cạnh hộp chọn hiện mục bị loại trừ; bật nó lên thì chúng hiện ra tô cam, để bạn thấy nó đã quyết định gì và có thể ép bất kỳ hàng nào bằng vẫn dịch. Bạn cũng có thể thêm mẫu của riêng mình.

Chọn các hàng bị loại trừ rồi bắt đầu một lượt chạy, nó sẽ dừng lại để hỏi:

12 trong 340 dòng bạn chọn đã bị loại trừ, do bộ lọc của bạn hoặc do RuneTranslate đánh dấu là mã, đường dẫn tài nguyên hoặc ID. Dịch chúng có thể làm hỏng game.

Bỏ qua sẽ giữ chúng ở trạng thái loại trừ. Dịch chúng cũng sẽ đưa chúng vào các lượt chạy sau.

Bấm tiếp tục cũng được. Chỉ cần nhớ là bạn đã làm vậy, vì đó là nơi đầu tiên cần xem khi bản xuất ngừng chạy.

Một giới hạn thẳng thắn: việc loại trừ chỉ là phỏng đoán về một chuỗi, nên nó không thể biết một câu trong game của bạn đồng thời là khóa tra cứu trong plugin nào đó mà game đi kèm. Game có nguồn vốn đã là tiếng Anh được bảo vệ ít hơn nữa, vì các bộ lọc mạnh nhất hỏi chuỗi có chứa văn bản ngôn ngữ nguồn hay không.

Câu hỏi thường gặp

Vì sao game của tôi không khởi động sau khi dịch?

Hầu như luôn là vì một dòng bạn dịch là định danh, đường dẫn, tên cảnh hoặc cờ mà game so sánh bằng chuỗi chính xác. Đổi nó làm hỏng bước phân tích hoặc bước tra cứu.

Làm sao tìm ra dòng đã dịch nào làm hỏng game?

Chia đôi. Đặt lại mọi bản dịch, dịch một nửa, xuất vào thư mục trống, chạy. Nửa nào lỗi thì chứa dòng đó; chia nửa đó và lặp lại. Sáu hoặc bảy vòng với một trăm dòng, khoảng mười ba vòng với năm nghìn dòng.

Game đã dịch của tôi đóng ngay lập tức, nghĩa là gì?

Một lỗi nghiêm trọng lúc khởi động. Trên Kirikiri, visual novel Electron và NScripter, thường là lỗi cú pháp: một dấu ngoặc, dấu nháy hoặc placeholder bị dịch hay bị bỏ. Trên Wolf RPG và YU-RIS, là một luồng bị mất đồng bộ.

Vì sao game đã dịch của tôi mở ra màn hình đen?

Thường là một lần tải thất bại bên trong đoạn mã nuốt mất ngoại lệ; trên Unity, là một bundle có checksum không còn khớp với mục trong catalog. Hãy thử một bản dựng chỉ dịch một dòng vô hại: nếu nó cũng đen thì lỗi nằm ở khâu đưa bản dịch vào game chứ không phải dòng nào.

Game đã dịch của tôi kẹt ở màn hình tải, có phải do bản dịch không?

Rất có thể, trên Unity. Tải vô tận là triệu chứng kinh điển của tên cảnh hoặc khóa biến bị dịch: game chờ một cái tên không còn khớp, và không có gì báo lỗi.

Loại dòng nào không bao giờ nên dịch?

Bất cứ thứ gì game xử lý bằng chuỗi chính xác: đường dẫn, tên cảnh và node, tên biến và sự kiện, mã ngôn ngữ, mọi thứ có dạng snake_case hoặc res://. Nếu bạn không hình dung được người chơi đọc nó trên màn hình, hãy để nguyên.

Game chạy nhưng chữ là ô vuông hoặc dấu hỏi, có phải cùng một vấn đề không?

Không. Ô vuông đồng loạt nghĩa là phông chữ không có glyph cho các ký tự đó; dấu hỏi thật sự nghĩa là chúng bị bỏ khi ghi file. Cả hai là vấn đề phông chữ hoặc bảng mã, với cách sửa khác nhau.

Đi tiếp đến đâu

Đang bắt đầu một bản dịch chứ không phải sửa một bản? Cách làm bản vá dịch bao quát toàn bộ công việc.

Khi bạn tìm ra dòng đó: để nguyên nó ở ngôn ngữ nguồn, dịch mọi thứ xung quanh, xuất vào một thư mục trống mới và chạy. Một định danh chưa dịch không làm người chơi mất gì.

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 RuneTranslate cho Windows & Linux

Bài liên quan

comparison · tutorial · workflow · providers · 29 thg 10, 2026 · 9 phút

Các công cụ dịch game tốt nhất năm 2026

Đọc →
runemanga · image-ocr · workflow · 24 thg 10, 2026 · 4 phút

RuneManga: công cụ dịch manga và manhwa

Đọc →
patch · sharing · tutorial · workflow · 18 thg 8, 2026 · 9 phút

Cách làm bản vá dịch cho game

Đọc →

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