为你的 Faker(假数据生成器)指定中文支持

file

Laravel 中使用 Faker 构造假数据时,默认的输出为英文格式,如下
file

可通过在 config/app.php 增加如下配置使其支持中文。

'faker_locale' => 'zh_CN',

修改后再次执行效果如下:

file

今天在使用 Faker 构造数据时,纳闷为什么不能是中文,查看 官方扩展包 原来早就支持了啊。(是我孤陋寡闻了呀,赶紧分享给没发现的同学)

Laravel 源码中是在 DatabaseServiceProvider 中注册的国际化支持。

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

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')
        );
    });
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
二愣的闲谈杂鱼
本帖由系统于 5年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 13

踩了个坑,好久才爬出来。。
'faker_locale' => 'zhCN', 是『』不是『-』
而'locale' => 'zh-CN', 是『-』

5年前 评论

这个貌似只汉化了name这个属性 像title text 都没有汉化

5年前 评论
godruoyi

@Pepsi丶 目前只支持这几种呢

/vendor/fzaninotto/faker/src/Faker/Provider/zh_CN/

file

5年前 评论
ThinkQ

很方便哈

5年前 评论
godruoyi

@eiomi 是啊,就是没发现对国内用户友好的图片生成网站,https://lorempixel.com/ 这个生成器访问速度有点慢呀

5年前 评论

https://uifaces.co/api-docs 这个可以选择性别生成的数据

5年前 评论

请问这个支持生成长段落中文吗?

5年前 评论

前段时间我用这个 Faker 包生成 union 修饰的中文公司名,出现了公司名的重复插入,导致迁移失败。多尝试几次重新迁移,偶尔能成功。中文数据还是太少。现在不知道怎么样了。

5年前 评论
godruoyi

@mingc 有可能是你生成的数据量比较大,因为默认情况下

$faker->unique->company

只会生成 10000 条不重复的数据,并且 company 的中文支持最大只能生成

count($companyPrefix) * count($companySuffix);
// 82 * 4 = 328

条数据。

compony 中文生成器部分代码如下

    protected static $formats = array(
        '{{companyPrefix}}{{companySuffix}}'
    );

    protected static $companyPrefix = array(
        '超艺', '和泰', '九方', '鑫博腾飞', '戴硕电子',
        '济南亿次元', '海创', '创联世纪', '凌云', '泰麒麟',
        '彩虹', '兰金电子', '晖来计算机', '天益', '恒聪百汇',
        '菊风公司', '惠派国际公司', '创汇', '思优', '时空盒数字',
        '易动力', '飞海科技', '华泰通安', '盟新', '商软冠联',
        '图龙信息', '易动力', '华远软件', '创亿', '时刻',
        '开发区世创', '明腾', '良诺', '天开', '毕博诚', '快讯',
        '凌颖信息', '黄石金承', '恩悌', '雨林木风计算机',
        '双敏电子', '维旺明', '网新恒天', '数字100', '飞利信',
        '立信电子', '联通时科', '中建创业', '新格林耐特',
        '新宇龙信息', '浙大万朋', 'MBP软件', '昂歌信息',
        '万迅电脑', '方正科技', '联软', '七喜', '南康', '银嘉',
        '巨奥', '佳禾', '国讯', '信诚致远', '浦华众城', '迪摩',
        '太极', '群英', '合联电子', '同兴万点', '襄樊地球村',
        '精芯', '艾提科信', '昊嘉', '鸿睿思博', '四通', '富罳',
        '商软冠联', '诺依曼软件', '东方峻景', '华成育卓', '趋势',
        '维涛', '通际名联'
    );

    protected static $companySuffix = array('科技', '网络', '信息', '传媒');
5年前 评论
godruoyi

@CorePlusPlus 目前汉化了的属性可以再 这里 查看呢,不仅仅是 name,但汉化的也不多。

5年前 评论
ThinkQ

:+1:

5年前 评论
godruoyi

@阿伦 我使用的是 Faker 是 v1.7.1 版本,设置的是 ZH-CN 噢,

file

5年前 评论

@godruoyi 把我下划线吞了。。我的是1.4版本,中间是下划线

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!