我正在尝试在Laravel应用程序中建立一个良好的本地化系统。基本上我所追求的是这个:
如果用户登录并选择了一种语言,我想存储该值,并且下次登录时,系统会自动使用URL中的正确语言环境重定向他。
如果用户未登录但已选择语言,我希望存储在会话中,并使用该会话正确设置语言环境。
如果用户没有选择语言,我想使用http://www.wipmania.com/来设置语言环境。
我能够将所选值存储在Users表和会话中。问题是如何处理重定向。我试着像这样设置一个beforeFilter:
if(\Auth::check()) {
$user = \User::find(\Auth::user()->id);
if($user->localization != NULL) {
\LaravelLocalization::setLocale($user->localization);
\Redirect::to(\LaravelLocalization::getLocalizedURL($user->localization));
} else if(\Session::get('theSetLocale', 'none') != 'none') {
\LaravelLocalization::setLocale(\Session::get('theSetLocale', 'none'));
\Redirect::to(\LaravelLocalization::getLocalizedURL(\Session::get('theSetLocale', 'none')));
} else {
$ip = \Request::getClientIp();
$thestrings = 'http://api.wipmania.com/' . $ip . '?' . 'www.markmaster.com';
$country = file_get_contents($thestrings);
if ($country == 'NO') {
\LaravelLocalization::setLocale('no');
\Redirect::to(\LaravelLocalization::getLocalizedURL( 'no'));
} else if ($country == 'SE') {
\LaravelLocalization::setLocale('se');
\Redirect::to(\LaravelLocalization::getLocalizedURL( 'se'));
} else if ($country == 'DK') {
\LaravelLocalization::setLocale('dk');
\Redirect::to(\LaravelLocalization::getLocalizedURL( 'dk'));
} else {
\LaravelLocalization::setLocale('en');
\Redirect::to(\LaravelLocalization::getLocalizedURL( 'en'));
}
}
}else if(\Session::get('theSetLocale', 'none') != 'none') {
\LaravelLocalization::setLocale(\Session::get('theSetLocale', 'none'));
\Redirect::to(\LaravelLocalization::getLocalizedURL(\Session::get('theSetLocale', 'none')));
} else {
$ip = \Request::getClientIp();
$thestring = 'http://api.wipmania.com/' . $ip . '?' . 'markmaster.com';
$country = file_get_contents($thestring);
if ($country == 'NO') {
\LaravelLocalization::setLocale('no');
\Redirect::to(\LaravelLocalization::getLocalizedURL( 'no'));
} else if ($country == 'SE') {
\LaravelLocalization::setLocale('se');
\Redirect::to(\LaravelLocalization::getLocalizedURL( 'se'));
} else if ($country == 'DK') {
\LaravelLocalization::setLocale('dk');
\Redirect::to(\LaravelLocalization::getLocalizedURL( 'dk'));
} else {
\LaravelLocalization::setLocale('en');
\Redirect::to(\LaravelLocalization::getLocalizedURL( 'en'));
}
}
虽然这不起作用,但它可能会帮助你们理解我想要实现的目标。