Faker 官方提供的本地化方案如下:

$faker = Faker\Factory::create('fr_FR'); // create a French faker

可是在 Laravel 中 $faker 实例是通过依赖注入的:

$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => str_random(10),
    ];
});

如何使注入的 $faker 实例生成中文数据呢?

只要简单看一下 Laravel 的源码就可以看到, 实际上 Laravel 提供了一个参数指定 Faker 的地区:

// vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php

 /**
     * Register the Eloquent factory instance in the container.
     *
     * @return void
     */
    protected function registerEloquentFactory()
    {
        $this->app->singleton(FakerGenerator::class, function ($app) {
            return FakerFactory::create($app['config']->get('app.faker_locale', 'en_US'));
        });

        $this->app->singleton(EloquentFactory::class, function ($app) {
            return EloquentFactory::construct(
                $app->make(FakerGenerator::class), $this->app->databasePath('factories')
            );
        });
    }

所以, 只要简单地在 config/app.php 中定义配置项 app.faker_locale 就可以啦?


return [
    // ...

    /*
     * 设置 Faker 语言
     */
    'faker_locale' => 'zh_CN',
];

生成的数据:

| 乐博涛 | | 程秀英 | | 喻雪梅 | | 郭雷 | | 姚明 | ...

Congradurations! ????

Faker 的中文化只做到了姓名, 地区等有限的一些范围, 如长文本目前无法生成中文的数据: https://github.com/fzaninotto/Faker/tree/master/src/Faker/Provider/zh_CN

References

fzaninotto/Faker: Faker is a PHP library that generates fake data for you

Faker/src/Faker/Provider/zh_CN at master · fzaninotto/Faker