AumCreate

.pot、.po、.mo:WordPress 的語言檔是什麼,怎麼翻

· 2026年9月23日 對照真實介面核對

佈景主題或外掛隨包發一個 .pot 檔:裡面是所有可翻譯的字串,沒有譯文。您按自己的語言複製一份成 .po 並填上譯文,然後把這個 .po 編譯成 .mo,因為 WordPress 執行時讀的是 .mo,只有 .po 的話網站上一個字都不會變。

如果您填好的譯文沒生效,答案幾乎總在這一頁的最後兩節:要麼沒編譯,要麼檔名不對。

三個檔案,各一句話

  • .pot,範本。佈景主題或外掛裡所有可翻譯的字串,譯文是空的。開發者從原始碼產生,您不改它,您複製它。
  • .po,某一種語言。純文字,每條原文下面是您的譯文。您實際做事的就是這個檔案。
  • .mo,.po 的編譯產物。二進位,不是給人讀的。WordPress 載入的是它。

WordPress 6.5 起還有第四種:.l10n.php,載入更快,存在時優先用它,.mo 墊底。您不需要自己產生它:WordPress 會產生,但它能解釋您為什麼會看到一個自己沒放過的檔案。

從 .pot 到網站上真的生效,四步

  1. 找到 .pot。它一般在外掛或佈景主題目錄下的 languages/ 裡。
  2. 按下一節的命名規則,複製一份改成您那種語言的 .po
  3. 翻裡面的條目,在 PO 編輯器裡一條條翻,或者批次翻。每一個佔位符都要跟原文一模一樣。
  4. 把 .po 編譯成 .mo,兩個檔案都放到 WordPress 會找的地方。沒裝 gettext 的話,瀏覽器裡就能編譯

檔案大的話,一條條手翻才是要花幾天的那一步。PO / POT 翻譯工具一次把整個檔案翻完、匯回同一個格式;它只送字串,檔案不上傳。

檔名不是細節,它就是全部

WordPress 是按 {文字域}-{locale}.mo 去找檔案的。名字錯一個字,這個檔案對 WordPress 來說就是不存在:它靜默退回英文。不報錯、不提示、沒有任何線索。這是一份翻好的檔案什麼都沒做的頭號原因。

  • 文字域是外掛或佈景主題自己的:woocommercetwentytwentyfivemy-cool-plugin。它宣告在外掛標頭,不一定等於資料夾名
  • locale 是 WordPress 的那一套,不是兩位語言碼。繁體中文是 zh_TW、英語 en_US、法語 fr_FR;但日語是 ja、阿拉伯語 ar、芬蘭語 fi,一個地區碼都沒有。
  • 原始檔本身已經帶了 locale 的(woocommerce-en_US.po),要先把它剪掉再接新的,否則拼出 woocommerce-en_US-zh_TW.mo,誰也比對不上。

檔案放哪裡

兩個地方都能用,差別在外掛更新的時候。

  • wp-content/languages/plugins/wp-content/languages/themes/用這兩個。 WordPress 先查這裡,而且外掛或佈景主題更新覆蓋不到您的檔案。
  • 外掛或佈景主題自己的 languages/ 目錄,也能用,但下次更新會把整個目錄換掉,您的譯文就沒了。

譯文看著沒問題卻不生效,按這個順序查

  1. 到底有沒有 .mo?只有一個 .po 什麼都不會發生。這條先排掉。
  2. 檔名是不是嚴格{文字域}-{locale}.mo?文字域去外掛標頭看,locale 對照 WordPress 自己那張表。
  3. 網站語言是不是真的設成了那種語言(設定 → 一般)?
  4. 檔案在不在 wp-content/languages/…?如果只放在外掛目錄裡、而外掛更新過,它已經沒了。
  5. 還是沒有:清物件快取和頁面快取。翻譯每個請求只載入一次,而且快取得很兇。

佔位符:唯一一個不能含糊的地方

顯示 %1$s 筆,共 %2$s 筆 這種字串裡帶著 PHP 要往裡填的佔位符。譯文如果掉了一個、或者沒用帶編號的形式就調換了順序、或者把 %s 打成了全形的 %s,那不是顯示問題,是真實頁面上的執行階段錯誤。檔案發出去之前先查佔位符;好一點的編譯工具會替您標出來。

常見問題

我直接傳 .po 檔不行嗎?
不行。WordPress 讀的是 `.mo`(6.5 起還有 `.l10n.php`),從來不讀 `.po`。把 `.po` 放進 languages 目錄,網站上一個字都不會變:這就是它坑住這麼多人的原因:什麼都沒壞、什麼都沒報,網站還是英文的。
我必須裝 gettext 或者 Poedit 嗎?
編譯這一步不用。瀏覽器裡就能把 .po 變成 .mo,什麼都不用裝:[我們這個是在本機轉的](/tools/po-compiler?utm_source=guide&utm_medium=tutorial&utm_campaign=po-files),檔案不離開您的電腦。要一條條仔細改的話,桌面版 PO 編輯器仍然更好用。
.pot 裡沒有的那些字串怎麼辦?
它們在原始碼裡就沒有被標成可翻譯的,所以任何語言檔都構不著它們。那要改佈景主題或外掛本身,不是一個語言檔能解決的。而您自己寫的內容:頁面、商品、文章:又是另一回事,那需要一個多語言外掛,不是 .po 檔。
佈景主題翻好了,外掛還是英文,為什麼?
每個佈景主題和外掛都有自己的文字域和自己的語言檔,翻好一個對其他的毫無影響。網站語言如果是 WordPress 支援的,很多外掛會自動從 translate.wordpress.org 拿到譯文;剩下的缺口通常是商業外掛,沒有人替您翻過它們。

這篇教學裡的外掛

AumLang翻譯 Elementor、Gutenberg 與 WooCommerce 的內容而不破壞版面,同時把 SEO 那一半做對:每種語言一個網址、hreflang、canonical、網站地圖。外掛頁面