覆盖 Laravel 中的包本地化


Override package localization in Laravel

这应该是"微不足道的",但是在 #laravel irc频道上聊天后,我发现现在可能是不可能的。但是在以丑陋的方式完成项目之前,我会在这里问它。如果通过目前的方式确实不可能,我将在 github 上填写请求(在将项目移交给我的客户之后(。

我正在使用Zizaco'Confide来处理服务中的身份验证。它在任何地方都使用 Laravel Lang来获取包的 8 种捆绑语言之一的字符串。但是我需要覆盖其中一些字符串,并且我不想修改包文件(这会破坏 Composer 的整个目的(。我该怎么做?

例如,我需要修改pt_BR语言的confide::confide.alerts.wrong_credentials。到目前为止我尝试过:

  • /app/lang/pt_BR/confide.php文件,内容return array('alerts' => array('wrong_credentials' => '...')) 。它适用于Lang::get('confide.alerts.wrong_credentials'),但不适用于命名空间Lang::get('confide::confide.alerts.wrong_credentials')
  • /app/lang/pt_BR/packages/zizaco/confide/confide.php return array('alerts' => ......)
  • /app/lang/pt_BR/packages/zizaco/confide/confide/alerts.phpreturn array('wrong_credentials' => ...)
  • /app/lang/packages/zizaco/confide/pt_BR/confide.php array('alerts' => array('wrong_credentials' => '...')) - /app/lang/packages/zizaco/confide/pt_BR/confide/alerts.php return array('wrong_credentials' => ...)

关于我错过了什么的任何线索?还是 Laravel4 真的缺少此功能?

提前感谢!

实际上它修复在Laravel 4.1核心中

您现在可以通过执行以下操作来覆盖它

app/lang/packages/(locale)/confide/confide.php

检查这个

拉维尔4语言问题

覆盖包语言的正确路径

所以,就今天而言,Laravel确实缺乏这个功能。我已经要求它在 github 上创建一个问题。

同时,可以使用crynobone的Orchestra Platform 2翻译组件无缝实现此功能,该组件可在此处找到。

您需要做的就是将其require composer.json

{
    "require": {
        "orchestra/translation": "2.0.*"
    }
}

并替换/config/app.php中的原始翻译包('Illuminate'Translation'TranslationServiceProvider'

'providers' => array(
    //'Illuminate'Translation'TranslationServiceProvider',
    // ...
    'Orchestra'Translation'TranslationServiceProvider',
),

就是这样!现在,拥有app/lang/en/packages/confide/confide.php就可以了!(请注意,路径应该是/packages/packagename/,而不是/packages/vendor/packagename/

它真的让我免于头疼,希望其他人也觉得这有用。