2013-02-20 49 views
0

我有一個問題,我無法從我的i18n教義對象中檢索特定的翻譯。如果我打電話$object->getName();,我會按照預期在當前文化中獲得該名稱。但是,如果我希望在不切換用戶文化的情況下檢索特定翻譯... $object->getName('fr');在此示例中,我仍然使用當前的文化而不是法語。這$object->getTranslation()->fr->name;雖然工作。我究竟做錯了什麼?是不是$object->getName($culture);正確的方法來做到這一點?symfony i18n objects(Doctrine)獲取特定文化

這裏是我的架構相關的部分,如果這是有幫助的:

Object: 
    actAs: 
    Timestampable: ~ 
    I18n: 
     fields:   [name, description] 
    columns: 
    name:    { type: string(255), notnull: true } 
    description:  { type: string(1000) } 
    user_id:   { type: integer } 
    relations: 
    User:    { class: sfGuardUser, local: user_id, foreign: id, type: one, foreignType: many, foreignAlias: Objects } 

回答

1
$this->Translation['fr']->getName() 

或者:

$translations = $this->getTranslations(); 
$translations['fr']->getName(); 
+0

所以是$ object-> getName('fr'); symfony 1.0的方式?我在這個印象之下,這也應該爲1.4工作。 – Zach 2013-02-22 15:09:19

+0

好吧,我必須有東西安裝錯誤......當我嘗試你的第一個解決方案時,我得到:未知的方法ObjectTranslation :: getName。如果我使用 - >名稱而不是 - > getName(),它可以工作。當我嘗試你的第二個解決方案時,我得到:「對象」上的未知記錄屬性/相關組件「翻譯」我之前從來沒有做過這類事情的任何問題,但我主要在symfony 1.0網站上工作,所以也許我是隻是缺少一些關鍵的1.4步驟。 – Zach 2013-02-22 15:37:24

0

這幾乎同樣的問題上your other question,用途:

$object->Translation['fr']->name; 
$object->Translation['en']->name; 
$object->Translation['it']->name; 
// etc ... 

我引用我張貼的其他問題註釋:

->getName()的作品,如果你是在對象上照片直接,就像 $object->getName()。但是,如果你點擊翻譯關係,我永遠不會使用 獲取值。

順便說一下,我不記得我們可以使用這個$object->getName('fr');與sf1.0。

+0

'$ object-> getName('fr');'是[documentation shows]的方式(http://symfony.com/legacy/doc/gentle-introduction/1_4/en/13-I18n-and-L10n #chapter_13_sub_using_the_generated_i18n_objects),並且是我之前一直這樣做的方式...出於某種原因,在我當前的項目中,它不起作用。從文檔中引用,「基本上,你不應該直接處理i18n對象,而是每次用常規對象進行查詢時,都要將文化傳遞給模型(或讓它猜測它)。」順便說一下,吸氣劑對我來說工作得很好,我只是無法指定文化。 – Zach 2013-02-22 17:14:43

+0

呵呵有趣,從來沒有用過這種方法.. – j0k 2013-02-22 18:09:32

+0

嗯,我想我不需要用這個方法。我一直認爲這是正確的方式。在我目前的情況下,你的解決方案將像'$ object-> getTranslation() - > fr-> name一樣工作,就像我在我的問題中提到的一樣。我想只要這樣做沒有問題,我可以繼續。我仍然希望我知道爲什麼其他方式不工作... – Zach 2013-02-22 18:57:50