【问题标题】:How to override Laravel's language files with your package language如何用你的包语言覆盖 Laravel 的语言文件
【发布时间】:2019-01-11 21:00:55
【问题描述】:

我正在尝试使用我的包中的语言覆盖resources/lang/en下的默认 laravel 英语语言包。

该软件包只是将自己的语言文件发布到例如resources/lang/vendor/*package-name*/de 并包含与 laravel 标准 lang 文件相同的文件,例如 validation.phpauth.php

有没有办法告诉 Laravel 使用这些包翻译?

【问题讨论】:

    标签: laravel package translation


    【解决方案1】:

    来自documentation

    包翻译文件通常使用 双冒号语法。

    在你的包的服务提供者的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')
        ];
    }
    

    如果您手动创建 Validator 实例,您可以这样做:

    $messages = [
        'field' => trans('acme::validation.field')
    ];
    
    $validator = Validator::make($input, $rules, $messages);
    

    编辑:由于resources/lang/en/validation.php 包含一个键值对数组,您可以将文件的内容替换为:

    <?php
    
    return trans('acme::validation');
    

    并假设您的包的验证文件正在返回一个键值对数组,这应该可以解决问题。

    【讨论】:

    • 我做到了。但我需要告诉 Laravel 它应该主要引用已发布的语言文件。如果我现在在我的应用程序中提出请求并对其进行验证,我会收到英文错误。
    • 有没有办法告诉 Laravel 全局使用包的 lang 文件?因为否则我必须为我在包中验证的每个请求编写自定义消息。
    • 据我了解,没有。你可以看看这个trait。对验证文件的引用是硬编码的。
    • @MangoD,找到了一个小技巧来完成它,应该可以。
    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2023-04-05
    • 2018-03-31
    • 1970-01-01
    相关资源
    最近更新 更多