如何覆盖 Laravel 包的 JSON 翻译?
How to override JSON translations for a Laravel package?
我为 Laravel >= 5.4 构建了 a validation package,它使用 JSON 翻译文件作为 验证消息 。
我想让应用程序覆盖该消息翻译。
Laravel provides namespacing trans()
。但是,似乎只有常规 .php
翻译允许命名空间。
我无法通过 JSON 翻译实现这一目标。
目前,this is how I'm returning the validation message:
public function message($message, $attribute, $rule, $parameters)
{
return __('The domain for :attribute is not allowed. Please use another email address.', ['attribute' => $attribute]);
}
我就是这样 loading the translation files in Service Provider:
public function boot()
{
$this->loadJSONTranslationsFrom(__DIR__.'/../../../lang', 'email-domain-blacklist');
$this->publishes([
__DIR__.'/../../../lang' => resource_path('lang/vendor/email-domain-blacklist'),
]);
$this->publishConfig();
// Add custom validation rules
Validator::extend('blacklist', "Alariva\EmailDomainBlacklist\Validator@validate");
// Add custom validation messages
Validator::replacer('blacklist', "Alariva\EmailDomainBlacklist\Validator@message");
}
如果我发布翻译文件并在 resources/lang/vendor/email-domain-blacklist/*.json
下更改它们,我将看不到任何变化,因为包将从 vendor/
.
内的包目录加载翻译
如果我从应用程序级别加载翻译,我会要求应用程序始终发布翻译文件以便正确加载它们。我想避免这个额外的步骤。
解决这个问题的优雅方法是什么?
我会相应地进行编辑,以提供尽可能多的清晰信息。
提前致谢。
经过一番研究,我找到了 Laravel 提出的解决方法。
键覆盖在主项目JSON翻译文件中(不在lang/vendor
,而是直接lang/
) 优先。
我为 Laravel >= 5.4 构建了 a validation package,它使用 JSON 翻译文件作为 验证消息 。
我想让应用程序覆盖该消息翻译。
Laravel provides namespacing trans()
。但是,似乎只有常规 .php
翻译允许命名空间。
我无法通过 JSON 翻译实现这一目标。
目前,this is how I'm returning the validation message:
public function message($message, $attribute, $rule, $parameters)
{
return __('The domain for :attribute is not allowed. Please use another email address.', ['attribute' => $attribute]);
}
我就是这样 loading the translation files in Service Provider:
public function boot()
{
$this->loadJSONTranslationsFrom(__DIR__.'/../../../lang', 'email-domain-blacklist');
$this->publishes([
__DIR__.'/../../../lang' => resource_path('lang/vendor/email-domain-blacklist'),
]);
$this->publishConfig();
// Add custom validation rules
Validator::extend('blacklist', "Alariva\EmailDomainBlacklist\Validator@validate");
// Add custom validation messages
Validator::replacer('blacklist', "Alariva\EmailDomainBlacklist\Validator@message");
}
如果我发布翻译文件并在 resources/lang/vendor/email-domain-blacklist/*.json
下更改它们,我将看不到任何变化,因为包将从 vendor/
.
如果我从应用程序级别加载翻译,我会要求应用程序始终发布翻译文件以便正确加载它们。我想避免这个额外的步骤。
解决这个问题的优雅方法是什么?
我会相应地进行编辑,以提供尽可能多的清晰信息。
提前致谢。
经过一番研究,我找到了 Laravel 提出的解决方法。
键覆盖在主项目JSON翻译文件中(不在lang/vendor
,而是直接lang/
) 优先。