Silexでのバリデーションメッセージの日本語化
Silex 2.x でフォームの入力内容をバリデーションしています。
翻訳内容は YAML で保存しているため下記のようにして読み込んでいます。
$app->register(new Silex\Provider\ValidatorServiceProvider());
$app->register(new Silex\Provider\LocaleServiceProvider());
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
'locale' => "ja"
));
$app['translator'] = $app->extend('translator', function($translator, $app) {
$translator->addLoader('yaml', new Symfony\Component\Translation\Loader\YamlFileLoader());
$translator->addResource('yaml', __DIR__ . '/../resources/lang/ja.yml', "ja", 'validators');
return $translator;
});
チェック箇所
$inputs = [
"name" => $request->get("name")
];
$constraint = new Assert\Collection([
'name' => new Assert\NotBlank()
]);
$errors = $app['validator']->validate($inputs, $constraint);
foreach($errors as $error){
echo $error->getMessage();
}
ja.yml ファイルに
This value should not be blank.: 値が空です。
と書くことで getMessage() の結果を日本語化するところまで出来ましたが、例えば名前欄が空の場合「名前が空です。」といった表現をしたいと思っています。
Laravel のときは「:attribute の値 ”:value” は正しくありません」のような書き方をすることが出来ましたが、Silex ではどのようにするのが一般的なのでしょうか?
$error->getPropertyPath() を $app['translator']->trans() で翻訳して「:attribute」等のプレースホルダーをstr_replace() で置き換えれば一応の形にはなりそうですが正しい方法ではないように思えます。
いい方法がありましたらよろしくお願いします。