問題現象

網站原本環境:

  • WordPress 6.6.7
  • WooCommerce 8.8.5
  • PHP 8.1
  • 網站語系:zh_TW

WordPress 從 6.6.7 升級至 7.0.4 後,WooCommerce 前台開始顯示英文。

例如:

Cart
Checkout
Add to cart
View cart

但 Loco Translate 裡的繁體中文翻譯仍然存在,而且完成度為 100%。

根本原因

WordPress 核心翻譯機制有變更

新版 WordPress 翻譯載入機制 + 舊版 WooCommerce 8.8.5 翻譯程式邏輯產生相容性問題。

WordPress 6.7 之後調整了外掛翻譯的載入方式,更依賴 Just-In-Time(JIT)翻譯載入機制。

因此升級:

WordPress 6.6.7
↓
WordPress 7.0.4

之後,舊外掛如果使用較舊的翻譯載入/卸載方式,就可能發生翻譯無法重新載入的情況。

所以:WordPress 核心不是「翻譯壞掉」,而是翻譯機制改變了。

WooCommerce 8.8.5 有舊版程式寫法

WooCommerce 8.8.5 的:

woocommerce/includes/class-woocommerce.php

裡面有:

unload_textdomain( 'woocommerce' );

因為沒有指定第二個參數,所以等同:

unload_textdomain( 'woocommerce', false );

這會讓 WordPress 將 WooCommerce 翻譯標記為:

不可自動重新載入

實際檢查網站時發現:

l10n class: NOOP_Translations
l10n_unloaded: YES

也就是:

WooCommerce 卸載翻譯
↓
WordPress 將 woocommerce 標記為 unloaded
↓
新版 JIT 翻譯機制不再重新載入
↓
WooCommerce 中文翻譯檔雖然存在
↓
前台仍然輸出英文

最後確認 WooCommerce 程式問題

將 WooCommerce 8.8.5:

unload_textdomain( 'woocommerce' );

暫時修改成:

unload_textdomain( 'woocommerce', true );

重新測試後:

Class: WP_Translations
Unloaded: NO

Cart => 購物車
Checkout => 結帳
Add to cart => 加入購物車
View cart => 查看購物車

中文翻譯立即恢復。

因此可以確認根本原因。

問題責任

WordPress 6.7+ 修改了翻譯載入機制。

舊版程式原本可以運作的翻譯處理方式,在新版 WordPress 下變得不相容。

真正觸發問題的是舊版 WooCommerce 8.8.5:

unload_textdomain( 'woocommerce' );

它將 WooCommerce 翻譯設定成不可重新載入。

新版 WooCommerce 已改成類似:

unload_textdomain( 'woocommerce', true );

讓翻譯可以重新載入。

總結

WordPress 6.7+ 改變翻譯載入機制,而舊版 WooCommerce 8.8.5 使用 unload_textdomain('woocommerce') 將翻譯標記為不可重新載入

兩者產生相容性問題,導致 WordPress 7.0.4 升級後 WooCommerce 繁中翻譯檔雖然存在,前台卻只顯示英文。

解決方向

升級 WooCommerce 至已修正新版翻譯載入相容性的版本,不建議永久修改 WooCommerce 核心檔案。

目前至少需要9.9.4版本

最後修改日期: 2026 年 8 月 20 日

作者