Cách Xây Dựng Quá Trình Di Chuyển Cửa Hàng Shopify Đa Ngôn Ngữ Sang WordPress

Bạn đã dành nhiều tháng để xây dựng một cửa hàng Shopify đa ngôn ngữ. Mô tả sản phẩm của bạn được dịch sang tiếng Pháp, tiếng Đức và tiếng Tây Ban Nha. Quy trình thanh toán của bạn hoạt động bằng ba ngôn ngữ. Sau đó, bạn quyết định di chuyển sang WordPress và WooCommerce để có quyền kiểm soát tốt hơn, lợi nhuận cao hơn hoặc tính linh hoạt của plugin.
Dữ liệu sản phẩm được chuyển tốt. Hình ảnh được chuyển sang. Nhưng bản dịch của bạn thì sao? Chúng biến mất.
Đây là chi phí ẩn của việc di chuyển WordPress đa ngôn ngữ mà không ai cảnh báo bạn. Shopify khóa bản dịch của bạn vào hệ thống độc quyền của riêng mình và WordPress sử dụng một kiến trúc hoàn toàn khác. Nếu không có một kế hoạch rõ ràng, bạn sẽ mất hàng tuần để xây dựng lại những gì bạn đã có. Hướng dẫn này cung cấp cho bạn kế hoạch đó.
Tại Sao Quá Trình Di Chuyển Đa Ngôn Ngữ Bị Hỏng (Và Shopify Làm Cho Nó Tệ Hơn)
Việc di chuyển nền tảng đã đủ khó khăn với các cửa hàng đơn ngữ. Thêm nhiều ngôn ngữ và độ phức tạp sẽ tăng lên. Nguyên nhân gốc rễ là do kiến trúc: Shopify và WordPress xử lý bản dịch theo những cách hoàn toàn khác nhau.
Mô Hình Dịch Thuật Của Shopify Là Một Khu Vườn Có Tường Bao Quanh
Shopify lưu trữ bản dịch dưới dạng siêu dữ liệu được gắn vào tài nguyên thông qua API Translate and Adapt. Mỗi sản phẩm, bộ sưu tập và trang có các mục dịch được liên kết với ID tài nguyên nội bộ của Shopify.
Khi bạn xuất cửa hàng của mình bằng một công cụ di chuyển như Cart2Cart, LitExtension hoặc xuất CSV, bạn sẽ nhận được nội dung ngôn ngữ mặc định. Bản dịch thì sao? Chúng nằm trong một lớp riêng biệt mà hầu hết các công cụ di chuyển hoàn toàn bỏ qua.
Những Gì Thực Sự Được Xuất (Và Những Gì Bị Mất)
Đây là những gì một công cụ di chuyển Shopify sang WordPress điển hình chuyển:
| Loại Nội Dung | Có Chuyển Không? | Bản Dịch Có Được Chuyển Không? |
|---|---|---|
| Tiêu đề và mô tả sản phẩm | Có | Không |
| Tên bộ sưu tập/danh mục | Có | Không |
| Bài đăng trên blog | Có | Không |
| Trang (Giới Thiệu, Liên Hệ) | Có | Không |
| Chuỗi chủ đề (nút, nhãn) | Không | Không |
| Chuỗi thanh toán/email | Không | Không |
| Menu điều hướng | Một phần | Không |
Mô hình rất rõ ràng. Nội dung ngôn ngữ mặc định của bạn được di chuyển. Bản dịch của bạn thì không. Và ngay cả khi bạn tự trích xuất chúng, bạn không thể chỉ dán bản dịch Shopify vào WordPress. Các hệ thống nói các ngôn ngữ khác nhau, theo đúng nghĩa đen.
Ánh Xạ Ngôn Ngữ Shopify Sang Các Tệp Dịch Thuật WordPress
Trước khi bạn bắt đầu xây dựng lại, bạn cần hiểu cách WordPress xử lý nội dung đa ngôn ngữ. Đây là nơi mà hầu hết các hướng dẫn di chuyển đều không đáp ứng được.
Tìm Hiểu Về Hệ Thống Gettext
WordPress sử dụng hệ thống bản địa hóa Gettext. Thay vì lưu trữ bản dịch trong một lớp cơ sở dữ liệu, nó đọc từ các tệp nhị phân tĩnh (các tệp .mo) được biên dịch từ các tệp .po mà con người có thể đọc được.
Một tệp .po trông như thế này:
msgid "Add to Cart"
msgstr "Ajouter au panier"
msgid "Search results for %s"
msgstr "Résultats de recherche pour %s"
Mỗi chủ đề và plugin WordPress đều đi kèm với một tệp mẫu .pot chứa tất cả các chuỗi có thể dịch được. Bạn tạo một tệp .po cho mỗi ngôn ngữ, điền vào các bản dịch, biên dịch nó thành .mo và thả nó vào đúng thư mục.
Đây là hệ thống mà bản dịch Shopify của bạn cần ánh xạ vào.
Vấn Đề Không Khớp Mã Ngôn Ngữ
Shopify sử dụng thẻ ngôn ngữ IETF (en, fr, de). WordPress sử dụng mã địa phương với các biến thể khu vực (fr_FR, de_DE, es_ES). Trong quá trình di chuyển, bạn cần ánh xạ mỗi ngôn ngữ Shopify sang mã địa phương WordPress chính xác. Làm sai điều này có nghĩa là WordPress không thể tìm thấy các tệp dịch của bạn.
Các ánh xạ phổ biến mà mọi người hay gặp phải:
- Shopify
ptánh xạ tới WordPresspt_PT(Bồ Đào Nha) hoặcpt_BR(Brazil) -- không thể hoán đổi cho nhau - Shopify
zh-CNánh xạ tới WordPresszh_CN, nhưng Shopifyzh-TWánh xạ tớizh_TW - Shopify
nb(tiếng Bokmal Na Uy) ánh xạ tới WordPressnb_NO
Đặt tên cho các tệp .po và .mo của bạn bằng mã địa phương WordPress: themename-fr_FR.po, woocommerce-de_DE.mo. Một mã sai có nghĩa là WordPress âm thầm bỏ qua tệp.
Quy Trình Di Chuyển WordPress Đa Ngôn Ngữ Từng Bước
Đây là quy trình cụ thể để bảo toàn bản dịch của bạn trong quá trình di chuyển từ Shopify sang WordPress.
Bước 1: Xuất và Kiểm Tra Bản Dịch Shopify Của Bạn
Trước khi bạn chạm vào WordPress, hãy trích xuất mọi thứ từ Shopify. Sử dụng Shopify Admin API hoặc một công cụ như Shopify Translate CSV Export để kéo bản dịch của bạn vào các tệp có cấu trúc.
# Using Shopify CLI to export translations
shopify app translate export --locale fr
shopify app translate export --locale de
shopify app translate export --locale es
Kiểm tra các bản xuất. Đếm số lượng chuỗi bạn có cho mỗi ngôn ngữ. Xác định bản dịch nào là nội dung sản phẩm (được xử lý bởi CMS hoặc plugin đa ngôn ngữ trên WordPress) so với bản dịch chuỗi chủ đề/UI (được xử lý bởi các tệp .po).
Bước 2: Thiết Lập Cấu Trúc Ngôn Ngữ WordPress và WooCommerce Của Bạn
Trên bản cài đặt WordPress mới của bạn, hãy định cấu hình cơ sở hạ tầng ngôn ngữ của bạn trước khi nhập bất kỳ nội dung nào.
- Chuyển đến Cài đặt > Tổng quan và đặt ngôn ngữ trang web của bạn
- Cài đặt các gói ngôn ngữ cho mỗi ngôn ngữ đích thông qua Cài đặt > Tổng quan > Ngôn ngữ trang web
- Tạo cấu trúc thư mục dịch thuật:
/wp-content/languages/
/wp-content/languages/plugins/
/wp-content/languages/themes/
Đối với bản dịch nội dung sản phẩm (tiêu đề, mô tả), bạn sẽ cần một plugin nội dung đa ngôn ngữ như WPML hoặc Polylang. Nhưng đối với chuỗi UI chủ đề và plugin -- các nút, nhãn, thông báo lỗi và quy trình thanh toán -- bạn muốn các tệp .po/.mo tĩnh. Đây là phương pháp dựa trên đám mây giúp tránh tình trạng plugin phình to.
Bước 3: Chuyển Đổi Bản Dịch Của Bạn Sang Định Dạng PO
Bản dịch chuỗi chủ đề Shopify của bạn cần được chuyển đổi sang định dạng Gettext .po. Đây là nơi quá trình di chuyển trở nên kỹ thuật.
Nếu bản dịch Shopify của bạn ở định dạng JSON hoặc CSV, bạn có thể chuyển đổi chúng sang .po bằng một tập lệnh hoặc công cụ. Điều quan trọng là ánh xạ mỗi chuỗi nguồn sang một cặp msgid/msgstr:
import csv
with open('shopify_translations_fr.csv', 'r') as infile, \
open('theme-fr_FR.po', 'w') as outfile:
outfile.write('msgid ""\nmsgstr ""\n')
outfile.write('"Language: fr_FR\\n"\n\n')
reader = csv.DictReader(infile)
for row in reader:
outfile.write(f'msgid "{row["key"]}"\n')
outfile.write(f'msgstr "{row["translation"]}"\n\n')
Điều này cung cấp cho bạn một điểm khởi đầu, nhưng chủ đề WordPress mới và bản cài đặt WooCommerce của bạn sẽ có hàng trăm chuỗi không tồn tại trong Shopify. Bạn không thể sử dụng lại bản dịch "Thêm vào giỏ hàng" của Shopify cho WooCommerce vì ngữ cảnh mã xung quanh khác nhau. Chuỗi WooCommerce có thể là Add to cart (chữ "c" viết thường) hoặc bao gồm một biến %s cho tên sản phẩm.
Đây là nơi mà hầu hết mọi người bị mắc kẹt. Bạn có bản dịch một phần từ Shopify và một khoảng trống lớn các chuỗi cụ thể của WordPress chưa được dịch.
Làm Thế Nào Để Dịch Những Khoảng Trống Mà Không Cần Bắt Đầu Lại
Tin tốt là: bạn không cần phải dịch 5.000 chuỗi WooCommerce bằng tay. Tin xấu là: bạn cũng không thể bỏ qua chúng, nếu không cửa hàng của bạn sẽ hiển thị một sự kết hợp khó chịu giữa các tiêu đề tiếng Pháp và thông báo lỗi tiếng Anh.
Chuỗi Chủ Đề và Plugin Vẫn Cần Được Dịch
Chủ đề WordPress của bạn có tệp .pot riêng. WooCommerce có tệp .pot riêng. Mọi plugin bạn cài đặt -- cổng thanh toán, máy tính vận chuyển, trình tạo biểu mẫu -- mỗi plugin đều có các chuỗi có thể dịch được. Chúng không tồn tại trong cửa hàng Shopify của bạn.
Cách nhanh nhất là dịch các tệp .po lớn này hàng loạt thay vì từng chuỗi một. Tải tệp .pot của chủ đề của bạn lên, chọn ngôn ngữ đích và để AI xử lý phần việc nặng nhọc.
Dịch Hàng Loạt Các Tệp WooCommerce Lớn
Tệp ngôn ngữ của WooCommerce rất lớn. Với hàng nghìn chuỗi bao gồm mọi thứ từ tin nhắn giỏ hàng đến mã lỗi thuế, đây là nhiệm vụ dịch thuật lớn nhất trong bất kỳ quá trình di chuyển nào. SimplePoTranslate xử lý việc này thông qua Smart Batching -- chia các tệp quá lớn thành các phần an toàn, xử lý chúng song song và hợp nhất kết quả trở lại thành một tệp sạch duy nhất.
Chi tiết quan trọng: các tệp đã dịch của bạn phải bảo toàn mọi biến mã chính xác như nó xuất hiện trong nguồn. Một trình giữ chỗ %s trong một mẫu email WooCommerce không thể có thêm dấu cách hoặc thay đổi vị trí trong quá trình dịch. Đây là nơi khóa cú pháp ngăn các biến bị hỏng không đến được cửa hàng sản xuất của bạn.
Với Multi-Format Output của SimplePoTranslate, bạn nhận được các tệp .po, .mo, .json, .php và .xliff trong một tệp ZIP duy nhất. Điều này đặc biệt hữu ích trong quá trình di chuyển vì các phần khác nhau của ngăn xếp WordPress của bạn có thể sử dụng bản dịch ở các định dạng khác nhau. Chủ đề của bạn đọc các tệp .mo. Giao diện người dùng không đầu có thể cần .json. Một tích hợp tùy chỉnh có thể mong đợi .xliff. Một lần chạy dịch bao gồm tất cả chúng.
Tránh Ba Lỗi Dịch Thuật Di Chuyển Phổ Biến Nhất
Ngay cả với quy trình làm việc phù hợp, vẫn có những cạm bẫy cụ thể đối với việc di chuyển nền tảng mà các nhà phát triển có kinh nghiệm cũng phải cảnh giác.
Các Biến Bị Hỏng Trong Email Giao Dịch
Email giao dịch của WooCommerce dày đặc với các trình giữ chỗ: {order_number}, {customer_name}, %1$s, %2$s. Nếu quy trình dịch thuật của bạn làm hỏng dù chỉ một trong số này, khách hàng sẽ nhận được các email như "Xin chào {customer_name}" theo đúng nghĩa đen, hoặc tệ hơn, các email có dữ liệu bị hoán đổi.
Luôn xác thực các tệp đã dịch của bạn so với .pot nguồn trước khi triển khai. Các công cụ như Poedit sẽ gắn cờ sự không khớp trình giữ chỗ và các trình dịch dựa trên đám mây có khóa cú pháp sẽ loại bỏ hoàn toàn loại lỗi này.
Thiếu Quy Tắc Số Nhiều
Shopify xử lý số nhiều một cách đơn giản. WordPress Gettext hỗ trợ các dạng số nhiều phức tạp khác nhau theo ngôn ngữ. Tiếng Nga có ba dạng số nhiều. Tiếng Ả Rập có sáu. Nếu tệp .po đã dịch của bạn không bao gồm tiêu đề Plural-Forms chính xác và các mục msgstr[0], msgstr[1], msgstr[2] phù hợp, WordPress sẽ quay lại chuỗi chưa được dịch.
# Correct Russian plural forms header
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : "
"n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
msgid "%s item"
msgid_plural "%s items"
msgstr[0] "%s товар"
msgstr[1] "%s товара"
msgstr[2] "%s товаров"
Đây là điều mà Shopify chưa bao giờ yêu cầu bạn phải nghĩ đến. Trên WordPress, nó rất quan trọng.
Các Chuỗi Mồ Côi Sau Khi Hoán Đổi Plugin
Khi bạn di chuyển từ Shopify, bạn không chỉ thay đổi nền tảng. Bạn đang thay thế toàn bộ hệ sinh thái plugin. Cổng thanh toán Shopify của bạn trở thành WooCommerce Payments hoặc Stripe for WooCommerce. Hệ thống đánh giá của bạn trở thành một plugin WordPress. Mỗi lần hoán đổi giới thiệu các chuỗi có thể dịch mới và làm cho các bản dịch cũ trở nên lỗi thời.
Xây dựng một danh sách kiểm tra cho mọi plugin bạn cài đặt sau khi di chuyển và xác minh rằng mỗi plugin đều có tệp .mo đã dịch tương ứng trong /wp-content/languages/plugins/. Ngay cả khi thiếu một plugin, khách hàng của bạn cũng sẽ thấy các chuỗi tiếng Anh ở giữa một giao diện đã được dịch.
Khởi Chạy Cửa Hàng Đa Ngôn Ngữ Của Bạn Trên WordPress
Việc di chuyển WordPress đa ngôn ngữ không chỉ là chuyển dữ liệu. Đó là việc tái cấu trúc cách cửa hàng của bạn giao tiếp với khách hàng quốc tế. Các cửa hàng làm đúng điều này sẽ thấy tỷ lệ chuyển đổi cao hơn ở các thị trường không phải tiếng Anh vì trải nghiệm mang lại cảm giác bản địa hơn là chắp vá.
Quy trình làm việc rất đơn giản: xuất bản dịch Shopify của bạn, ánh xạ chúng sang mã địa phương WordPress, chuyển đổi sang định dạng .po, lấp đầy khoảng trống bằng bản dịch AI hàng loạt, xác thực các biến của bạn và triển khai các tệp .mo tĩnh. Không làm phình cơ sở dữ liệu. Không có chi phí dịch thuật thời gian chạy. Chỉ là thương mại đa ngôn ngữ nhanh chóng, đáng tin cậy.
Nếu bạn đang đối mặt với quá trình di chuyển với hàng nghìn chuỗi WooCommerce chưa được dịch, phương pháp tiếp cận bản địa hóa tệp lớn của SimplePoTranslate có thể giúp bạn tiết kiệm hàng tuần làm việc thủ công.
Bạn đã sẵn sàng dịch cửa hàng WooCommerce của mình sau khi di chuyển? Dùng thử SimplePoTranslate miễn phí -- không cần thẻ tín dụng. Tải tệp .pot của bạn lên và nhận bản dịch sẵn sàng cho sản xuất trong vài phút.