如何用你的包语言覆盖 Laravel 的语言文件
How to override Laravel's language files with your package language
我正在尝试用我的包中的语言覆盖 resources/lang/en
下的默认 laravel 英语语言包。
该软件包只是将自己的语言文件发布到例如resources/lang/vendor/*package-name*/de
并且其中包含与 laravel 标准 lang 文件相同的文件,如 validation.php
或 auth.php
。
有没有办法告诉 Laravel 使用这些包翻译?
Package translation files are typically referenced using a
double-colon syntax.
在您的包的服务提供商的 boot
方法中加载您的翻译时,您需要告诉 Laravel 它的位置。所以假设你的包的名字是 acme
,你会有这样的东西。
public function boot()
{
$this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'acme');
}
然后加载翻译,你会做这样的事情:
trans('acme::file.line');
编辑:如果您想提供自定义验证消息,您需要在 Form Request 中添加一个 messages()
方法。例如:
public function messages()
{
return [
'field' => trans('acme::validation.field')
];
}
如果您手动创建验证器实例,您可以这样做:
$messages = [
'field' => trans('acme::validation.field')
];
$validator = Validator::make($input, $rules, $messages);
编辑:由于 resources/lang/en/validation.php
包含键值对数组,您可以将文件内容替换为:
<?php
return trans('acme::validation');
并假设您的包的验证文件正在返回一个键值对数组,这应该可以解决问题。
我正在尝试用我的包中的语言覆盖 resources/lang/en
下的默认 laravel 英语语言包。
该软件包只是将自己的语言文件发布到例如resources/lang/vendor/*package-name*/de
并且其中包含与 laravel 标准 lang 文件相同的文件,如 validation.php
或 auth.php
。
有没有办法告诉 Laravel 使用这些包翻译?
Package translation files are typically referenced using a double-colon syntax.
在您的包的服务提供商的 boot
方法中加载您的翻译时,您需要告诉 Laravel 它的位置。所以假设你的包的名字是 acme
,你会有这样的东西。
public function boot()
{
$this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'acme');
}
然后加载翻译,你会做这样的事情:
trans('acme::file.line');
编辑:如果您想提供自定义验证消息,您需要在 Form Request 中添加一个 messages()
方法。例如:
public function messages()
{
return [
'field' => trans('acme::validation.field')
];
}
如果您手动创建验证器实例,您可以这样做:
$messages = [
'field' => trans('acme::validation.field')
];
$validator = Validator::make($input, $rules, $messages);
编辑:由于 resources/lang/en/validation.php
包含键值对数组,您可以将文件内容替换为:
<?php
return trans('acme::validation');
并假设您的包的验证文件正在返回一个键值对数组,这应该可以解决问题。