在Laravel中切换语言的最佳逻辑是什么?
2022-08-30 14:56:09
我正在使用Laravel本地化来提供两种不同的语言。我已经设置了所有路径内容,mydomain.com/en/bla 提供英语并存储“en”会话变量,mydomain.com/he/bla 提供希伯来语并存储“he”会话变量。但是,我无法找到一种像样的方法来提供语言切换链接。这将如何工作?
我正在使用Laravel本地化来提供两种不同的语言。我已经设置了所有路径内容,mydomain.com/en/bla 提供英语并存储“en”会话变量,mydomain.com/he/bla 提供希伯来语并存储“he”会话变量。但是,我无法找到一种像样的方法来提供语言切换链接。这将如何工作?
我已经通过将其添加到路由中的之前筛选器来解决了我的问题.php:
// 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.'/'.($lang_uri ? URI::current() : ''));
}
// Set session language to uri
elseif($lang_uri !== Session::get('language'))
{
Session::put('language', $lang_uri);
}
// Store the language switch links to the session
$he2en = preg_replace('/he\//', 'en/', URI::full(), 1);
$en2he = preg_replace('/en\//', 'he/', URI::full(), 1);
Session::put('he2en', $he2en);
Session::put('en2he', $en2he);
这是我最初在laravel论坛上发布的一篇文章,但也许它会帮助其他人,所以我也在这里发布。
我在为我的应用程序构建一个简单的语言切换器时遇到了一些麻烦,论坛上的信息有点旧(一些帖子),所以我制作了这段简单的代码,使在应用程序上更改语言变得非常容易。
我的视图中有语言字符串,如下所示:
{{ __('languagefile.the_language_string'); }}
我得到了一个URL的语言,我认为这是最好的方法,它对seo和人们分享的链接也有好处。例:
www.myapp.com/fi/support (Finnish)
www.myapp.com/en/support (English)
www.myapp.com/sv/support (Swedish)
好吧,所以问题是我想要一种简单的方法来即时更改语言,而不必弄乱会话和cookie。这是我是如何做到的:
在库文件夹中创建一个名为 chooselang 的库.php
将此代码插入其中:
class Chooselang extends HTML {
/**
* Generate a Language changer link.
*
* <code>
* // Generate a link to the current location,
* // but still change the site langauge on the fly
* // Change $langcode to desired language, also change the Config::set('application.language', 'YOUR-LANG-HERE')); to desired language
* // Example
* echo Chooselang::langslug(URI::current() , $langcode = 'Finnish' . Config::set('application.language', 'fi'));
* </code>
*
* @param string $url
* @param string $langcode
* @param array $attributes
* @param bool $https
* @return string
*/
public static function langslug($url, $langcode = null, $attributes = array(), $https = null)
{
$url = URL::to($url, $https);
if (is_null($langcode)) $langcode = $url;
return '<a href="'.$url.'"'.static::attributes($attributes).'>'.static::entities($langcode).'</a>';
}
}
在此之后,您就可以生成URL切换器URL:s了。只需在使用任何其他 Blade 链接时添加它们即可。
如何生成芬兰语、瑞典语和英语的链接示例(使用 Blade)
{{ Chooselang::langslug(URI::current() , $langcode = 'Fin' . Config::set('application.language', 'fi')); }}
{{ Chooselang::langslug(URI::current() , $langcode = 'Swe' . Config::set('application.language', 'sv')); }}
{{ Chooselang::langslug(URI::current() , $langcode = 'Eng' . Config::set('application.language', 'en')); }}
上面将生成始终在当前页面上的URL:s,并将lang slug更改为您想要的那个。这样,语言将更改为所需的语言,并且用户自然会保持在同一页面上。默认语言数据块永远不会添加到 url 中。
生成的网址如下所示:
<a href="http://localhost/laravel/public/support">Fin</a>
<a href="http://localhost/laravel/public/sv/support">Swe</a>
<a href="http://localhost/laravel/public/en/support">Eng</a>
PS.如果将这些链接添加到主模板文件中,则链接特别有用。