在Laravel中覆盖包本地化

时间:2013-10-12 19:42:16

标签: php laravel laravel-4

它应该是“微不足道的”,但在对#laravel irc频道进行一些聊天之后,我发现它现在可能是不可能的。但是我会在这之前问这个丑陋的马,只是为了让项目完成。如果通过当前方式确实不可能,我将在github上填写请求(在将项目交给我的客户之后)。

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

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

  • /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.phpreturn array('alerts' => ......)
  • /app/lang/pt_BR/packages/zizaco/confide/confide/alerts.phpreturn array('wrong_credentials' => ...)
  • /app/lang/packages/zizaco/confide/pt_BR/confide.phparray('alerts' => array('wrong_credentials' => '...')) - /app/lang/packages/zizaco/confide/pt_BR/confide/alerts.php return array('wrong_credentials' => ...)

关于我缺少什么的任何线索?或者Laravel4真的缺少这个功能吗?

提前致谢!

2 个答案:

答案 0 :(得分:7)

实际上它修复了Laravel 4.1核心

您现在可以通过执行

覆盖它
app/lang/packages/(locale)/confide/confide.php

检查这个

laravel 4 language issue

correct path for overriding package languages

答案 1 :(得分:4)

所以,至于今天,Laravel确实缺乏此功能。 我已经要求创建issue on github

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

您需要做的只是在require

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

并替换'Illuminate\Translation\TranslationServiceProvider'

中的原始翻译包(/config/app.php
'providers' => array(
    //'Illuminate\Translation\TranslationServiceProvider',
    // ...
    'Orchestra\Translation\TranslationServiceProvider',
),

那就是它!现在,app/lang/en/packages/confide/confide.php会做到这一点! (请注意路径应为/ packages / packagename /,而不是/ packages / vendor / packagename /

它真的让我免于头痛,希望别人也觉得这很有用。