2013-07-09 21 views
0
// Forms 
$app->register(new FormServiceProvider()); 
$app->register(new Silex\Provider\ValidatorServiceProvider()); 

// Locale 
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'locale' => 'en', 
    'locale_fallback' => 'en' 
)); 

$app['translator']->addLoader('yaml', new Symfony\Component\Translation\Loader\YamlFileLoader()); 
$app['translator']->addResource('yaml', $app['root_dir'] .'/config/poseidon/locales/en.yml', 'en'); 
$app['translator']->addResource('yaml', $app['root_dir'] .'/config/poseidon/locales/validators.en.yml', 'en', 'validators'); 

這是我的index.php的外觀。消息域很好,但驗證器域不是。這是因爲xlf文件中的默認表單轉換意味着我所加載的yml文件不適用。沒有從Yaml設置Silex表單驗證器翻譯

例如,如果我編輯XLF文件並將其刪除:

,此值不應該是空白。

然後我YML文件:

# validators.en.yml 

This value should not be blank.: This is a required field 

將被加載,並且這個鍵將被添加到驗證陣列。然而,似乎只要這些默認的xlf文件被加載,我的yaml文件中的任何東西都不會覆蓋驗證器轉換域。

任何幫助將不勝感激,因爲我不知道爲什麼會發生這種情況。謝謝。

編輯:

這實際上是圓的,以我的想法相反的方式,我說:以後

echo $app['translator']->trans(
         'This value should not be blank.', 
         array(), 
         'validators' 
        ); 

直接翻譯增加了資源,並得到預期的結果,這意味着當正在加載FormServiceProvider,默認的xlf文件是覆蓋消息目錄驗證器域中當前存在的文件。

所以,如果有人知道如何防止這樣做會很好,謝謝。

回答

0
(
    [0] => Array 
     (
      [0] => xliff 
      [1] => /Silex/vendor/symfony/form/Symfony/Component/Form/Resources/translations/validators.en.xlf 
      [2] => validators 
     ) 

    [1] => Array 
     (
      [0] => xliff 
      [1] => /Silex/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.en.xlf 
      [2] => validators 
     ) 

    [2] => Array 
     (
      [0] => yaml 
      [1] => /Silex/web/../config/poseidon/locales/validators.en.yml 
      [2] => validators 
     ) 

    [3] => Array 
     (
      [0] => yaml 
      [1] => /Silex/web/../config/poseidon/locales/en.yml 
      [2] => messages 
     ) 

) 

這不是最理想的解決辦法,但我編輯的翻譯類和扭轉數組如上圖所示,以確保XLIFF文件的YML文件之前加載,現在一切工作正常。

我確實需要找到一個不編輯Translator類的解決方案。

0

退房this solution on the Silex Github page
註冊(在的index.php您的情況):

$app['locale'] = 'fr'; 

$app->register(new TranslationServiceProvider()); 
$app->register(new ValidatorServiceProvider()); 

$app['validator']; 
$app['translator'] = $app->share(
    $app->extend(
     'translator', 
     function ($translator, $app) { 
      $translator->addLoader('yaml', new YamlFileLoader()); 
      $translator->addResource('yaml', 'path/to/validators.fr.yml', 'fr', 'validators'); 

      return $translator; 
     } 
    ) 
); 

調出$app['validator']之前$app['translator']觸發它的註冊方法,所以YAML文件被加載後。

我有同樣的問題,這解決了它。

0

近硅石版本,使用

$app['locale'] = 'fr'; 

$app->register(new TranslationServiceProvider()); 
$app->register(new ValidatorServiceProvider()); 

$app['validator']; 
$app['translator'] = $app->extend(
    'translator', 
    function ($translator, $app) { 
     $translator->addLoader('yaml', new YamlFileLoader()); 
     $translator->addResource('yaml', 'path/to/validators.fr.yml', 'fr', 'validators'); 

     return $translator; 
    } 
); 

沒有«份額»方法