如何用你的包语言覆盖 Laravel 的语言文件

Man*_*o D 2 translation package laravel

我试图resources/lang/en用我的包中的语言覆盖默认的 laravel 英语语言包。

该包只是将自己的语言文件发布到eg resources/lang/vendor/*package-name*/de,并且其中包含与laravel标准lang文件相同的文件,例如validation.php或auth.php。

有没有办法告诉 Laravel 使用这些包翻译?

Moz*_*mil 7

从文档来看,

包翻译文件通常使用双冒号语法引用。

在包的服务提供者方法中加载翻译时boot,您需要告诉 Laravel 它的位置。假设你的包的名称是acme,你会有这样的东西。

public function boot()
{
    $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'acme');
}
Run Code Online (Sandbox Code Playgroud)

然后要加载翻译,您可以执行以下操作:

trans('acme::file.line');
Run Code Online (Sandbox Code Playgroud)

编辑:如果您想提供自定义验证消息,您需要在Form Requestmessages()中添加一个方法。例如:

public function messages() 
{
    return [
        'field' => trans('acme::validation.field')
    ];
}
Run Code Online (Sandbox Code Playgroud)

如果您手动创建 Validator 实例,您可以这样做:

$messages = [
    'field' => trans('acme::validation.field')
];

$validator = Validator::make($input, $rules, $messages);
Run Code Online (Sandbox Code Playgroud)

编辑:由于resources/lang/en/validation.php包含键值对数组,您可以将文件的内容替换为:

<?php

return trans('acme::validation');
Run Code Online (Sandbox Code Playgroud)

并假设您的包的验证文件返回一个键值对数组,这应该可以解决问题。