如何在Laravel 5.1

时间:2016-12-21 19:45:16

标签: localization laravel-5.1

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

  

例如,如果您需要覆盖messages.php中针对名为skyrim / hearthfire的包的英语语言行,您可以将语言文件放在: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,看看是否可以清除,但没有运气。

谢谢!

2 个答案:

答案 0 :(得分:1)

事实证明文件夹结构需要使用NAMESPACE作为包,camelcase,而不是遵循与包或文档中相同的命名约定/目录结构。因此,对于我的示例,用于企业实体包的命名空间是EnterpriseEntity,camelcased将是enterpriseEntity。 正确的目录结构是:

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

答案 1 :(得分:0)

来自Laravel官方文档

覆盖软件包语言文件

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

因此,例如,如果您需要覆盖messages.php中名为skyrim/hearthfire的软件包的英语翻译字符串,则应将语言文件放在以下位置:resources/lang/vendor/hearthfire/en/messages.php。在此文件中,您只应定义要覆盖的翻译字符串。您未覆盖的所有翻译字符串仍将从软件包的原始语言文件中加载。