Tính năngPluginGiáTài nguyên
Thay đổi ngôn ngữ
Tài nguyênMột Tệp Đầu Vào, Năm Định Dạng Đầu Ra: Cách Chống Lỗi Thời Cho Bản Dịch WordPress Của Bạn

Một Tệp Đầu Vào, Năm Định Dạng Đầu Ra: Cách Chống Lỗi Thời Cho Bản Dịch WordPress Của Bạn

SimplePoTranslate Team21 tháng 3, 2026
Một Tệp Đầu Vào, Năm Định Dạng Đầu Ra: Cách Chống Lỗi Thời Cho Bản Dịch WordPress Của Bạn

Bạn đã dành ba tuần để dịch chủ đề WordPress của mình sang tiếng Tây Ban Nha. Tệp .po hoàn hảo — mọi chuỗi đều được xem xét, mọi biến đều còn nguyên vẹn, mọi dạng số nhiều đều chính xác. Sau đó, khách hàng của bạn quyết định di chuyển từ một chủ đề PHP cổ điển sang một thiết lập headless với React ở giao diện người dùng.

Đột nhiên, tệp .po của bạn trở nên vô dụng. Ứng dụng React cần .json. Các tiện ích PHP cũ vẫn cần .mo. Người làm tự do xử lý ứng dụng di động muốn .xliff. Và không ai có thời gian để dịch lại 4.000 chuỗi thành ba định dạng khác nhau.

Đây không phải là một trường hợp hiếm gặp. Đó là thực tế của quá trình phát triển WordPress hiện đại, nơi các chủ đề đi kèm với cả thành phần PHP và JavaScript, các plugin sử dụng hỗn hợp Gettext và i18next, và khách hàng thay đổi ý định về kiến trúc thường xuyên hơn là thay đổi mật khẩu của họ.

Tại Sao Định Dạng Tệp Dịch Quan Trọng Hơn Bao Giờ Hết

Năm năm trước, việc dịch WordPress rất đơn giản. Bạn có một tệp .po (nguồn có thể đọc được) và một tệp .mo (tệp nhị phân đã biên dịch). Chỉ vậy thôi. Mọi chủ đề, mọi plugin, mọi công cụ dịch đều nói cùng một ngôn ngữ.

Ngày nay, hệ sinh thái WordPress sử dụng ít nhất năm định dạng tệp dịch trong sản xuất:

Năm Định Dạng Bạn Cần Biết

.po (Portable Object) — Định dạng nguồn có thể đọc được dùng bởi GNU Gettext. Chứa các chuỗi gốc (msgid) và bản dịch của chúng (msgstr). Đây là những gì người dịch chỉnh sửa.

msgid "Add to Cart"
msgstr "Anadir al carrito"

msgid "Your order has been shipped to %s"
msgstr "Su pedido ha sido enviado a %s"

.mo (Machine Object) — Phiên bản nhị phân đã biên dịch của tệp .po. WordPress đọc các tệp .mo lúc chạy bằng cách sử dụng load_textdomain(). Nhanh hơn so với phân tích cú pháp .po lúc chạy, nhưng không thể chỉnh sửa được bằng người.

.json (JavaScript Object Notation) — Được sử dụng bởi wp_set_script_translations() cho các bản dịch dựa trên JavaScript trong các khối Gutenberg, thành phần React và các chủ đề hiện đại. WordPress mong đợi một cấu trúc JSON cụ thể với các khóa locale_data.

{
  "locale_data": {
    "flavor-starter": {
      "Add to Cart": ["Anadir al carrito"],
      "Your order has been shipped to %s": ["Su pedido ha sido enviado a %s"]
    }
  }
}

.php (PHP Array) — Một định dạng ngày càng phổ biến cho các chủ đề và plugin sử dụng tải bản dịch theo kiểu Laravel. Một số chủ đề WordPress hiện đại bỏ qua hoàn toàn Gettext và tải bản dịch từ các mảng PHP để có hiệu suất cao hơn.

<?php
return [
    'Add to Cart' => 'Anadir al carrito',
    'Your order has been shipped to %s' => 'Su pedido ha sido enviado a %s',
];

.xliff (XML Localization Interchange File Format) — Tiêu chuẩn ngành cho việc trao đổi bản dịch giữa các công cụ và nền tảng khác nhau. Được sử dụng bởi các công cụ CAT (Dịch thuật có sự hỗ trợ của máy tính) như memoQ, Trados và Memsource. Cần thiết khi làm việc với người dịch chuyên nghiệp.

<trans-unit id="1">
  <source>Add to Cart</source>
  <target>Anadir al carrito</target>
</trans-unit>

Vấn Đề: Phụ Thuộc Vào Định Dạng

Hầu hết các công cụ dịch đều tạo ra một định dạng đầu ra. Poedit cung cấp cho bạn .po.mo. WPML lưu trữ bản dịch trong cơ sở dữ liệu (hoàn toàn không phải trong tệp). Weglot giữ bản dịch trên máy chủ của họ ở định dạng độc quyền. Ngay cả các nền tảng TMS như Crowdin và Lokalise cũng yêu cầu bạn định cấu hình thủ công các định dạng xuất cho từng dự án.

Điều này tạo ra sự phụ thuộc vào định dạng — bản dịch của bạn bị mắc kẹt trong bất kỳ định dạng nào mà công cụ hiện tại của bạn tạo ra. Khi các yêu cầu của bạn thay đổi, bạn phải đối mặt với hai lựa chọn:

  1. Dịch lại mọi thứ ở định dạng mới (tốn kém, tốn thời gian và bạn mất mọi sửa chữa thủ công)
  2. Viết các tập lệnh chuyển đổi tùy chỉnh (dễ xảy ra lỗi, đặc biệt là đối với các dạng số nhiều phức tạp và các biến)

Cả hai lựa chọn đều không tốt. Cả hai đều lãng phí thời gian và tiền bạc. Cả hai đều tạo ra rủi ro.

Các Tình Huống Thực Tế Khi Sự Phụ Thuộc Vào Định Dạng Gây Hại

Tình huống 1: Hiện đại hóa chủ đề. Chủ đề của khách hàng của bạn đang được xây dựng lại bằng các khối Gutenberg. Các mẫu PHP cũ đã sử dụng các tệp .mo. Các khối mới cần .json cho wp_set_script_translations(). 3.000 chuỗi đã dịch của bạn cần phải tồn tại ở cả hai định dạng trong quá trình chuyển đổi.

Tình huống 2: Quy trình làm việc của agency. Bạn quản lý 20 trang web của khách hàng. Một số sử dụng các chủ đề cổ điển (.mo). Một số sử dụng các thiết lập headless (.json). Một trang web sử dụng một framework tùy chỉnh đọc các mảng PHP. Bạn cần các bản dịch giống nhau ở các định dạng khác nhau cho các khách hàng khác nhau.

Tình huống 3: Đánh giá chuyên nghiệp. Bản dịch AI của bạn chính xác 95%, nhưng bạn muốn một người bản xứ xem xét 5% còn lại. Người dịch chuyên nghiệp sử dụng các công cụ CAT nhập .xliff. Bạn cần xuất bản dịch của mình sang .xliff, gửi chúng để xem xét và hợp nhất các sửa chữa trở lại.

Tình huống 4: Di chuyển nền tảng. Khách hàng của bạn đang chuyển từ WordPress sang một ứng dụng Node.js tùy chỉnh. Ứng dụng mới sử dụng i18next và cần các tệp .json. 5.000 chuỗi đã dịch của bạn ở định dạng .po cần được chuyển đổi — mà không làm mất một biến hoặc dạng số nhiều nào.

Giải Pháp: Dịch Một Lần, Nhận Mọi Định Dạng

SimplePoTranslate có một cách tiếp cận khác. Khi bạn tải lên một tệp .po, .pot, .json hoặc .xliff và chạy bản dịch, bạn sẽ nhận lại một tệp ZIP chứa cả năm định dạng:

translations-es_ES.zip
├── flavor-starter-es_ES.po
├── flavor-starter-es_ES.mo
├── flavor-starter-es_ES.json
├── flavor-starter-es_ES.php
└── flavor-starter-es_ES.xliff

Đây không phải là một "tính năng cao cấp" bị khóa sau một cấp doanh nghiệp. Mọi gói trả phí — Pro ($19/tháng) và Lifetime ($399 một lần) — đều bao gồm cả năm định dạng đầu ra trong mọi công việc dịch.

Tại Sao Điều Này Quan Trọng Đối Với Việc Chống Lỗi Thời

Khi bạn có cả năm định dạng ngay từ đầu, bạn không bao giờ cần phải dịch lại. Bản dịch của bạn là một tài sản thích ứng với mọi yêu cầu kỹ thuật:

  • Khách hàng di chuyển từ cổ điển sang Gutenberg? Triển khai tệp .json.
  • Nhà phát triển mới thích các mảng PHP? Trao cho họ tệp .php.
  • Người dịch chuyên nghiệp muốn xem xét? Gửi tệp .xliff.
  • Chuyển sang một CMS khác? Các tệp .json.xliff không phụ thuộc vào nền tảng.

Bạn dịch một lần. Các định dạng đã sẵn sàng khi bạn cần chúng.

Cách Từng Định Dạng Hoạt Động Trong WordPress

Biết tệp nào đi đâu là điều cần thiết để triển khai sạch sẽ.

Triển Khai Tệp .mo (Chủ Đề và Plugin PHP Cổ Điển)

wp-content/languages/plugins/woocommerce-es_ES.mo
wp-content/languages/themes/flavor-starter-es_ES.mo

WordPress tự động tải chúng khi ngôn ngữ trang web phù hợp. Không cần plugin. Không tốn tài nguyên cơ sở dữ liệu. Đây là cách tiếp cận mang lại hiệu suất tốt nhất.

Triển Khai Tệp .json (Khối Gutenberg và Thành Phần JS)

wp-content/languages/plugins/woocommerce-es_ES-{handle}-{md5}.json

Tên tệp bao gồm handle script và mã băm MD5. WordPress khớp chúng khi bạn gọi wp_set_script_translations() trong plugin hoặc chủ đề của bạn. Nếu bạn đang xây dựng các khối Gutenberg, đây là tệp giúp nhãn và mô tả khối đã dịch của bạn xuất hiện chính xác.

Sử Dụng Tệp .xliff (Quy Trình Làm Việc Đánh Giá Chuyên Nghiệp)

Các tệp .xliff không được triển khai cho WordPress. Chúng được sử dụng làm định dạng trao đổi khi bạn cần gửi bản dịch cho người đánh giá chuyên nghiệp hoặc nhập chúng vào một công cụ CAT. Quy trình làm việc trông như thế này:

  1. Tải .po lên SimplePoTranslate và nhận .xliff trong tệp ZIP
  2. Gửi .xliff cho người dịch hoặc người đánh giá của bạn
  3. Nhận lại .xliff đã sửa
  4. Tải .xliff đã sửa lên SimplePoTranslate và nhận .mo.json được cập nhật

Quy trình làm việc khứ hồi này bảo toàn mọi biến và dạng số nhiều vì Khóa Cú Pháp của SimplePoTranslate bảo vệ chúng ở mọi giai đoạn.

Bài Kiểm Tra Sự Phụ Thuộc Vào Nhà Cung Cấp

Đây là một bài kiểm tra đơn giản để xác định xem quy trình làm việc dịch thuật hiện tại của bạn có vấn đề về sự phụ thuộc hay không:

  1. Bạn có thể xuất bản dịch của mình dưới dạng tệp .po tiêu chuẩn ngay bây giờ không?
  2. Nếu bạn hủy đăng ký công cụ dịch thuật của mình ngay hôm nay, bạn có giữ lại mọi chuỗi đã dịch không?
  3. Bạn có thể nhập bản dịch của mình vào một công cụ hoặc nền tảng hoàn toàn khác mà không cần dịch lại không?

Nếu câu trả lời cho bất kỳ câu hỏi nào trong số này là "không", bạn đang bị phụ thuộc. Các dịch vụ như Weglot và GTranslate không đạt cả ba câu hỏi — hủy đăng ký và bản dịch của bạn sẽ biến mất. WPML lưu trữ bản dịch trong cơ sở dữ liệu, giúp việc xuất có thể thực hiện được nhưng rất khó khăn. Ngay cả các công cụ trên máy tính để bàn như Poedit cũng vượt qua bài kiểm tra trên giấy tờ nhưng chỉ giới hạn bạn ở .po.mo.

Với SimplePoTranslate, câu trả lời cho cả ba câu hỏi là "có". Bạn tải xuống các tệp tiêu chuẩn ở năm định dạng. Chúng là của bạn. Xóa tài khoản của bạn vào ngày mai và mọi bản dịch bạn từng thực hiện vẫn hoạt động.

Xây Dựng Một Thư Viện Dịch Thuật Độc Lập Với Định Dạng

Đối với các agency và nhà phát triển quản lý nhiều dự án, cách tiếp cận thông minh nhất là xây dựng một thư viện dịch thuật — một kho lưu trữ Git hoặc thư mục dùng chung nơi bạn lưu trữ các tệp đã dịch cho mọi dự án của khách hàng.

translations/
├── client-acme/
│   ├── es_ES/
│   │   ├── flavor-starter-es_ES.po
│   │   ├── flavor-starter-es_ES.mo
│   │   ├── flavor-starter-es_ES.json
│   │   ├── flavor-starter-es_ES.php
│   │   └── flavor-starter-es_ES.xliff
│   └── de_DE/
│       └── ...
├── client-globex/
│   └── ...

Khi một khách hàng cần một định dạng mới, bạn đã có nó. Khi một khách hàng thay đổi nền tảng, bản dịch của bạn sẽ di chuyển mà không tốn chút công sức nào. Khi một nhà phát triển mới tham gia nhóm, họ có thể thấy chính xác những gì đã được dịch và ở định dạng nào.

Đây là ý nghĩa thực sự của "chống lỗi thời" — không phải dự đoán công nghệ nào khách hàng của bạn sẽ sử dụng vào năm tới, mà là đảm bảo bản dịch của bạn hoạt động với bất kỳ công nghệ nào họ chọn.

Bạn đã sẵn sàng ngừng lo lắng về định dạng tệp chưa? Dùng thử SimplePoTranslate miễn phí — tải lên một tệp, nhận lại năm định dạng. Không có tập lệnh chuyển đổi, không dịch lại, không phụ thuộc.