我正在更新基於Zend MVC框架的正在成爲多語言的php web應用程序,並試圖找出將翻譯對象傳遞給不同類/圖層的最佳方法。用於傳遞翻譯對象的設計模式?對於PHP
我的翻譯大部分都是在視圖級別完成的,但是有幾種情況我需要從自定義庫中返回狀態消息。
我可以爲庫創建屬性並設置翻譯器,但我想知道是否有更好的方法將翻譯器對象集成到現有的應用程序中?
我正在更新基於Zend MVC框架的正在成爲多語言的php web應用程序,並試圖找出將翻譯對象傳遞給不同類/圖層的最佳方法。用於傳遞翻譯對象的設計模式?對於PHP
我的翻譯大部分都是在視圖級別完成的,但是有幾種情況我需要從自定義庫中返回狀態消息。
我可以爲庫創建屬性並設置翻譯器,但我想知道是否有更好的方法將翻譯器對象集成到現有的應用程序中?
您可以隨時在bootstrap.php中實例化轉換程序,以便它可作爲全局的所有類使用。這就是我要做的,因爲你可能需要在任何地方使用它。它並不優雅,但它使您無需在類需要拋出異常或返回錯誤消息的地方添加代碼。
如果你沒有那麼多的控制器設置,你不能擴展基礎控制器並在那裏實例化翻譯器嗎?它應該可用於整個系統。
事情是這樣的擴展:
<?php
class BaseController extends Zend_Controller_Action
{
public function init()
{
//setup translation object
}
}
?>
握住用戶在Memento lanaguage,並傳遞通過程序邏輯,當你需要做的翻譯用它識別語言。
如果使用Zend_Translate,最好使用register。
Zend_Registry::set('Zend_Translate', $translate);
這樣,所有類都可以自動找到它(Zend_Form的,Zend_Validate的,...)
如果我沒有記錯,翻譯者已經註冊了該密鑰,以便從視圖腳本,驗證器和表單中使用。 – 2012-12-20 22:51:47
你可能要考慮使用依賴注入容器,其中翻譯是傳遞給一個條目您需要的對象,而無需手動構建對象。這樣,你可以輕鬆地測試,讓更多的高質量(可測試)的代碼
看到這裏的其他問題 How to use dependency injection in Zend Framework?
或本文約堵漏ZF 2 DI成ZF1 http://adam.lundrigan.ca/2011/06/using-zenddi-in-zf1/
是的,這是一個選項我傾向於,這正如你所說的不是優雅而是最實用的。儘管我可能不需要這樣做,但試圖將語言特定的代碼提升到一定的水平,因此庫只是發回控制器應該知道的狀態代碼。 感謝您的回覆。 – AndreLiem 2009-10-07 19:29:14