문제

저는 웹 응용 프로그램의 현지화를 위해 LARAVLE LANG 클래스를 사용하고 있습니다.application/config/application.php의 언어 배열에 두 가지 언어를 추가했습니다.이는 URI의 첫 번째 부분이 (예 : BLA.COM/EN/BRA 및 bla.com/co/bla)를 나타내는 모든 부분에 대한 현지화에 사용되는 기본 언어를 변경합니다.이제 현재 기본 언어가 내 뷰에있는 것을 확인할 수 있어야합니다.그러나 Lang 클래스는 Lang::$language 변수가 보호되어 있으므로 알아낼 수 있었던 한이를 확인하는 방법을 선택할 수 없습니다.수동으로 URI를 구문 분석하는 것과는 별도로 확인하는 방법이 있습니까?

도움이 되었습니까?

해결책

Benjaminrh의 대답은 매우 좋으며, 그의 제안 된 접근법은 완벽하게 작동합니다.스 니펫을 조금 개선했습니다.이제 브라우저 언어를 감지하고 응용 프로그램의 구성 파일에 따라 해당 언어가 지원되는지 확인합니다.

빠른 해킹이지만 내 앱에서 작동합니다.응용 프로그램 언어도 지금 설정되어 있습니다.Ore가 개선되기를 자유롭게 느끼십시오.

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);    
    }
});
.

다른 팁

LARAVLE에서 웹 사이트의 현재 언어를 알 수있는 가장 깨끗한 방법은 다음과 같이 나타납니다.

Lang::locale();
.

https://laravel.com/api/5.8/illuminate./ translation/translator.html#method_locale

웹 사이트의 기본 언어를 반환하는이 명령과 다릅니다.

Config::get('app.locale');
.

최신 LARAVEL 버전에서는 다음 언어를 다음과 같이 가져올 수 있습니다 :

Config::get('app.locale');
.

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);
    }
});
.

대안, 조금 더 짧은 방법이 다음과 같이 사용될 수 있습니다 :

app()->getLocale()
.

PHPSTORM과 같은 IDE는이 기능을 인식하고 훨씬 더 빠르게 개발할 수 있도록 도와줍니다.

이것은 잘 작동합니다

lang="{{ app()->getLocale() }}"
.

도움이 될 수 있습니다. config :: get ( 'application.language')

를 사용할 수 있습니다.
https://github.com/mcamara/laravel-localization
.

LARAVEL LOCAILIZATION은 요청에 대해 주어진 URL을 사용합니다.이 목적을 달성하기 위해 그룹을 routes.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 **/
.

이 그룹이 라우트 파일에 추가되면 사용자는 '언어로 된'언어로 추가 된 모든 언어에 액세스 할 수 있습니다. ( 'ko'및 '기본값은 해당 옵션을 변경하려면 구성 섹션을 참조하십시오).예를 들어 사용자는 이제 다음 주소를 사용하여 두 가지 언어로 액세스 할 수 있습니다.

http://laravel.com/en

http://laravel.com/s

http://laravel.com

i App::getLocale() 메소드가 문서 .

이 방법을 모든 곳에서 사용할 수 있습니다.어딘가에 오류가 발생하면 App::setLocale('EN')를 사용하여 작동합니다.

LARAVLE 5.0을 사용하고 있습니다.

Lang 클래스는 특별히 올바른 언어를 출력 할 때와 언어를 내부적으로 관리하는 것으로 나타납니다.

API를 통해이 작업을 수행하고 URI를 구문 분석하는 방법은 언어가 적절한 조치 과정을 보일 것입니다.

항상 URI에서 언어 문자열을 검색하려면이 작업을 수행 할 수 있습니다.

$language = URI::segment(1);
.

Laravel Requests 검사

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top