2015-07-21 41 views
1

我們的網站是多語言(客戶端)。但是我們不需要翻譯PO文件中的「login」這樣的單詞,而是需要從數據庫中的翻譯表中提取它們。這是客戶的要求。CakePHP使用庫內部模型

我研究了哪種方式可以製作出可從任何地方訪問的功能(視圖,控制器等)。我認爲最好的方法是製作一個自定義庫,因爲它表示它可以在任何地方使用。

但是我不能在我的模型中使用它,它給了我錯誤的地方,我不能使用ClientnameLibrary::translate('login')。我說在我的模型行App::uses('ClientnameLibrary', 'Lib');,並在驗證部分試過這樣:

'lastname' => array(
    'notEmpty' => array(
     'rule' => array('notEmpty'), 
     'message' => ClientnameLibrary::translate('lastname_validation_error'), 
    ), 
), 

有沒有一種方法,我可以用我的自定義庫中的模型?如果沒有,在我的模型中(從數據庫中)翻譯驗證消息的最佳方法是什麼?

這是我在控制器/視圖使用的代碼:當翻譯改變

App::uses('ClientnameLibrary', 'Lib'); //include at top of file 
echo ClientnameLibrary::translate('login'); //to get translated word from database 
+2

「_I can not use it_」不是一個適當的問題描述,請更確切地說明問題是什麼。話雖如此,App :: uses()在模型中也能正常工作。 – ndm

+0

你說得對,我很抱歉。我編輯了我的答案,並給出了我正在努力工作的代碼。 – Femke

+0

你嘗試過App :: uses('ClientnameLibrary','Lib');在你的模型文件中? –

回答

0

保存DB譯文in a po file。如果沒有緩存,用新查詢讀取每個翻譯都是愚蠢的,因此您必須以任何方式緩存它。那麼只需將數據庫內容轉換爲po文件並使用CakePHP的標準轉換函數?

檢查i18n shell如何將翻譯字符串提取到pot(非po)文件中。您可能可以重寫shell以使用所需的標識符更新您的數據庫。

+0

我們的確在緩存數據庫中的翻譯。 但是,如何將數據庫轉換保存到PO/POT文件中?從我讀到的東西我不明白,這是可能的,如果可能的話,它是如何完成的。你能爲我提供一個鏈接嗎? – Femke

+0

我已經提供了描述po文件的鏈接。 https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html寫這些文件不應該是一個問題,我可能是錯的,但如果你看一個po文件這是一個非常簡單的格式。也有庫,例如這個https://github.com/raulferras/PHP-po-parser只是搜索它。 – burzum

+0

對不起,我忽略了你的鏈接。我會試一試,謝謝你的例子! – Femke