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 ファイルが適用されないことを意味するためです。

たとえば、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 ファイルが、メッセージ カタログ バリデーター ドメインに現在存在するものを上書きするものであることを意味します。

したがって、これを防ぐ方法を誰かが知っていれば、それは素晴らしいことです。

4

3 に答える 3

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
        )

)

これは最も理想的な解決策ではありませんが、Translator クラスを編集し、上記のように配列を逆にして、yml ファイルの前に xliff ファイルが読み込まれ、すべてが正常に動作するようにしました。

Translator クラスを編集しないソリューションを見つける必要があります。

于 2013-07-11T13:04:35.153 に答える