如何覆盖Laravel包的JSON转换?

时间:2018-08-13 12:08:47

标签: php laravel package translation

我为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/内的软件包目录中加载翻译。

如果我从应用程序级别加载了翻译,我将要求应用程序始终发布翻译文件以正确加载它们。我想避免执行此额外步骤。

哪种方法可以解决这个问题?


我将进行相应的编辑以提供尽可能清晰的信息。

谢谢。

1 个答案:

答案 0 :(得分:0)

经过研究,我找到了解决Laravel提出的问题的方法。

主项目 JSON转换文件(不在lang/vendor中,但直接在lang/中)的

键替代将优先。 / p>

Reference here