视觉测试与RTL语言:验证阿拉伯语和希伯来语渲染的唯一可靠方法
RTL 视觉测试是指自动捕获界面每个页面和组件在从右到左(Right-to-Left)渲染模式下的截图,然后将这些截图与经过验证的基准进行比较,以检测功能测试和 HTML 验证器无法识别的任何镜像、方向、定位或双向性异常。
您的站点在法语下完美运行。在英语下也是。您添加阿拉伯语或希伯来语支持,您在 HTML 中启用 dir="rtl",突然之间您的界面变成了一块破碎的拼图。菜单跑错了位置。箭头图标指向错误的方向。文本中的数字与字母混乱不堪。整段文字以毫无意义的顺序显示其行。
这不是一个奇异的缺陷。这是 RTL 国际化的现实。这是一个只有视觉测试才能可靠解决的问题。
为什么 RTL 是一种根本不同的挑战
当您把站点从法语翻译成英语时,挑战是语言层面的。词语变了,句子变长或变短,但布局保持一致。文本从左到右流动。菜单在左边。操作按钮在右边。一切都在原位。
当您切换到 RTL——阿拉伯语、希伯来语、波斯语、乌尔都语——一切都被镜像。菜单从左移到右,侧边栏翻转,方向性图标必须指向另一侧,不对称的边距被反转。这是完整的镜像,且必须完美。
根据 Ethnologue 的数据,超过 7.5 亿人每天使用 RTL 语言。这不是一个利基市场。这是一整片大陆的用户,如果您的 RTL 出错,您就服务得很糟糕。
没人测试的 RTL 缺陷的五大类别
1. 不完整的布局镜像
最常见的 RTL 缺陷是部分镜像。页面的一部分被正确翻转,另一部分却没有。页头是 RTL 的,但页脚仍然是 LTR。侧边栏移到了右边,但其内部内容仍是左对齐。
这种不完整的镜像发生在 CSS 样式使用物理方向属性(left、right、margin-left、padding-right)而不是逻辑属性(inset-inline-start、margin-inline-end)时。物理属性不响应文档方向变化。无论阅读方向如何,它们都保持固定。
功能测试无法检测此问题。元素存在,可点击,包含正确的文本。但它在错误的位置。只有将 RTL 渲染与已验证 RTL 基准进行比较的视觉测试才能发现它。
2. 不会翻转的图标
并非所有图标都应在 RTL 中翻转。这正是问题复杂的原因。
方向性图标必须翻转:导航箭头、返回 chevron、播放/快进图标。如果在 LTR 中向右指的箭头表示"下一个",那么在 RTL 中它必须向左指。
非方向性图标不应翻转:勾选标记、垃圾桶、心形、齿轮。这些图标没有方向意义。翻转它们将是错误。
含义模糊的图标需要判断:铅笔(大多数人用右手写字,但图标是象征性的)、放大镜(手柄是方向性的吗?)、电话(话筒方向有方向意义吗?)。
Google 发布了一份 Material Design 指南,详细说明 RTL 图标翻转规则。列表很长,例外很多。用功能测试自动验证这些规则在理论上可行,但在实际中不可行。视觉测试让这种验证变得轻而易举:如果一个图标本不该翻转却被翻转了(或反之),视觉对比立即显示。
3. 双向文本(Bidi)失控
RTL 的真正噩梦不是布局镜像。是双向文本。
在阿拉伯语或希伯来语中,主要文本从右向左。但数字、电子邮件地址、URL、拉丁字符的品牌名——所有这些都从左向右,即使在 RTL 文本中间。这被称为双向文本,或"bidi"。
Unicode 双向算法(UBA)自动处理大多数情况。但"大多数"不是"全部"。当一个 LTR 段落与一个 RTL 段落相邻而没有足够的上下文时,算法可能做出错误决定。结果:词语以错误顺序出现、括号反转、电话号码无法阅读。
具体结果:闭合括号出现在开括号之前,电话号码变得无法阅读。这种缺陷对功能测试是不可见的——文本在那里,字符正确,但顺序错了。只有视觉测试能在规模上检测此问题。
4. 镜像表单
表单在 RTL 中尤其麻烦。Label 必须在字段右侧。错误信息必须出现在右侧。字段内的图标(搜索字段中的放大镜、密码字段中的眼睛)必须重新定位。
但某些字段类型的输入行为仍然是 LTR。即使在 RTL 表单中,电子邮件字段也必须保持 LTR,因为电子邮件地址永远是 LTR。电话号码字段可能是 LTR 或 RTL,取决于格式。自由文本字段必须适应正在键入的语言。
带有单独 LTR 字段的 RTL 表单的组合,会创造视觉上复杂的情况。光标在两个方向之间跳动。占位符可能是阿拉伯语(RTL)而输入将是拉丁字符(LTR)。内联验证必须出现在正确字段的正确一侧。
从功能上测试所有这些意味着验证每个字段接受输入并提交起作用。从视觉上测试所有这些意味着验证用户理解他们所看到的。差异是巨大的。
5. 失向的交互组件
交互组件——下拉菜单、tooltip、模态框、轮播图——具有隐含的方向感。下拉菜单在 LTR 中向左对齐,在 RTL 中向右对齐。轮播图在 LTR 中向右推进,在 RTL 中向左推进。
即使现代库(Radix UI、Headless UI)处理了这些情况,您团队的 CSS 自定义也可能破坏 RTL 行为。视觉测试在打开状态下捕获这些组件并验证其 RTL 渲染是否正确。
为什么现有测试在 RTL 上失败
单元测试看不到渲染
单元测试验证组件接收正确的 props 并返回正确的 markup。它不知道 margin-left: 16px 在 RTL 中应是 margin-right: 16px。它不知道您的箭头 SVG 应被翻转。它不知道您的 bidi 文本以错误顺序显示。
功能测试看不到方向
一个 Cypress 测试,点击"下一步"按钮并验证导航到下一页,在 RTL 中也会通过。按钮工作。导航工作。按钮在视觉上位于错误位置、箭头图标指向错误方向、label 因为阿拉伯语文本比法语文本长而被截断——所有这些都逃过了功能测试。
CSS Linter 不验证方向逻辑
存在一些 CSS linter,当您使用 margin-left 而不是 margin-inline-start 时会发出警告。这有用。但不完整。Linter 不知道您的 margin-left 是有意为之(针对一个不应在 RTL 中变化的特定情况)还是疏忽。它也不验证最终渲染——只验证语法。
视觉测试是唯一验证最终结果的
视觉测试不在乎您的 RTL 是如何实现的。它看的是结果:用户所见的页面。不完整的镜像、被错误翻转的图标、顺序错乱的 bidi 文本、不一致的表单——所有都出现在视觉 diff 中。正是这种穷举性使视觉测试成为任何 RTL 国际化策略不可或缺的工具。
用无代码工具搭建 RTL 视觉测试
搭建 RTL 视觉测试不需要双向性或 Unicode 的技术专长。借助像 Delta-QA 这样的无代码工具,过程是直接的。
创建经过验证的 RTL 基准
第一步是为 RTL 模式下的页面创建参考基准。带阿拉伯语或希伯来语参数浏览您的站点,捕获每个关键页面的截图。让这些截图由母语人士或熟悉 RTL 惯例的设计师验证。一旦验证,这些截图就成为您的参考。
每次变更后比较
每次部署时,重新运行 RTL 截图并与基准比较。CSS、组件或前端依赖的任何修改都可能影响 RTL 渲染,即使该变更看起来只涉及 LTR 版本。
这是关键一点:仅触及您站点法语版本的 CSS 变更可以破坏阿拉伯语版本。为 LTR 中一个外观调整而添加的 margin-left 属性会让 RTL 中的元素错位。两个方向上的视觉测试是确保您的变更在方向上中性的唯一方式。
测试关键断点
RTL 缺陷常常特定于某些断点。一个在桌面上正确镜像的布局在移动端可能损坏,因为 media query 使用了不同的物理属性,或因为移动布局采用不同的逻辑构建。
至少在三个断点上捕获您的 RTL 页面:移动(375px)、平板(768px)、桌面(1440px)。最常见的缺陷出现在移动端,那里有限的空间放大了方向问题。
忽视 RTL 的代价
忽视界面 RTL 质量有可衡量的后果。
首先是跳出率。渲染不佳的 RTL 界面会被母语人士立即识别。这并不微妙——就像读一本页码顺序错误的书。用户不会去琢磨。他们会离开。
其次是可信度。如果您面向中东或北非市场(根据 Statista 报告,这是一个拥有超过 4 亿人口、电子商务市场快速增长的地区),损坏的 RTL 界面表明对您受众的不尊重。这等同于收到一封每句话都有拼写错误的法语商业邮件:技术上可理解,实际上让您失去资格。
最后是合规。某些市场(以色列、阿联酋、沙特阿拉伯)对本地语言界面质量有监管或合同期望。失败的 RTL 界面可能成为进入这些市场的壁垒。
RTL 语言并非完全相同
许多团队忽视的一点:阿拉伯语和希伯来语并不构成完全相同的视觉挑战。
阿拉伯语使用相连(草书)字符。一个词的宽度根据相邻字符变化。变音符号(harakat)在字母上下添加标记,影响行高。阿拉伯语字体通常需要比拉丁字体更大的基础字号才能保持可读。
希伯来语使用分离(不相连)字符。宽度问题不那么明显,但元音(niqqud)带来与阿拉伯语变音符号类似的挑战。
波斯语(Farsi)使用阿拉伯字母加额外字符和不同的数字。同一页面可能需要三种不同的数字系统。
视觉测试自然处理这种多样性——它比较的是像素。无论您的字符是相连的、分离的、有或没有变音符号,视觉测试看到的是用户看到的。
为什么 RTL 视觉测试应该在您的 CI/CD 中
RTL 不是一次性项目。您不能"做完 RTL"就过去了。您界面的每一次修改都必须在 RTL 中验证,因为每次修改都可能破坏 RTL。
将 RTL 视觉测试集成到您的 CI/CD 流水线中意味着每个 pull request 都自动在两个方向上验证。添加 LTR 组件的开发者立即看到他的组件是否有正确的 RTL 渲染。调整间距的设计师立即看到该调整是否在两个方向上都起作用。
这是唯一可扩展的方法。替代方案——在每次发布前手动检查 RTL——是缓慢、昂贵且容易出错的过程。
常见问题
即使阿拉伯语流量很低,是否应测试 RTL?
是的,如果您打算扩展该市场。损坏的 RTL 阻碍增长。访问您站点并看到渲染不佳界面的阿拉伯语用户不会再回来。您永远不会知道因为他们在 3 秒内判断您的产品不专业而失去了多少潜在客户。RTL 视觉测试是对未来增长的投资,而不是对当前流量的开支。
视觉测试能检测双向文本问题吗?
是的。这是它最重要的优势之一。Bidi 问题——词语顺序错乱、括号反转、数字位置错误——在视觉测试捕获的截图中可见。如果一段文本以错误的顺序出现,与已验证基准的逐像素比较会自动标记。
阿拉伯语和希伯来语可以使用相同的基准吗?
不可以。阿拉伯语和希伯来语需要分开的基准。虽然两者都是 RTL,但字符、排版、布局惯例和数字系统不同。阿拉伯语基准无法验证希伯来语渲染,反之亦然。每种支持的语言创建一个基准。
RTL 视觉测试与现代 CSS 框架兼容吗?
是的。无论您使用 Tailwind CSS、Bootstrap、Material UI 还是自定义 CSS,视觉测试都捕获最终渲染,与框架无关。视觉测试在 CSS 框架中尤其有用,因为框架添加了一层抽象,可能在源代码中掩盖方向问题。
RTL 视觉测试给部署周期增加多少时间?
借助 Delta-QA 这样的工具,RTL 截图和比较给周期增加几分钟。这与您在生产环境发现的 RTL 缺陷的诊断和修复时间相比微不足道。时间投入最小,避免的风险巨大。
RTL 视觉测试是否取代母语人士的本地化审计?
不,也不应试图取代。母语人士检查语言质量——翻译、语气、文化惯例。视觉测试检查显示质量——布局、方向、定位、可读性。两者都必要。视觉测试检测版本之间的回归,母语人士验证初始版本正确。
您的站点支持 RTL 语言吗?验证渲染与翻译一样优秀。