模型工厂生成拉丁语结果,而不是英语,不接受任何其他语言环境

时间:2015-10-20 07:19:29

标签: localization laravel-5.1 faker

我已经建立了我的模型工厂并且它运行良好,但是,生成的句子,单词和其他字符串都在Latin中,我搜索了以下解决方案(这对我不起作用) :

  • ModelFactory.php

     $factory->define(App\Models\User::class, function (Faker\Generator $faker) 
    {
         $faker->locale = "en_US"; // nothing changed
         return [
            .....
         ];
    }
    
  • AppServiceProvider.php ,甚至是DatabaseServiceProvider.php

     $this->app->singleton(\Faker\Generator::class, function () {
        return \Faker\Factory::create('en_US');
     });
    

仍然非英语结果如下: Soluta doloremque in consequatur.

vendor/fzaninotto/faker/src/Faker/Factory.php

中有什么奇怪的

第一行是 const DEFAULT_LOCALE = 'en_US';

使用create function public static function create($locale = self::DEFAULT_LOCALE)

在做一些改变之前,我是否要先运行一些东西?

我需要帮助我已经走到了尽头!

更新

当我在User模型上运行工厂时,它运行时使用位于AppServiceProvider中的语言环境,默认情况下它是真正的英语,但是,ModelFactory.php中用户所使用的另一个模型是仅具有拉丁语结果的模型。 / p>

以下是两者的代码:

// English, settable
$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});

// Obligately Latin   
$factory->define(App\Models\Application::class, function (Faker\Generator $faker) {
    return [
        'title' => $faker->sentence('3'),
        'description' => $faker->paragraph,
        'field_id' => $faker->numberBetween(1,3),
        'published_at' => $faker->dateTimeBetween('-1 years'),
        'icon_url' => $faker->imageUrl(256, 256),
        'cover_url' => $faker->imageUrl(888, 444),
        'android_url' => $faker->url,
        'ios_url' => $faker->url,
        'windows_url' => $faker->url,
        'android_download_count' => $faker->randomDigit,
    ];
});

我比较了这两个模型,没有任何可疑之处。

2 个答案:

答案 0 :(得分:2)

这是Laravel用于生成数据库种子的faker包的限制。

两个"句子"和"段落#34;已包含在Loremfaker提供商中。这完全是拉丁语,不能改为其他语言。

答案 1 :(得分:0)

Laravel中包含的Faker软件包确实没有针对此问题的即用型解决方案,但是就其价值而言,有一种针对这种限制的“黑客”解决方法。

您不会得到漂亮的句子,但是如果使用Faker的company-> catchPhrase和company-> bs方法,即使它们没有任何意义,也可以将一些非常幽默的英语句子串在一起。但是,如果您只是在寻找英文单词的字符串,而不在乎它们的内容,那么使用这两种方法可能会对您有所帮助!

在Laravel中,我使用以下代码为新闻网站的种子文章打了一些漂亮的英文标题:

$title = ucwords($faker->catchPhrase .' '.$faker->bs);