AumCreate

AumLang

给 WordPress 用的 AI 翻译。加上你要的语言,在页面上按一下 Translate,AumLang 就会 写出一份译文、给它自己的网址,并把两者之间的链接维护好。

这篇是给已经装好 AumLang 的人看的。下面所有东西都在 WordPress 后台的 AumLang 里。

界面是英文的,本文里的按钮名也保持英文。 AumLang 目前没有发布简体中文语言包, 所以中文站的后台里这些名字就是英文原文。本文照原样写出来,你照着找得到; 译成中文反而会让你在界面上找不到那一项。

1. AumLang 是怎么工作的

一份译文就是一篇真正的文章。 把英文页面译成日文,会生成一篇日文文章:它有自己的 ID、自己在 /ja/ 下的网址、在文章列表里自己的一行。你可以打开它、手工改它, 平时对文章做的任何事对它都成立。

这带来三个值得先知道的后果:

  • 原文永远不会被改动。 翻译只做加法。
  • 你对译文的手工修改会留下来。 AumLang 把译过的每一小段分开存,所以重新翻译 只替换它自己写的那些。
  • 删译文就是删一篇文章。 和别的文章一样进回收站。
文章列表,译文和原文并排

AumLang 不会把整页当成一大块文字去翻。它把内容拆成一小段一小段 —— 一个段落、 一个标题、一个表格单元格、页面构建器短代码属性里的那句文案 —— 逐段翻译,再放回原位。 版面之所以不乱,是因为这个;插件对页面构建器有那么多讲究,也是因为这个(见第 9 节)。

2. 设置

2.1 Languages(语言)

AumLang → Languages. 一种语言一行:代码、locale、显示名、网址 slug、是不是默认。

默认语言就是你现有内容本来的语言。AumLang 不碰它,也不给它的网址加前缀 —— 除非你要求。

其余每种语言都按它的 slug 得到一个网址前缀:/ja/、/de/、/zh-hans/。

2.2 Translation provider(翻译服务商)

AumLang → Translation provider. 选服务商、粘贴 API 密钥、选模型。 Test connection 在你真的花钱翻一页之前先确认密钥能用; Test reachability of all providers 告诉你这台服务器到底连得上哪几家 —— 主机封了外连时就靠它。

⚠️ 翻译要花钱,由你的服务商计费,不是我们收。 AumLang 不会自己发起调用, 每一次都是你按了按钮。

设置页:语言、服务商、可翻内容

2.3 Translatable content(哪些内容可翻)

设置页上的三张表:

  • Post types —— 哪些文章类型会出现 Translate 按钮。
  • Taxonomies —— 哪些分类法的词条会被翻译。
  • Custom fields —— 哪些自定义字段跟着正文一起翻。

自定义字段那张表对用页面构建器或自定义字段插件搭的站特别要紧,因为很多看得见的 文字其实存在字段里,不在正文里。AumLang 会去读你的主题和已启用插件自带的 wpml-config.xml,把它们声明的字段收进来 —— 所以很多站这张表不用你动就已经是对的。

3. 翻译一个页面

打开任何一篇可翻译类型的文章,编辑器里会有一个 AumLang Translations 框, 列出每种非默认语言的状态和按钮。

徽标含义按钮
Not translated从没翻过。Translate
Machine翻过了,没人校对。Re-translate
Reviewed有人标记为已校对。Re-translate
Outdated你在那之后改过原文。Update
Incomplete翻过了,但这一页有一部分从来没被翻译过。框里会写还差多少条。Translate the rest

按下按钮,框里会报进度。翻译分轮进行,每一轮的大小都控制在你服务器允许的时间之内 —— 所以长页面是跑好几轮,而不是一个长请求被服务器掐断。

AumLang Translations 框:Machine、Not translated、Incomplete 三种状态并排

3.1 一次翻很多篇

一次一篇,几篇还行。一个 20 个页面、5 种语言的站就是 100 次,所以有第二条路。

在「文章」或「页面」列表里勾上你要的行,打开 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 —— 把语言追加到你选的某个菜单里,可以再指定一个父项名字。
  • Place it manually —— 短代码 [aumlang_switcher],放哪都行。 [aumlang_language_switcher] 是同一个东西的长名字。

Label style 决定每种语言显示成名字、代码,还是两者都有。

Switcher 页

5. Strings(界面字符串)

AumLang → Strings. 页面正文只是站的一部分。主题和插件自己也会输出文字 —— 「阅读更多」、「加入购物车」、一个小工具的标题。

AumLang 把这些字符串收集起来列在这里供翻译。Discovery mode 控制它要不要继续 盯着前台找新的。建站期间开着,之后关掉 —— 发现机制在每次页面访问时都有一点开销, 而列表收全之后它也没什么可找的了。

还有一类站点文字是存在数据库里而不是代码里的 —— 你自己手打的菜单标签、小工具 里的文字、主题设置里填的文案。它们从不经过上面那套机制,所以 AumLang 单独采集, 并在你翻译页面时顺带填上。你不用额外点任何东西。

小工具是逐字段读的,不管它是谁写的。WordPress 给插件提供了一个标准接口来翻译 小工具标题,但用不用是各家自愿的,而相当多的小工具只是把存着的值直接输出。 AumLang 改为在 WordPress 即将画出这个小工具之前直接读它存的字段,所以一个 从不配合的小工具也照样覆盖得到。网址、图标名、CSS 类名、邮箱和电话号码会跳过 —— 翻译这些改的是小工具的接线,不是它的措辞。

Strings 页

6. Glossary(术语表)

AumLang → Glossary. 那些必须固定译法的词:产品名、型号、你这行里有争议的某个词 在你们家的标准译法。

一条记录是:原词、目标语言、译文、是否区分大小写。术语表会作用于该语言的每一次翻译, 所以一条记录修的是全站,而不是一页一页去改。

用它来修翻译器会译错的东西,不要用它去管翻译器本来就译对的东西。

Glossary 页

7. Review(校对)

AumLang → Review. 列出还没有人看过的机器译文。勾上你已经读过的,按 Mark selected as reviewed。

这不改变页面上的任何东西。它是一条「有人看过了」的记录,好让第二个人知道从哪接着看。

Review 页

8. Diagnostics(诊断)

AumLang → Diagnostics. 在 Why translation fails here 下面按 Run the check, 它会量两件几乎能解释所有失败的事:这台服务器允许一个请求跑多久, 以及一次调用服务商要多久。然后告诉你「一轮加上再一次调用」还塞不塞得进那个上限。

Copy the report 把整份报告复制成文字。它从不包含你的 API 密钥。

Diagnostics 页

如果翻译失败而报告说时间没问题,把报告发给我们 —— 那恰恰是原因需要我们看一眼的情况。

9. 页面构建器

AumLang 直接读 Gutenberg、经典编辑器和 Elementor 的内容,另外还能读任何 把文案存在短代码属性里的构建器 —— 剩下的大部分都属于这一类。

有两样它故意不翻:

  • 版面标记。 [row]、[column]、一个颜色值、一个 CSS 类名。把这些送去翻译, 好一点是白花钱,坏一点是把页面弄坏。
  • 不是正文的值。 网址、ID、型号、十六进制颜色。

「版面」和「文字」之间那条线是按形状画的,不是按构建器名单画的 —— 所以一个我们 从没见过的构建器大体上也能用。而用 wpml-config.xml 描述了自己内容的构建器, 读得最准。

如果一个页面翻完之后看上去没变,结果消息会告诉你是哪一种:这一页几乎全是构建器 标记,AumLang 宁可跳过也不把它弄坏;或者这一页里本来就没有可翻的东西。

9.1 页头、页脚其实是一个页面

用构建器的主题常常把页头、页脚、或者整站重复出现的区块存成一个普通页面, 再在每次请求时取进来。这样的页面在这里和别的页面没有区别:它出现在你的「页面」 列表里,有自己的翻译状态,翻法也一样。

翻一次,整站都会显示译文 —— 包括你还没翻的那些页面,因为这个区块本来就不属于 它们的正文。

如果你不确定页脚是哪一个页面,打开站点,在页脚附近找一个 Edit Footer 之类的 按钮 —— 用这种方式做页脚的主题几乎都会放一个,它指向的就是那个页面。

10. 网址和链接

每种语言在自己的前缀下。默认语言的网址保持原样。

译文内容里指向你自己站内页面的链接,会在显示时被改写成那个页面的译文(如果存在)。 读者从日文页面点一个链接,落到的是另一个日文页面,而不是被扔回英文。 这发生在输出的时候,你存在库里的内容保留着原来的链接。

11. 设置速查

界面设置默认
Languages默认语言你现有内容的语言
Languages默认语言加前缀关
Translatable contentPost typesPosts 和 Pages
Translatable contentTaxonomies无
Translatable contentCustom fields来自 wpml-config.xml
SwitcherFloating switcher关
SwitcherLabel style名字
StringsDiscovery mode开
General卸载时删除数据关

12. 遇到问题

翻到一半报服务器错误。 是你的服务器把请求掐断了。跑第 8 节的 Diagnostics —— 它量的就是这个。再按一次 Translate 会从断的地方接着跑,已经翻好的不会重复收费。

页面说翻完了,但看上去没变。 要么这一页几乎全是构建器标记(第 9 节), 要么它显示的是 Incomplete、还有文字没翻 —— 见第 3.1 节。

一部分翻了,一部分没翻。 存在构建器短代码属性里的表格之类内容,1.4.2 之前读不到。 升级,然后按 Translate the rest。

菜单只翻了一半。 你自己手打的菜单标签在 1.5.0 之前翻不了。升级,然后随便翻一个 页面 —— 这些标签会跟着一起补上。

译文页面上的链接跳回了原语言。 那个页面还没有译文。只有存在译文的链接才会被改写。

一个型号被翻掉了。 把它加进第 6 节的 Glossary,译文填它自己。

按 Translate 没反应。 没配服务商,或者密钥不对。用第 2.2 节的 Test connection。