如何在 WordPress 中翻译 RTL 语言:阿拉伯语、希伯来语、波斯语

您刚刚完成了将 WordPress 主题翻译成阿拉伯语。您上传了 .mo 文件,切换了站点语言,但结果却无法辨认。文本溢出到左侧,按钮重叠,您精心设计的布局看起来像是被碎纸机处理过一样。
欢迎来到从右到左 (RTL) 语言的世界——在这里,翻译只是成功的一半。
阿拉伯语、希伯来语和波斯语(波斯语)是世界上使用最广泛的语言之一。仅阿拉伯语就有超过 4 亿母语使用者。如果您的 WordPress 网站忽略了这些受众,您将会损失惨重的收益。但是,为他们提供服务不仅仅是将英语单词换成阿拉伯语单词,还需要重新思考您的整个布局方向。
本指南涵盖了您需要了解的一切:RTL 在 WordPress 中的工作方式、如何修复 CSS、如何处理包含 RTL 字符串的 .po 文件,以及如何避免最常见的陷阱。
RTL 在 WordPress 中的工作方式
WordPress 具有内置的 RTL 支持。当您将站点语言设置为阿拉伯语 (ar)、希伯来语 (he) 或波斯语 (fa) 时,WordPress 会自动将 dir="rtl" 添加到 <html> 标签,并在您的主题提供 rtl.css 样式表时加载它。
这是理论上的。在实践中,大多数主题都只提供最少或损坏的 RTL 支持。
实际发生了什么变化
当 RTL 模式激活时,浏览器会镜像整个页面布局:
- 文本从右向左流动。
- 侧边栏交换位置。
- 导航菜单反转顺序。
- 内边距和外边距值翻转(左变为右)。
- 具有方向意义的图标(箭头、V 形)需要镜像。
如果您的主题的 CSS 仅为 LTR 编写,则每个 margin-left、padding-right、float: left 和 text-align: left 声明现在都在与浏览器的 RTL 引擎作斗争。
修复 RTL 的 CSS:实用指南
最简洁的方法是使用 CSS 逻辑属性,它可以自动适应文档的书写方向。您可以使用 inline-start 和 inline-end,而不是 left 和 right。
之前:物理属性(在 RTL 中会中断)
/* LTR-only CSS -- breaks in Arabic */
.sidebar {
float: left;
margin-right: 20px;
}
.nav-arrow {
padding-left: 10px;
text-align: left;
}
.card {
border-left: 3px solid #0073aa;
}
之后:逻辑属性(在两个方向上都有效)
/* Direction-agnostic CSS -- works in both LTR and RTL */
.sidebar {
float: inline-start;
margin-inline-end: 20px;
}
.nav-arrow {
padding-inline-start: 10px;
text-align: start;
}
.card {
border-inline-start: 3px solid #0073aa;
}
通过逻辑属性,您只需编写一次 CSS,它就可以在英语和阿拉伯语中正常工作,而无需任何覆盖。
[dir="rtl"] 覆盖方法
如果您无法重构整个样式表,则可以使用属性选择器专门针对 RTL:
[dir="rtl"] .sidebar {
float: right;
margin-left: 20px;
margin-right: 0;
}
[dir="rtl"] .nav-arrow {
padding-left: 0;
padding-right: 10px;
text-align: right;
}
这可行,但会使您的维护负担加倍。每次更新 LTR 样式时,您还必须更新 RTL 覆盖。
翻译带有 RTL 字符串的 PO 文件
翻译本身带来了超越布局的挑战。RTL 语言具有独特的特征,这些特征会使大多数自动化工具出错。
PO 文件中的双向文本 (Bidi)
当 RTL 和 LTR 文本混合在单个字符串中时,真正的复杂性就出现了。考虑以下常见的 WordPress 模式:
msgid "Powered by %s"
msgstr "مدعوم بواسطة %s"
%s 占位符将被替换为诸如 “WooCommerce” 之类的英文产品名称。在呈现的输出中,浏览器必须显示从右到左流动的阿拉伯语文本,然后切换到从左到右的英文单词,然后可能会切换回来。
这称为双向文本(或“bidi”),它由 Unicode 双向算法 处理。大多数情况下,它可以自动工作。但是,当您有多个占位符或数字与 RTL 文本相邻时,视觉顺序可能会变得不可预测。
常见的翻译错误
通用的翻译工具会产生几个 RTL 特定的错误:
-
占位符顺序颠倒。 诸如
%1$s out of %2$s之类的字符串可能会导致占位符被交换,因为 AI 会重新排序它们以匹配阿拉伯语语法。这会产生不正确的输出,例如“10 out of Page”而不是“Page out of 10”。了解有关在翻译期间保护代码变量的更多信息。 -
HTML 方向性损坏。 如果您的字符串包含诸如
<span dir="ltr">之类的内联 HTML,则一个幼稚的翻译器可能会删除dir属性或翻译它。 -
缺少复数形式。 阿拉伯语有 六种复数形式 ——零、一、二、少、多和其他。这是 WordPress 支持的任何语言中最复杂的复数系统。一个只生成两种形式的工具(如英语单数/复数)将使您的阿拉伯语
.po文件损坏。要深入了解 Gettext 复数的工作原理,请参阅我们关于 WordPress 中复杂复数 的指南。
以下是一个正确翻译的阿拉伯语复数字符串在 .po 文件中的样子:
# Arabic: nplurals=6
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "لا تعليقات"
msgstr[1] "تعليق واحد"
msgstr[2] "تعليقان"
msgstr[3] "%d تعليقات"
msgstr[4] "%d تعليقًا"
msgstr[5] "%d تعليق"
如果这六种形式中的任何一种为空或不正确,WordPress 将回退到该特定计数的英文字符串。您的用户将看到“5 comments”用英语散布在其他完全阿拉伯语的界面中。
测试您的 RTL 实现
仅仅翻译和修复 CSS 是不够的。您需要在真实的浏览器中验证结果。
快速测试清单
- 将 WordPress 语言在设置 > 常规中更改为阿拉伯语。不要只是手动添加
dir="rtl"—— 使用真实的语言设置,以便 WordPress 加载它自己的 RTL 覆盖。 - 检查导航菜单。 它们是否被镜像了?下拉菜单是否以正确的方向打开?
- 检查表单字段。 输入文本应从右向左流动。占位符文本应右对齐。
- 验证混合方向的内容。 包含阿拉伯语和英语(如品牌名称或 URL)的字符串应以正确的视觉顺序呈现。
- 在移动设备上测试。 RTL 布局错误在较小的屏幕上通常更严重,因为对齐错误的容错空间更小。
如果您的翻译根本没有显示出来,则问题可能与 RTL 无关 —— 首先检查您的 .mo 文件编译和文件路径。
浏览器开发者工具技巧
在 Chrome DevTools 中,您可以临时强制在任何页面上启用 RTL,而无需更改 WordPress 设置:
/* Paste in DevTools console as: document.documentElement.dir = 'rtl' */
html {
direction: rtl;
}
这使您可以快速预览您的主题在开始翻译之前如何处理 RTL。
以正确的方式自动化 RTL 翻译
手动翻译 RTL 语言既昂贵又缓慢。专业的阿拉伯语翻译人员收取高额费用,而且很难找到既了解该语言又了解 WordPress 特定的 Gettext 语法的翻译人员。
SimplePoTranslate 通过上下文感知 AI 引擎来解决这个问题,该引擎本身就了解 RTL 特定的挑战:
- 所有六种阿拉伯语复数形式都会自动生成。我们的引擎会读取您的
.po文件中的Plural-Forms标头,并生成您的目标语言所需的准确形式数量。没有空的msgstr插槽,没有英语回退。 - 占位符安全。 诸如
%s、%d和%1$s之类的变量在翻译期间会被锁定。AI 无法重新排序、删除或损坏它们 —— 即使阿拉伯语语法建议使用不同的词序。阅读有关语法锁定如何保护您的代码的更多信息。 - 双向上下文。 AI 了解混合方向的字符串需要特殊处理,并保留 HTML 方向属性。
无论您是为希伯来语受众本地化博客主题,还是将完整的 WooCommerce 商店翻译成波斯语,流程都是相同的:上传您的 .po 文件,选择您的目标语言,然后下载翻译后的文件。整个工作流程只需几分钟,而不是几天。
有关 WordPress 本地化流程的完整演练,请参阅我们的 WordPress 本地化终极指南。
停止将 RTL 视为事后才想到的事情
从右到左的语言代表着超过 10 亿的潜在用户。阿拉伯语是世界上第五大口语。希伯来语和波斯语在中东和中亚的关键市场中发挥着重要作用。
如果您的 WordPress 网站无法为这些用户提供精美的、具有原生感觉的体验,他们会找到能够提供的竞争对手。
好消息是:WordPress 已经具备了基础设施。您的主题只需要适当的 CSS,并且您的 .po 文件需要一个能够尊重 RTL 语言复杂性的翻译工具。
准备好将您的 WordPress 网站翻译成阿拉伯语、希伯来语或波斯语了吗?在 SimplePoTranslate.com 免费开始