2011-10-11 82 views
0

我正在向網站添加本地化。如果我可以通過PHP簡單地將翻譯添加到.po文件中,這個過程可以完全自動化,但我似乎無法找到允許使用這個語言的庫(例如POEdit的PHP版本)。可能使用PHP將翻譯添加到gettext(* .po)目錄?

我一直在做的,因爲HTML基本上遵循相同的格式,通過我寫的一個類來運行每個phtml文件(它們實際上是Zend Framework視圖,如果它有所不同),以隔離原始的英文文本,爲其分配一個索引(page.block.1),並編寫<?php echo _('page.block.1'); ?>函數,同時將原始文本包裝在HTML註釋中。然後我手動打開POEdit,檢查要翻譯的新字符串,並將註釋文本從phtml文件剪切/粘貼到POEdit。

這非常耗時。假設我可以使用PHP庫來添加新的翻譯,我已經準備好了索引和字符串,所以它不僅可以消除人爲錯誤,還可以在幾秒鐘內完成任務,而不是幾小時。

對於PHP甚至是python/perl,這樣的類是否存在?我似乎無法找到一個。

+0

它不存在。解析.po文件並不是什麼大不了的事。但是對PHP應用程序來說,gettext [使用不夠廣泛](http://stackoverflow.com/questions/6242478/ph​​p-translation-frontend-similar-to-rosetta),所以沒有人打算編寫修改庫。最好的方法是通過調用'xgettext'來更新模板.pot。 – mario

+0

@mario - 謝謝,這太糟糕了,但我明白。我想也許我只是不知道該找什麼。 –

回答

2

有更簡單的方法,特別是如果您使用Zend_Translate gettext adapter

您可以直接使用在這樣一個.phtml文件轉換功能:

<label><?php echo $this->translate('some fancy text'); ?><label> 

然後使用xgettext工具來創建從一個.phtml文件.po文件。了xgettext的的調用會是這樣的:

xgettext -o nameOfTheGeneratedPOFile.po --keyword=translate -L php 

然後你可以使用poEdit的翻譯的.po文件和msgfmt創建的.mo文件。

查看Zend_Translate documentation瞭解更多關於如何使用它的信息。

+0

儘管這不允許自動化,但它可能是我要得到的最佳答案。下次我選擇爲大多數靜態HTML組成的大型網站進行本地化時,我會更好地研究我的選擇。不是'ctrl + x'' ctrl + v' 6小時的粉絲.. –

+1

您可以從這種方法獲得的最高級別的自動化是創建一個腳本,該腳本將遍歷所有.phtml文件,創建一個新的.po文件並將其與現有的.po文件合併。 –

+0

對,這就是我所做的。如果它不是基於密鑰的PO文件(而不是英文文本作爲密鑰),那麼它就不會那麼糟糕。如果我們更新英文文本,我們不想打破其他翻譯,考慮多種語言的技術翻譯是多麼昂貴!因此,這爲我帶來了一個包含數千個鍵('section.page.head.block1')的PO文件,需要通過POEdit使用英文文本填寫。 –