问题描述
我的目标是什么?
我期待为 WordPress 插件的可用翻译编写测试用例。
我的方法:
我已经使用 VVV 设置 WordPress,我的测试套件包括 PHPUnit 和 WP-CLI 。
为了测试 (断言) 翻译,我检查该语言的.mo
文件是否存在。
/**
* Test the translations.
*/
public function test_translations() {
$this->assertFileExists( $this->object->path . 'lang/domain-name-de_DE.mo' );
$this->assertFileExists( $this->object->path . 'lang/domain-name-lt_LT.mo' );
$this->assertFileExists( $this->object->path . 'lang/domain-name-nl_NL.mo' );
}
我被困在哪里
这是对于 WordPress 插件测试 translations
的正确方法吗?如果没有,请提出替代方案。
最佳解决思路
如果您想要测试的是翻译文件存在,那么这可能是最简单的方法,因为您可能已经在使用 PHPUnit 来运行插件代码上的单元/集成测试。
但是,只是检查文件是否存在并没有告诉你。它不会告诉你这些语言是否实际完全翻译,或者即使这些文件将被 WordPress 正确加载。
所以你需要问的问题是:「为什么要测试?如果您只是想确保您不会意外遗漏翻译文件,那么您的测试应该做你所需要的。如果您希望确实能够为每种语言提供完整的翻译,而且这些翻译实际上是有效的,那就是一个完全不同的故事。
测试翻译加载
要检查 WordPress 是否能正确加载每个翻译文件,您可能会创建一个使用 load_plugin_textdomain()
加载文件的 PHPUnit 测试,并检查它是否返回 true
,这将表明文本域可以正确加载。您可能需要挂接到 plugin_locale
过滤器来检查您的插件附带的每个区域设置。
测试完整性
然而,仍然不会告诉你有多少字符串实际上被翻译成该语言,有多少是模糊的。如果你想检查每个翻译是否至少 xx%完成,你可能想要使用一个不是 PHPUnit 的工具。
测试外观
您还可以进一步检查每个翻译中的字符串是否在插件 UI 中正确显示。有时字符串的翻译可能比原始语言长得多,这可能会导致它溢出为其分配的区域。要检查这一点,您需要使用类似 Codeception 验收测试。
结论
因此,总而言之,您所拥有的测试是否适合您,取决于您要测试的内容。就个人而言,我没有任何测试我的插件的翻译,虽然最后一部分关于检查 UI 吸引了我。只是检查翻译是否存在,正如你现在所做的,对我来说似乎没有提供很多的好处。它是一个支票,只有你正在检查的翻译文件列表一样好。在某种意义上,它并没有测试任何东西,只是确保它在那里。这可以在构建脚本而不是 PHPUnit 中执行。检查翻译实际上可以由 WordPress 加载确实为 IMO 提供了好处,因为它实际上测试它们没有被破坏。当然,它测试它们同时存在。所以我可能会扩大你的测试来检查。
Edit
在相关说明中,您可能还会考虑测试主 POT 中的任何拼写错误 (我也猜测翻译也是如此) 。这很容易在雷达下滑落。可能有可用的 shell 脚本可以做到这一点。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。