如何覆盖 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/) 优先。

Reference here