Laravel不区分大小写

时间:2016-06-12 15:13:58

标签: php localization internationalization laravel-5.2

是否有可能使laravel对trans语句不敏感?例如,为Actionaction返回相同的翻译术语:

  lang/trans_form.php 

return [
 'Action' => 'اقدامات',

 //I'm not happy with writing this one,it would be better if laravel do it itself!
 'action' => 'اقدامات',
]

1 个答案:

答案 0 :(得分:3)

您可以扩展Translator类,并在另一个扩展的TranslationServiceProvider类中使用它。

可以说,我们会将其存储在app/Extended文件夹中。

创建一个扩展的翻译类,如下所示。只需将密钥更改为小写并将其传递给父级。

<?php

namespace App\Extended;

use Illuminate\Translation\Translator;

class ExtendedTranslator extends Translator
{
    public function get($key, array $replace = [], $locale = null, $fallback = true)
    {
        $key = mb_strtolower($key);
        return parent::get($key, $replace, $locale, $fallback);
    }
}

然后在扩展的TranslationServiceProvider中使用我们新创建的扩展转换器类

<?php

namespace App\Extended;

use Illuminate\Translation\TranslationServiceProvider;

class ExtendedTranslationServiceProvider extends TranslationServiceProvider
{
    public function register()
    {
        $this->registerLoader();
        $this->app->singleton('translator', function ($app) {
            $loader = $app['translation.loader'];
            $locale = $app['config']['app.locale'];
            $trans = new ExtendedTranslator($loader, $locale);
            $trans->setFallback($app['config']['app.fallback_locale']);
            return $trans;
        });
    }
}

最后,注册扩展的ExtendedTranslationServiceProvider而不是config/app.php中的原始扩展。

'providers' => [
    // Illuminate\Translation\TranslationServiceProvider::class,
    App\Extended\ExtendedTranslationServiceProvider::class,
]