問題描述

我的目標是什麼?

我期待為 WordPress 插件的可用翻譯編寫測試用例。

我的方法:

我已經使用 VVV 設置 WordPress,我的測試套件包括 PHPUnitWP-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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。