我在 Laravel 有一个项目,其中包含西班牙语的模型名称、字段和消息,我目前正在使用laravel-shift/blueprint
从yaml
文件生成应用程序的所有基本代码,在 Laravel 推断迁移名称的复数时,控制器,变量等,它使他们将单词视为英语单词,例如:
+--------------+----------------------------+--------------------------+
| Word | English Plural (incorrect) | Spanish Plural (correct) |
+==============+============================+==========================+
| Animal | Animals | Animales |
+--------------+----------------------------+--------------------------+
| Organizacion | Organizacions | Organizaciones |
+--------------+----------------------------+--------------------------+
| Estacion | Estacions | Estaciones |
+--------------+----------------------------+--------------------------+
| Regulador | Reguladors | Reguladores |
+--------------+----------------------------+--------------------------+
查看框架,我意识到在文件中vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php
使用英语语言的 Doctrine Inflector 规则来创建 Laravel 使用的变形器实例:
use Doctrine\Inflector\Rules\English;
public static function inflector()
{
static $inflector;
if (is_null($inflector)) {
$inflector = new Inflector(
new CachedWordInflector(new RulesetInflector(
English\Rules::getSingularRuleset()
)),
new CachedWordInflector(new RulesetInflector(
English\Rules::getPluralRuleset()
))
);
}
return $inflector;
}
我编辑了文件以使用西班牙规则:
use Doctrine\Inflector\Rules\Spanish;
public static function inflector()
{
static $inflector;
if (is_null($inflector)) {
$inflector = new Inflector(
new CachedWordInflector(new RulesetInflector(
Spanish\Rules::getSingularRuleset()
)),
new CachedWordInflector(new RulesetInflector(
Spanish\Rules::getPluralRuleset()
))
);
}
return $inflector;
}
因此,复数形式正如我对西班牙语单词的预期一样。
有什么方法可以告诉 laravel 使用西班牙语规则而不必更改供应商文件夹中的代码?
附言
以前我使用了一个服务提供者,它扩展了变形器中复数规则中不规则单词的数组:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Doctrine\Common\Inflector\Inflector;
class SpanishPluralizerServiceProvider extends ServiceProvider
{
public function register()
{
Inflector::rules('plural', [
'irregular' => [
"organizacion" => "organizaciones",
"proovedor" => "proovedores",
"ubicacion" => "ubicaciones",
"estacion" => "estaciones",
"operador" => "operadores",
"sucursal" => "sucursales",
"entidad" => "entidades",
"ciudad" => "ciudades",
"legal" => "legales",
"pais" => "paises"
]
]);
}
public function boot()
{
//
}
}
但这似乎不再适用于 Laravel 7 和 Laravel 8
提前感谢您的时间和帮助。