LARAVEL VIEW에서 현재 언어를 어떻게 찾을 수 있습니까?
-
13-12-2019 - |
문제
저는 웹 응용 프로그램의 현지화를 위해 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'및 '기본값은 해당 옵션을 변경하려면 구성 섹션을 참조하십시오).예를 들어 사용자는 이제 다음 주소를 사용하여 두 가지 언어로 액세스 할 수 있습니다.
i App::getLocale()
메소드가 문서 .
이 방법을 모든 곳에서 사용할 수 있습니다.어딘가에 오류가 발생하면 App::setLocale('EN')
를 사용하여 작동합니다.
LARAVLE 5.0을 사용하고 있습니다.
Lang
클래스는 특별히 올바른 언어를 출력 할 때와 언어를 내부적으로 관리하는 것으로 나타납니다.
API를 통해이 작업을 수행하고 URI를 구문 분석하는 방법은 언어가 적절한 조치 과정을 보일 것입니다.
항상 URI에서 언어 문자열을 검색하려면이 작업을 수행 할 수 있습니다.
$language = URI::segment(1);
.