この回答は、ララベルの場合にのみ有効です。< = 5.1this answer for a solution in Laravel >=5.2を参照してください。
Fakerでロケールを使用するには、ジェネレータがロケールで作成する必要があります。偽物のドキュメントから
$faker = Faker\Factory::create('fr_FR'); // create a French faker
:
ローカライズさプロバイダが見つからない場合は、デフォルトのロケールに工場出荷時のフォールバック(en_EN)。
デフォルトでは、LaravelはEloquentServiceProvider
のfakerインスタンスの作成をバインドします。バインドするために使用される正確なコードは次のとおりです。
// FakerFactory is aliased to Faker\Factory
$this->app->singleton(FakerGenerator::class, function() {
return FakerFactory::create();
});
Laravelはそれが偽物に任意の引数を渡すことはありませんので、それは工場の閉鎖に渡し偽物インスタンスのロケールを変更する方法がないように見えます。
このように、ファクトリメソッドで独自のFakerインスタンスを使用する方が良いでしょう。
$localisedFaker = Faker\Factory::create("fr_FR");
$factory->define(App\Flyer::class, function (Faker\Generator $faker) {
// Now use the localisedFaker instead of the Faker\Generator
// passed in to the closure.
return [
'zip' => $localisedFaker->postcode,
'state' => $localisedFaker->state,
];
});
Laravel> = 5.2の場合、これが最良の答えです。 – Soroush
これは、あなたのアプリケーション全体に_single_ロケールが必要なときにうまくいくと思います。多言語テストをサポートしたいときは、これはうまくいきません。 – abbood
DI container(app())からいつでもfakerインスタンスを取得できます。 –