How can I find the current language in a Laravel view?

localization laravel

36580 просмотра

10 ответа

I'm using the Laravel Lang class for localization of my web app. I've added two languages to the languages array in application/config/application.php. This changes the default language it uses for localization to whatever the first part of the URI indicates (e.g. bla.com/en/bla and bla.com/co/bla). Now I need to be able to check what the current default language is in my view. However, the Lang class provides no way of checking this as far as I've been able to figure out, as the Lang::$language variable is protected. Is there any way of checking this apart from manually parsing the URI?

Автор: BenjaminRH Источник Размещён: 13.07.2019 01:38

Ответы (10)


9 плюса

Решение

Ответ Бенджамина RH очень хорош, и его предложенный подход работает отлично. Я немного улучшил фрагмент. Теперь он определяет язык браузера и проверяет, поддерживается ли этот язык в соответствии с файлом конфигурации приложения.

Это быстрый взлом, но он работает на моем приложении. Обратите внимание, что язык приложения также установлен. Не стесняйтесь использовать руду, чтобы улучшить ее.

Route::filter('before', function()
{
    // current uri language ($lang_uri)
    $lang_uri = URI::segment(1);

    // Set default session language if none is set
    if(!Session::has('language'))
    {
        // use lang in uri, if provided
        if(in_array($lang_uri, Config::get('application.languages')))
        {
            $lang = $lang_uri;  
        }
        // detect browser language
        elseif(isset(Request::server('http_accept_language')))
        {
            $headerlang = substr(Request::server('http_accept_language'), 0, 2);

            if(in_array($headerlang, Config::get('application.languages')))
            {
                // browser lang is supported, use it
                $lang = $headerlang;
            }
            // use default application lang
            else
            {
                $lang = Config::get('application.language');
            }
        }
        // no lang in uri nor in browser. use default
        else 
        {
                // use default application lang
                $lang = Config::get('application.language');            
        }

        // set application language for that user
        Session::put('language', $lang);
        Config::set('application.language',  $lang);
    }
    // session is available
    else
    {
        // set application to session lang
        Config::set('application.language', Session::get('language'));
    }

    // prefix is missing? add it
    if(!in_array($lang_uri, Config::get('application.languages'))) 
    {
        return Redirect::to(URI::current());
    }
    // a valid prefix is there, but not the correct lang? change app lang
    elseif(in_array($lang_uri, Config::get('application.languages')) AND $lang_uri != Config::get('application.language'))
    {
        Session::put('language', $lang_uri);
        Config::set('application.language',  $lang_uri);    
    }
});
Автор: aebersold Размещён: 21.11.2012 02:28

22 плюса

Самый простой способ узнать текущий язык вашего сайта в Laravel:

Lang::locale();

https://laravel.com/api/5.8/Illuminate/Translation/Translator.html#method_locale

Он отличается от этой команды, которая возвращает язык по умолчанию для вашего сайта:

Config::get('app.locale');
Автор: Erwan Размещён: 08.07.2015 04:40

6 плюса

В более новых версиях Laravel вы можете получить текущий язык с:

Config::get('app.locale');
Автор: Pedro Moreira Размещён: 02.09.2014 06:35

4 плюса

Я нашел решение проблемы с языком (благодаря nickstr на IRC и принятому ответу на этот вопрос). Он включает в себя сохранение текущего языка в качестве переменной сеанса, которая обновляется при изменении сегмента языка uri.

Route::filter('before', function()
{
    // Do stuff before every request to your application...

    // Default language ($lang) & current uri language ($lang_uri)
    $lang = 'he';
    $lang_uri = URI::segment(1);

    // Set default session language if none is set
    if(!Session::has('language'))
    {
        Session::put('language', $lang);
    }

    // Route language path if needed
    if($lang_uri !== 'en' && $lang_uri !== 'he')
    {
        Return Redirect::to($lang.'/'.URI::current());
    }
    // Set session language to uri
    elseif($lang_uri !== Session::get('language'))
    {
        Session::put('language', $lang_uri);
    }
});
Автор: BenjaminRH Размещён: 03.10.2012 12:02

4 плюса

Альтернативой, немного более коротким способом, может быть использование чего-то вроде этого:

app()->getLocale()

Преимущество этого состоит в том, что IDE, такие как PHPStorm, распознают эту функцию и могут помочь вам развиваться намного быстрее.

Автор: ThatMSG Размещён: 26.01.2017 11:04

4 плюса

Это будет работать нормально

lang="{{ app()->getLocale() }}"
Автор: NIRAJ KUMAR Размещён: 20.08.2017 10:02

3 плюса

Это может помочь. Config :: получить ( '') application.language

Автор: Johny Salas Размещён: 07.02.2013 04:43

2 плюса

Ты можешь использовать

https://github.com/mcamara/laravel-localization

Laravel Localization использует URL-адрес, указанный для запроса. Для достижения этой цели, группа должна быть добавлена ​​в файл rout.php. Он отфильтрует все страницы, которые должны быть локализованы.

    // app/routes.php

    Route::group(array('prefix' => LaravelLocalization::setLanguage()), function()
    {
        /** ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP **/
        Route::get('/', function()
        {
            return View::make('hello');
        });

        Route::get('test',function(){
            return View::make('test');
        });
    });

    /** OTHER PAGES THAT SHOULD NOT BE LOCALIZED **/

Как только эта группа добавлена ​​в файл маршрутов, пользователь может получить доступ ко всем языкам, добавленным в «languagesAllowed» («en» и «es» по умолчанию, посмотрите в разделе конфигурации, чтобы изменить эту опцию). Например, пользователь теперь может получить доступ к двум разным языкам, используя следующие адреса:

http://laravel.com/en

http://laravel.com/es

http://laravel.com

Автор: Sangar82 Размещён: 04.10.2013 10:03

1 плюс

Я использую App::getLocale()это, вероятно, наиболее поддерживаемый способ, поскольку App::setLocale('EN')метод используется в документации .

Вы можете использовать этот метод везде. Если он где-то пропустил ошибку, вы можете использовать \App::...его для работы.

Я использую Laravel 5.0.

Автор: Thomas Venturini Размещён: 22.11.2016 10:43

0 плюса

LangКласс специально для вывода правильного языка и , как вы говорите , управляет языком внутри.

Просматривая API, нет способа помочь вам напрямую с этим, и синтаксический анализ URI, чтобы получить язык, может показаться подходящим.

Вы всегда можете просто сделать это, чтобы получить языковую строку в URI:

$language = URI::segment(1);

Изучение Laravel Запросы

Автор: David Barker Размещён: 03.10.2012 10:48
Вопросы из категории :
32x32