2014-02-10 41 views
1

我在documentation後面添加了一個約束條件到UniqueEntity。約束工作正常,我得到默認的錯誤信息:Symfony2,UniqueEntity約束消息沒有被翻譯

該值已被使用。

當我更換喜歡unique_entity.message翻譯關鍵信息,並添加在validators.en.yml此鍵(我成功添加其他聲稱翻譯到該文件),該錯誤信息是翻譯密鑰本身,而不是翻譯的消息。

我試着清除緩存,它沒有工作。我試着檢查約束文件的源代碼,但我迷失在許多文件中,從我能找到的東西中,它應該可以工作。

任何人都知道我在做什麼錯了?

+0

你有'翻譯器'啓用? http://symfony.com/doc/current/book/translation.html#book-translation-configuration另外,請在問題中包含您的'validation.yml'代碼。 –

+0

您是否試圖翻譯表單中的驗證消息?如果是......翻譯過程本身通常在那裏進行。 – nifr

+0

@carrie kendall翻譯器已啓用,就像我說過的,我有其他驗證器翻譯工作在同一個文件中。似乎只有使用此UniqueEntity纔會出現問題,Symfony \ Component \ Validator \ Constraints命名空間中的所有其他斷言都可以使用。 – Oylex

回答

1

我找到了原因,我使用的是功能得到得到錯誤的列表它們編碼的JSON在Ajax的形式來使用,這是功能:

private function getFormErrorMessages(Form $form) 
{ 
    $errors = array(); 

    foreach ($form->getErrors() as $key => $error) { 
     $template = $error->getMessageTemplate(); 
     $parameters = $error->getMessageParameters(); 

     $error = $template; 

     foreach ($parameters as $var => $value) { 
      $error = str_replace($var, $value, $template); 
     } 

     $errors[] = array(
      'error' => $error, 
      'template' => $template, 
      'parameters' => $parameters, 
     ); 
    } 

    if ($form->count()) { 
     foreach ($form as $child) { 
      if (!$child->isValid()) { 
       $errors = array_merge($errors, $this->getFormErrorMessages($child)); 
      } 
     } 
    } 

    return $errors; 
} 

好,碰巧這函數獲取已翻譯的正常錯誤(來自Asserts),但不是UniqueEntity的。也許,在視圖創建過程中似乎會被翻譯。

因此,我只是返回包含json中的錯誤的新渲染表單,並用它替換了舊的表單,並且所有的錯誤都像他們應該翻譯的那樣。