【问题标题】:Only use translations from messages.php in Laravel 5仅在 Laravel 5 中使用来自 messages.php 的翻译
【发布时间】:2015-06-09 05:41:36
【问题描述】:

我想将我们所有的翻译加载到resources/lang/en/messages.phpresources/lang/fr/messages.php 的平面数组中

我想在视图中简单地用trans('key')而不是trans('file.key')来翻译它们

无论如何要启用此行为?似乎它不是开箱即用的。谢谢。

【问题讨论】:

  • 您可以创建自己的助手,只需调用trans('messages.' . $key)
  • 是的,好点,但在这种情况下,我想继续使用trans函数
  • 好吧,trans() 是在核心代码中定义的,但它被包装在一个 if(!function_exists()) { } 块中,因此您可以通过在您自己的 function trans() 中模仿它的功能来覆盖它,该功能在主要助手。
  • 不,不可能,该函数定义得非常早,它在require __DIR__.'/../bootstrap/autoload.php';的index.php中加载
  • 所以在此之前定义你的。或者吸收它并使用不同的函数名称。

标签: laravel laravel-5


【解决方案1】:

弄清楚如何,首先在 App\Providers 中定义您自己的提供程序。让它改用你自己的自定义类。

<?php namespace App\Providers;

use App\Utilities\TranslationUtility;
use Illuminate\Translation\TranslationServiceProvider;

class SimpleTranslationProvider extends TranslationServiceProvider {

/**
 * Register the service provider.
 *
 * @return void
 */
public function register()
{
    $this->registerLoader();

    $this->app->singleton('translator', function($app)
    {
        $loader = $app['translation.loader'];

        $locale = $app['config']['app.locale'];

        $trans = new TranslationUtility($loader, $locale);

        $trans->setFallback($app['config']['app.fallback_locale']);

        return $trans;
    });
}

}

自定义类:

<?php namespace App\Utilities;

use Illuminate\Translation\Translator;

class TranslationUtility extends Translator {

    public function get($key, array $replace = array(), $locale = NULL)
    {
        return parent::get('messages.' . $key);
    }
}

然后在 config/app.php 中添加你的服务提供者而不是 'Illuminate\Translation\TranslationServiceProvider'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2021-04-19
    相关资源
    最近更新 更多