有 1,082 筆翻譯混入了錯誤字母表的文字。我們的檢查卻全部通過。
語言
10 月 31 日,我們發現其中一個網站上有一句匈牙利語句子,中間夾雜著中文詞彙。我們搜尋了所有營運網站的已儲存翻譯,找出那些不屬於該語言的字元,結果發現了 1,082 筆類似情況,其中 581 筆出現在已發布的頁面上。每一筆都通過了我們的檢查。
我們發現了什麼
這些問題全部出自負責翻譯我們網站的本地模型,而且都是同一種失誤:夾雜了一兩個其他語言的詞彙。以下內容來自已儲存的翻譯,以及自那之後被拒絕的翻譯:
- 其他語言中夾雜中文:泰語句子中間出現「它們是」的中文寫法 它们是;匈牙利語中「追蹤」的中文寫法 跟踪 被加上了匈牙利語詞尾("támadók跟踪ására");波蘭語和希臘語中也有類似情況。
- 希臘語、亞美尼亞語、希伯來語和斯洛維尼亞語中夾雜俄語:希臘語中的「full house」輸出為 "φουλ хаус",第二個單字使用了西里爾字母。
- 外觀相似的字母:芬蘭語或捷克語單字結尾出現西里爾字母的 "о" 或 "а"。讀者閱讀頁面時不會注意到;但搜尋引擎或螢幕閱讀器會。
- 相鄰的文字系統:卡納達語單字中出現孟加拉語字母,卡納達語中出現天城文。
- 高棉語頁面整行使用泰語:兩個網站的高棉語頁面上的標題、標籤和表格儲存格,直接以泰語寫成。
我們的商店本身也有七行這樣的內容。其中一行,「planted values」在羅馬尼亞語中輸出為 "valori植入"。
為什麼檢查會通過
腳本檢查詢問翻譯中至少 45% 的字元是否屬於該語言的文字系統。這能抓到保留英文的情況,也正是它設計的初衷。在一百個字元的匈牙利語句子中夾雜兩個中文字元,並不會改變這個比例,而單一一個西里爾字母的影響更小。
短文字有不同的規則。若英文少於 25 個字元,檢查僅確保答案沒有停留在英文。以泰語寫成的高棉語表格儲存格完全不含英文,因此通過了檢查。
能抓到這些問題的規則
若某個字元屬於該語言不使用的文字系統,且英文原文中也不包含該字元,則視為錯誤。有三項例外可避免規則誤報:
- 拉丁字母一律允許:品牌名稱、程式碼和單位出現在每種語言中。
- 中文、日文和韓文未進行檢查,因為日文混合使用假名與漢字,而韓文可能使用漢字。
- 塞爾維亞文和旁遮普文各自使用兩種文字書寫,僅針對其中的中文、日文和韓文字元進行檢查。
我們對網站儲存的所有內容執行了該規則,凡是它標記且我們閱讀過的錯誤行,結果都屬實。自 10 月 31 日起,它在翻譯生成時已拒絕 1,652 筆翻譯,其中 1,549 筆為高棉文:模型並未停止為高棉文寫出泰文,但現在會要求重新生成,而非直接發布。
清理工作
儲存的翻譯僅在其語言重新翻譯時才會再次檢查,因此所有受影響的語言都已重新翻譯:涵蓋十一個網站的 61 種語言。有兩行第二次仍出現同樣的錯誤:羅馬尼亞文的「valori植入」以及一行包含「面向」的希臘文。我們手動修正了這兩行。11 月 2 日,我們已發布的頁面中不再有任何其他文字的字母。
規則目前的存放位置
它位於 translation-checks 1.1.0 中,在 GitHub 上免費提供,旁邊還有一項新檢查,確保每個數字都能正確回傳,並知道「3 million」在日文中是 300万。針對我們網站已接受的 568,574 筆翻譯執行新檢查,未產生任何誤報。Polyglot 1.1.0 也包含了這些檢查。關於我們的檢查首次成為問題所在,請見先前的筆記。