2016-06-12 4 views
0

Возможно ли сделать laravel без учета регистра символов? например, возвращать тот же переведенный термин для обоих Action и action:Laravel нечувствительная к регистру локализация

lang/trans_form.php 

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

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

ответ

2

Вы можете расширить 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, 
] 
Смежные вопросы