Tính năngPluginGiáTài nguyên
Thay đổi ngôn ngữ
Tài nguyênCách sửa lỗi bản dịch mờ (fuzzy) trong tệp .po của WordPress

Cách sửa lỗi bản dịch mờ (fuzzy) trong tệp .po của WordPress

SimplePoTranslate Team11 tháng 5, 2026
Cách sửa lỗi bản dịch mờ (fuzzy) trong tệp .po của WordPress

Bạn đã dịch mọi chuỗi. Bạn đã lưu tệp, tải lên tệp .mo và làm mới trang web của mình. Thế nhưng, một vài nhãn vẫn kiên quyết hiển thị bằng tiếng Anh. Bạn mở tệp .po, tìm chuỗi và thấy nó, đã được dịch hoàn hảo. Vậy tại sao WordPress lại bỏ qua nó?

Câu trả lời hầu như luôn là một cờ nhỏ ẩn bên trên mục nhập: #, fuzzy. Một bản dịch mờ (fuzzy) là cách gettext nói rằng "bản dịch này có thể sai, vì vậy đừng tin tưởng nó vội." Và điều quan trọng là, WordPress từ chối hiển thị các chuỗi mờ (fuzzy) trên trang web thực tế, thay vào đó quay về hiển thị bản gốc tiếng Anh. Đây là một trong những nguyên nhân bị hiểu lầm nhiều nhất của vấn đề "bản dịch của tôi không hiển thị".

Hướng dẫn này giải thích chính xác ý nghĩa của cờ bản dịch mờ (fuzzy), tại sao nó liên tục xuất hiện trong các danh mục của bạn và cách tìm và xóa các chuỗi mờ (fuzzy) trong Poedit, trên dòng lệnh và trên quy mô lớn trên toàn bộ danh sách tồn đọng. Một khi bạn hiểu cơ chế này, bí ẩn về các bản dịch bị thiếu sẽ biến mất.

Cờ Fuzzy Thực Sự Có Nghĩa Là Gì?

Cờ fuzzy là một dấu hiệu mà gettext thêm vào một mục dịch để chỉ ra rằng bản dịch không chắc chắn và cần được con người xem xét. Trong tệp .po thô, nó xuất hiện dưới dạng một nhận xét đặc biệt ngay phía trên chuỗi.

#: includes/cart.php:88
#, fuzzy
msgid "Add to cart"
msgstr "Im Warenkorb"

Dòng #, fuzzy đó cho biết mọi công cụ nhận biết gettext, bao gồm WordPress, rằng msgstr bên dưới nó chỉ là tạm thời. Bản dịch tồn tại, nhưng gettext không coi đó là đã được xác nhận.

Tại Sao WordPress Bỏ Qua Các Chuỗi Fuzzy

Đây là hành vi khiến mọi người bất ngờ. Khi WordPress biên dịch hoặc đọc tệp .mo, nó coi các mục fuzzy là chưa được dịch. Chuỗi đó về mặt kỹ thuật có mặt trong tệp, nhưng WordPress cố ý bỏ qua nó và hiển thị msgid gốc thay vì bản dịch.

Vì vậy, từ góc độ của bạn, bản dịch đã "hoàn tất", nó nằm ngay trong tệp. Nhưng từ góc độ của WordPress, chuỗi đó không có bản dịch đáng tin cậy, vì vậy nó hiển thị nguồn tiếng Anh. Đây chính xác là lý do tại sao một danh mục trông có vẻ hoàn chỉnh vẫn có thể hiển thị văn bản chưa dịch ở giao diện người dùng.

Thiết kế này là có chủ đích và, công bằng mà nói, rất hợp lý. Toàn bộ mục đích của cờ fuzzy là ngăn chặn các bản dịch chưa được xác minh, có khả năng sai sót, được đưa vào hoạt động một cách âm thầm. Hãy tưởng tượng một chuỗi ban đầu có nội dung "Delete account" (Xóa tài khoản) và sau đó được thay đổi thành "Deactivate account" (Hủy kích hoạt tài khoản). Nếu gettext mù quáng giữ lại bản dịch cũ, người dùng của bạn có thể thấy một nút có nhãn "Delete account" mà thực ra chỉ hủy kích hoạt, một sự không khớp nguy hiểm. Bằng cách ẩn các chuỗi fuzzy, gettext buộc con người phải xác nhận rằng bản dịch vẫn phù hợp với ý nghĩa mới trước khi nó đến tay bất kỳ ai. Cờ này là một cơ chế an toàn, không phải là một lỗi.

Tại Sao Cờ Fuzzy Lại Liên Tục Xuất Hiện?

Cờ fuzzy không phải ngẫu nhiên. Chúng được tạo tự động bởi các công cụ gettext trong hai tình huống chính, và việc hiểu cả hai sẽ cho bạn biết cách ngăn chặn chúng.

Chuỗi Nguồn Thay Đổi

Nguyên nhân phổ biến nhất là cập nhật nguồn. Hãy tưởng tượng nhà phát triển thay đổi một chuỗi trong phiên bản plugin tiếp theo từ "Add to cart" (Thêm vào giỏ hàng) thành "Add to basket" (Thêm vào rổ). Khi bạn hợp nhất mẫu mới vào bản dịch hiện có của mình, gettext nhận thấy rằng nguồn không còn khớp với những gì bạn đã dịch ban đầu. Thay vì vứt bỏ bản dịch cũ của bạn, nó giữ lại nhưng đánh dấu là fuzzy, về cơ bản nói rằng: "tiếng Anh đã thay đổi, vì vậy vui lòng kiểm tra lại xem bản dịch của bạn còn phù hợp hay không."

Tự Động Khớp Bằng Translation Memory và msgmerge

Nguyên nhân thứ hai là khớp mờ (fuzzy matching) trong quá trình hợp nhất. Công cụ msgmerge cập nhật một tệp dịch cũ so với một mẫu mới, và khi nó tìm thấy một chuỗi nguồn tương tự nhưng không giống hệt chuỗi trước đó, nó sẽ sao chép bản dịch cũ và gắn cờ fuzzy cho nó.

# Merge a new template into an existing translation.
# Similar-but-changed strings get marked #, fuzzy automatically.
msgmerge --update awesome-plugin-de_DE.po awesome-plugin.pot

Translation Memory trong các trình chỉnh sửa máy tính để bàn hoạt động tương tự: khi nó tự động điền một gợi ý từ một kết quả khớp gần đúng, nó sẽ đánh dấu kết quả đó là fuzzy để bạn nhớ xác minh. Trong cả hai trường hợp, cờ này đều đang làm đúng nhiệm vụ của nó. Vấn đề chỉ là các mục fuzzy sau đó nằm đó mà không được xem xét, và WordPress âm thầm ẩn chúng đi.

Có một nguồn thứ ba, tinh vi hơn đáng để biết: các công cụ sao chép-dán và nhập hàng loạt. Một số nền tảng dịch và script nhập liệu đánh dấu mọi mục là fuzzy theo mặc định như một biện pháp thận trọng, mong muốn con người xác nhận từng mục sau đó. Nếu bạn nhập một danh mục từ một hệ thống khác và thấy rằng mọi chuỗi đều đột nhiên bị fuzzy, đây thường là lý do. Các bản dịch có thể hoàn toàn ổn, nhưng cho đến khi các cờ được xóa, không có bản dịch nào trong số đó sẽ xuất hiện trên trang web của bạn. Biết nguồn gốc của các cờ cho bạn biết liệu bạn thực sự cần xem xét từng mục hay việc xóa hàng loạt một cách tự tin là an toàn.

Làm Cách Nào Để Tìm và Sửa Các Chuỗi Fuzzy?

Xóa các chuỗi fuzzy có nghĩa là xem xét từng chuỗi và, một khi bạn xác nhận bản dịch là đúng, hãy xóa cờ đó. Có ba cách thực tế để thực hiện điều này tùy thuộc vào quy mô công việc.

Sửa Các Chuỗi Fuzzy trong Poedit

Poedit làm cho việc này trở nên dễ dàng nhất. Mở tệp .po và sử dụng các điều khiển tìm kiếm và lọc để chỉ hiển thị các mục fuzzy, chúng được mã hóa màu (thường là màu cam) để chúng nổi bật ngay lập tức. Nhấp vào từng mục, xác nhận hoặc sửa bản dịch, sau đó tắt trạng thái fuzzy bằng phím tắt (Chỉnh sửa rồi "Translation is Fuzzy," hoặc phím tắt hiển thị trong menu). Khi bạn lưu, Poedit sẽ biên dịch lại một tệp .mo sạch và các chuỗi đã được xác nhận sẽ hiển thị trên trang web của bạn. Nếu bạn mới sử dụng trình chỉnh sửa đó, hướng dẫn Poedit đầy đủ bao gồm quy trình lọc và xem xét chi tiết.

Sửa Các Chuỗi Fuzzy trên Dòng Lệnh

Đối với tự động hóa hoặc các danh mục lớn, dòng lệnh nhanh hơn. Bạn có thể đếm các mục fuzzy và, một khi bạn đã xác minh chúng hàng loạt, hãy loại bỏ các cờ để WordPress sẽ tải chúng.

# Count how many fuzzy strings remain
msgattrib --only-fuzzy --no-obsolete awesome-plugin-de_DE.po | grep -c "msgid"

# Clear all fuzzy flags (only after you trust the translations)
msgattrib --clear-fuzzy --empty awesome-plugin-de_DE.po \
  --output-file=awesome-plugin-de_DE.po

Hãy cẩn thận với việc xóa hàng loạt. Việc xóa cờ fuzzy mà không xem xét các bản dịch sẽ làm mất đi mục đích của cờ và có thể gửi văn bản sai thực sự đến người dùng của bạn. Sử dụng cách tiếp cận dòng lệnh khi bạn tin tưởng nguồn gốc của các bản dịch, và cách thủ công bằng Poedit khi bạn không tin tưởng.

Một giải pháp trung gian an toàn là xuất các chuỗi fuzzy vào một tệp riêng biệt, chỉ xem xét những chuỗi đó, và sau đó hợp nhất chúng trở lại. Điều này giữ cho các bản dịch đã xác nhận của bạn không bị động đến trong khi bạn chỉ tập trung vào các mục thực sự cần chú ý.

# Extract only the fuzzy entries for focused review
msgattrib --only-fuzzy --no-obsolete awesome-plugin-de_DE.po \
  --output-file=fuzzy-only.po

Xem xét năm mươi chuỗi riêng lẻ ít gây lỗi hơn nhiều so với việc cuộn một danh mục hàng nghìn dòng để tìm kiếm các hàng màu cam, và nó cung cấp cho bạn một bản ghi rõ ràng về những gì đã thay đổi trong bản cập nhật gần đây nhất.

Sau khi xóa các cờ, luôn luôn lưu lại hoặc biên dịch lại tệp .mo. Trạng thái fuzzy tồn tại trong tệp .po, nhưng WordPress đọc tệp .mo nhị phân, vì vậy cho đến khi bạn tạo lại nó, giao diện người dùng của bạn sẽ tiếp tục hiển thị tiếng Anh mặc dù tệp .po trông có vẻ sạch. Poedit tự động biên dịch lại khi lưu; trên dòng lệnh bạn chạy msgfmt awesome-plugin-de_DE.po -o awesome-plugin-de_DE.mo. Quên bước biên dịch cuối cùng này là một trong những lý do phổ biến nhất khiến một danh mục vừa được 'khử fuzzy' vẫn không xuất hiện, bản dịch đã được xác nhận trong tệp nguồn, nhưng tệp nhị phân mà trang web thực sự tải đã lỗi thời.

Lưu ý rằng các mục fuzzy thường xuất hiện cùng với các chuỗi số nhiều (plural strings), nơi một msgid_plural đã thay đổi có thể đánh dấu toàn bộ khối số nhiều là fuzzy. Nếu danh sách tồn đọng fuzzy của bạn có nhiều về số đếm và số lượng, hướng dẫn của chúng tôi về số nhiều trong Gettext và cách xử lý việc chia số nhiều phức tạp giải thích tại sao những mục đó đặc biệt dễ bị lỗi trong quá trình hợp nhất.

Xóa Danh Sách Tồn Đọng Fuzzy trên Quy Mô Lớn

Một chuỗi fuzzy duy nhất là một bản sửa lỗi trong ba mươi giây. Một danh mục với bốn trăm chuỗi fuzzy sau một bản cập nhật plugin lớn là một vấn đề khác, và trên hàng chục ngôn ngữ nó trở thành một nút thắt cổ chai thực sự. Sự cám dỗ để xóa hàng loạt các cờ mà không xem xét chính là cách các bản dịch bị hỏng được đưa vào sản xuất.

Một giải pháp sạch hơn là dịch lại các mục fuzzy mới thay vì đóng dấu các kết quả khớp cũ kỹ. Khi bạn chạy một danh mục thông qua SimplePoTranslate, AI nhận biết ngữ cảnh tạo ra một bản dịch hiện tại, đã được xác nhận cho mọi chuỗi đã thay đổi, vì vậy bạn không chỉ xóa một cờ cảnh báo, bạn đang thay thế các kết quả khớp không chắc chắn bằng các bản dịch thực sự. Khóa cú pháp (Syntax Locking) giữ nguyên mọi %s, %1$s, {count} và thẻ HTML trong quá trình xử lý, và Xử lý hàng loạt thông minh (Smart Batching) xử lý các danh mục lớn sau cập nhật chỉ trong một lần. Bạn nhận lại một tệp ZIP sạch bao gồm các tệp .po, .mo, .json, .php.xliff, không còn tồn đọng fuzzy, sẵn sàng triển khai từ đám mây.

Điều đáng nói là cần phân biệt điều này với câu hỏi rộng hơn về lý do tại sao các bản dịch không hiển thị chút nào. Cờ fuzzy là một nguyên nhân cụ thể, nhưng việc thiếu tệp .mo, sai tên tệp và không khớp ngôn ngữ cũng gây ra triệu chứng tương tự. Để có danh sách kiểm tra chẩn đoán đầy đủ, hãy xem hướng dẫn khắc phục sự cố bản dịch không hiển thị trong WordPress của chúng tôi, trong đó xem xét các chuỗi fuzzy như một mục trong danh sách lớn hơn.

Sẵn sàng xóa toàn bộ danh sách tồn đọng fuzzy và làm cho mọi chuỗi hiển thị trên trang web của bạn? Dùng thử SimplePoTranslate miễn phí — không cần thẻ tín dụng. Gói miễn phí dịch lại tệp .po của bạn một cách mới mẻ, thay thế các kết quả khớp fuzzy không chắc chắn bằng các bản dịch sạch, đã được xác nhận.