AumCreate

AumLang

WordPress 的 AI 翻譯。加好需要的語言,在頁面上按下 Translate,AumLang 會寫出一份 翻譯副本、給它自己的網址,並維持兩者之間的連結。

本指南寫給已經安裝 AumLang 的人。以下所有內容都在 WordPress 後台的 AumLang 底下。

AumLang 的後台在每個站上都是英文。 它的介面翻譯還沒發布,所以無論 WordPress 設定成哪一種語言,看到的都是此處引用的這些英文標籤。

1. AumLang 是怎麼運作的

在 AumLang 裡,一份翻譯就是一篇真的文章。把一個英文頁面翻成日文,會產生一篇日文 文章,有自己的 ID、自己在 /ja/ 底下的網址,以及文章列表裡自己的一行。它可以打開、 可以手動編輯,平常對一篇文章做的每一件事都能對它做。

這件事有三個值得先知道的後果:

  • 原文永遠不會被改動。 翻譯是往上加,不是改寫。
  • 對翻譯做的編輯會留下來。 AumLang 把它翻過的每一段文字分開存放,所以重新翻譯 只會蓋掉它自己寫的那些。
  • 刪掉一份翻譯就是刪掉一篇文章。 它跟其他文章一樣進回收桶。
The posts list, with a translation sitting beside its original

AumLang 不是把整頁當成一整塊文字去翻。它會把內容拆成一個個片段 —— 一個段落、一個 標題、一個表格儲存格、頁面建構器短代碼裡的文字 —— 逐段翻譯,再放回原位。這就是版面 能保住的原因,也是這個外掛對頁面建構器有自己一套看法的原因(見第 9 節)。

2. 設定

2.1 Languages

AumLang → Languages。 一種語言一行:代碼、地區設定、顯示名稱、網址代稱,以及 它是不是預設語言。

預設語言就是現有內容本來的那一種。AumLang 不會動它,也不會在它的網址上加前綴 —— 除非明確要求。

其餘每一種語言都會從它的代稱得到一個網址前綴:/ja/、/de/、/zh-hans/。

2.2 Translation provider

AumLang → Translation provider。 挑一家供應商、貼上 API 金鑰、選一個模型。 Test connection 會在真的花錢翻一個頁面之前先確認金鑰可用; Test reachability of all providers 則會列出這台伺服器到底連得上哪幾家 —— 主機封鎖對外請求時特別有用。

翻譯要花錢,而且是向供應商付,不是向我們付。 AumLang 不會自己發起任何一次呼叫; 每一次呼叫都始於一個被按下的按鈕。

The settings screen: languages, provider and translatable content

2.3 Translatable content

設定畫面上有三份清單:

  • Post types —— 哪些文章類型會出現 Translate 按鈕。
  • Taxonomies —— 哪些分類法的項目會被翻譯。
  • Custom fields —— 哪些 meta 鍵會隨內容一起被翻譯。

自訂欄位那份清單對用頁面建構器或自訂欄位外掛做的站特別重要,因為很多看得見的文字 其實住在 meta 裡,不在文章內容裡。AumLang 會讀取佈景主題和已啟用外掛隨附的 wpml-config.xml,把它們宣告的欄位收進來,所以對許多站來說,這份清單不必手動調整 就已經是對的。

3. 翻譯一個頁面

打開任何一篇可翻譯類型的文章。編輯器裡有一個 AumLang Translations 區塊, 列出每一種非預設語言,各帶一個狀態和一個按鈕。

標記意思按鈕
Not translated從來沒翻過。Translate
Machine翻過了,但沒人校閱。Re-translate
Reviewed有人標記為已校閱。Re-translate
Outdated原文在那之後被編輯過。Update
Incomplete翻過了,但頁面上有一部分從來沒被翻譯過。區塊裡會寫出有幾段。Translate the rest

按下按鈕,區塊會回報進度。翻譯是分輪跑的,每一輪的大小都控制在伺服器允許的時間裡 綽綽有餘 —— 所以一個長頁面會跑好幾輪,而不是發一個長請求讓伺服器中途切斷。

The AumLang Translations box, showing Machine, Not translated and Incomplete side by side

3.1 一次翻很多篇

一次一篇,幾篇是沒問題的。一個二十個頁面、五種語言的站,那是一百次 —— 所以還有第二條路。

在 Posts 或 Pages 列表裡勾選要翻的那幾行,打開 Bulk actions,選 AumLang: translate into … 裡的那個語言。一次一種語言。

按下 Apply 不會開始任何事。 它打開一個畫面,寫明這幾篇裡真的會被送出去幾篇、 已經有譯文因此不動的有幾篇、以及翻成哪一種語言。按鈕在那一個畫面上 —— 因為這一步才是花錢的那一步。

已經有譯文的會被跳過,不會重翻,連譯文已經過期的也一樣跳過。 勾選幾行這個動作本身沒有任何地方表示「已經翻好的那些再花一次錢」, 而真要是那樣,你是在帳單上才會發現。要重翻某一篇,打開它用編輯器裡那個按鈕 —— 那個按鈕會在動手之前先說它要做什麼。

關掉頁面它照樣跑,回來的時候進度畫面會接上。Stop 會把手上這一篇做完才停, 已經完成的全部留著。

3.2 「Incomplete」是什麼意思

一個頁面可以讀起來像已經翻好了,裡面卻還有從未被送出去的文字。

常見的原因是 AumLang 變得比以前看得見這個頁面的更多部分 —— 某次外掛更新讓它學會讀 一種新的內容。而更新外掛本身不會重新翻譯任何東西,因為那等於不問一聲就花掉額度。 所以頁面維持原樣,Incomplete 就是 AumLang 用來說「這裡還有事沒做完」的方式, 並附上還差幾段。

區塊會把這句話說清楚 —— 「5 pieces of this page have never been translated.」 按下 Translate the rest 只會送出那幾段。已經翻好的文字不會再送一次,也不會再付 一次錢;缺口補完之後,那句提示會自己消失。

4. 語言切換器

AumLang → Switcher。

  • Floating switcher —— 固定在畫面某個角落的小控制項。位置和標籤樣式在這裡設。
  • Add to menu location —— AumLang 會把語言附加到指定的選單上,也可以放在指定的 上層項目底下。
  • Place it manually —— 短代碼 [aumlang_switcher],哪裡都能放。 [aumlang_language_switcher] 是同一個東西的長名字。

標籤樣式決定每一種語言顯示的是名稱、代碼,還是兩者都顯示。

The Switcher screen

5. Strings

AumLang → Strings。 頁面內容只是一個網站的一部分。佈景主題和外掛也會印出自己的 文字 —— 「Read more」、「Add to cart」、一個小工具的標題。

AumLang 會收集這些字串,列在這一頁等著翻譯。Discovery mode 決定它是否持續盯著 前台找新的字串。建站期間讓它開著,之後關掉:每一次頁面瀏覽都要為探索付出一點代價, 而清單一旦收齊,它也就沒有什麼可找的了。

有些站上的文字住在資料庫裡而不是程式碼裡 —— 自己打的選單標籤、小工具裡的文字、 佈景主題存在自己設定裡的文字。這些永遠不會經過上面那套機制,所以 AumLang 會另外 收集它們,並在翻譯頁面的同時一併補上。沒有額外要按的東西。

小工具是一個欄位一個欄位讀的,不管它是誰寫的。WordPress 給外掛提供了一個標準做法 來讓小工具標題被翻譯,但用不用是自願的,而且有不少小工具只是把存著的值直接印出來。 AumLang 改成在 WordPress 即將畫出那個小工具之前,直接讀它存下來的欄位 —— 所以一個從來沒提供過這條路的小工具,照樣覆蓋得到。網址、圖示名稱、CSS 類別、 email 和電話號碼會被放過:翻譯這些動到的是小工具的接線,不是它的字。

The Strings screen

6. Glossary

AumLang → Glossary。 專門放那些必須固定譯成某個樣子的詞:產品名稱、型號,以及 某個業界吵個不停的詞在這裡的統一譯法。

每一筆由四樣東西構成:原詞、目標語言、譯法,以及比對時是否區分大小寫。詞彙表會套用 到那個語言的每一次翻譯,所以一筆設定就能在全站修好一個詞,不必一頁一頁改。

它是用來處理「翻譯者會譯錯的東西」,不是用來處理它本來就譯對的東西。

The Glossary screen

7. Review

AumLang → Review。 列出還沒有人檢查過的機器翻譯。勾選已經讀過的那些,按 Mark selected as reviewed。

這不會改變頁面上的任何東西。它是一份「某個人看過哪些」的記錄,好讓第二個人知道從哪裡 接著看。

The Review screen

8. Diagnostics

AumLang → Diagnostics。 在 Why translation fails here 底下,Run the check 會量兩件事 —— 幾乎所有失敗都由它們解釋:伺服器允許一個請求跑多久,以及向供應商發一次 呼叫要花多久。然後它會報告「一輪再加一次呼叫」是否還塞得進那個上限。

Copy the report 會把整份報告給成純文字。裡面永遠不含 API 金鑰。

The Diagnostics screen

如果翻譯失敗、而報告說時間沒問題,請把報告寄給我們 —— 那正是「原因在我們這邊、需要我們 看一眼」的情況。

9. 頁面建構器

AumLang 能直接讀取 Gutenberg、經典編輯器和 Elementor 的內容,另外也能讀取任何把文字 存在短代碼屬性裡的建構器 —— 剩下的大多數都屬於這一類。

有兩樣東西它刻意不翻:

  • 版面標記。 [row]、[column]、一個色值、一個 CSS 類別。把這些送去翻,最輕是 浪費錢,最重是把頁面弄壞。
  • 不是文句的值。 網址、ID、零件編號、十六進位色碼。

「版面」和「文字」之間那條線是按形狀畫的,不是按一份建構器名單畫的,所以一個我們 從沒見過的建構器通常也能運作。至於用 wpml-config.xml 描述自己內容的建構器, 它讀得一字不差。

如果一個頁面翻完看起來沒變,結果訊息會說清楚是哪一種:那個頁面幾乎全是建構器 標記、AumLang 選擇跳過它而不是把它弄花,或者那個頁面裡本來就沒有可翻的東西。

9.1 其實是一個頁面的頁首與頁尾

以建構器為主的佈景主題,常把頁首、頁尾,或是全站重複出現的某個區塊,存成一個普通 頁面,再在每一次請求裡把它取進來。這樣的頁面在這裡和別的頁面沒有兩樣:它會出現在 「頁面」列表裡、有自己的翻譯狀態,翻法也完全一樣。

翻一次,全站每一個頁面都會顯示譯文 —— 連還沒翻的頁面也一樣,因為那個區塊本來就 不屬於它們的內文。

如果分不出頁尾是哪一個頁面,打開前台、在頁尾附近找一個 Edit Footer 之類的控制項: 用這種方式組頁尾的佈景主題幾乎都會放一個,而它指向的就是那個頁面。

10. 網址與連結

每一種語言住在自己的前綴底下。預設語言保持它原來就有的網址。

翻譯內容裡那些指向本站頁面的連結,會在輸出時改寫成指向那個頁面的對應翻譯 —— 前提是翻譯存在。讀者從一個日文頁面點出去,會落在另一個日文頁面上,而不是被丟回英文。 這件事發生在輸出那一刻;資料庫裡存的內容保留原本的連結。

11. 設定一覽

畫面設定預設值
LanguagesDefault language現有內容的語言
LanguagesPrefix on the default language關
Translatable contentPost typesPosts 和 Pages
Translatable contentTaxonomies無
Translatable contentCustom fields讀 wpml-config.xml
SwitcherFloating switcher關
SwitcherLabel styleName
StringsDiscovery mode開
GeneralDelete data on uninstall關

12. 疑難排解

翻譯跑到一半出現伺服器錯誤。 是伺服器把請求切斷了。跑一次 Diagnostics(第 8 節) —— 它量的正是這件事。再按一次 Translate 會從停下的地方接著跑,已經翻好的部分不會 付第二次錢。

頁面說翻完了,但看起來沒變。 要嘛那個頁面幾乎全是建構器標記(第 9 節),要嘛它 標著 Incomplete、還有文字沒翻 —— 見 3.1。

頁面一部分翻了、一部分沒翻。 表格以及其他存在建構器短代碼屬性裡的內容,在 1.4.2 版之前讀不到。更新之後按 Translate the rest。

選單只翻了一半。 自己打的選單標籤在 1.5.0 版之前不會被翻譯。更新之後翻任何一個 頁面 —— 那些標籤會隨之一併補上。

翻譯頁面上的某個連結回到了原文語言。 那個頁面還沒有翻譯。連結只在翻譯存在的地方 才會被改寫。

一個產品代碼被翻掉了。 把它加進 Glossary(第 6 節),譯法就填它自己。

按下 Translate 沒有任何反應。 沒有設定供應商,或者金鑰不對。用 2.2 節的 Test connection。