繁体   English   中英

如何覆盖Laravel包的JSON转换?

[英]How to override JSON translations for a Laravel package?

我为Laravel> = 5.4构建了一个验证包 ,它使用JSON转换文件作为验证消息

我想让应用程序覆盖该消息翻译。

Laraveltrans() 提供了命名空间 但是,看起来只有常规的.php转换才允许使用命名空间。

我无法通过JSON翻译来实现。

目前, 这是我返回验证消息的方式

public function message($message, $attribute, $rule, $parameters)
{
    return __('The domain for :attribute is not allowed. Please use another email address.', ['attribute' => $attribute]);
}

这就是我在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/ )中的键替代将优先。

这里参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM