根据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,看看是否可以清除,但没有运气。
谢谢!
答案 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
。在此文件中,您只应定义要覆盖的翻译字符串。您未覆盖的所有翻译字符串仍将从软件包的原始语言文件中加载。