【问题标题】:How do I override package language files in Laravel 5.1如何在 Laravel 5.1 中覆盖包语言文件
【发布时间】:2017-05-07 08:22:20
【问题描述】:

根据 Laravel 文档:https://laravel.com/docs/5.1/localization#overriding-package-language-files

例如,如果您需要为名为 skyrim/hearthfire 的包覆盖messages.php 中的英语行,您可以将语言文件放置在:resources/lang/vendor/hearthfire/en/messages.php。

我目前有我的项目中包含的包 activewebsite/enterprise-entity 包。它包含一个语言文件:

vendor/activewebsite/enterprise-entity/src/resources/lang/en/phone.php

此文件包含电话号码类型的翻译:

'phone_1' => 'Home',
'phone_2' => 'Work',
'phone_3' => 'Mobile',
'phone_4' => 'Office',
'phone_5' => 'Fax',
'phone_6' => 'Fax 2',
'phone_7' => 'Home 2',
'phone_8' => 'Direct',

按照上面的示例,我尝试通过创建以下目录来覆盖此文件:

resources/lang/vendor/enterprise-entity/en/phone.php 

包含一个特定于该项目的附加电话号码:

    'phone_9' => 'Rapid Rewards Text Alert Number',

但是翻译没有通过前端。我能够让翻译出现的唯一方法是编辑企业实体包中的语言文件。

我找到了这个帖子:https://octobercms.com/forum/post/localication-problems-where-to-overwrite-octobercms-lang-settings-in-general 其他用户似乎有类似问题,但建议他们使用目录结构:

/lang/{locale}/{vendor}/{plugin}/lang.php

所以我尝试了

/lang/en/activewebsite/enterprise-entity/phone.php

没有运气。

谁能告诉我这里可能出了什么问题?我尝试在每次更改后运行 php artisan optimize 以查看是否可以解决问题,但没有运气。

谢谢!

【问题讨论】:

  • 我在任何地方都找不到你提到的包裹,是不是虚构的包裹?

标签: localization laravel-5.1


【解决方案1】:

原来文件夹结构需要使用包的名称空间,驼峰式,不遵循与包或文档中相同的命名约定/目录结构。因此,对于我的示例,用于企业实体包的命名空间是 EnterpriseEntity,驼峰式命名空间将是 enterpriseEntity。 正确的目录结构是:

resources/lang/vendor/enterpriseEntity/en/phone.php

【讨论】:

    【解决方案2】:

    来自 Laravel 官方文档

    覆盖包语言文件

    某些软件包可能附带自己的语言文件。您可以通过将文件放在resources/lang/vendor/{package}/{locale} 目录中来覆盖它们,而不是更改包的核心文件来调整这些行。

    因此,例如,如果您需要为名为@9​​87654323@ 的包覆盖messages.php 中的英文翻译字符串,则应将语言文件放置在:resources/lang/vendor/hearthfire/en/messages.php。在此文件中,您应该只定义您希望覆盖的翻译字符串。您未覆盖的任何翻译字符串仍将从包的原始语言文件中加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 2011-02-08
      • 1970-01-01
      • 2018-03-31
      相关资源
      最近更新 更多