多语言网站,技巧和解决方案

时间:2017-03-13 13:19:14

标签: php database laravel laravel-5 laravel-5.4

我打算建立一个多语言网站(3种语言)。我很好奇,有什么方法或规则如何正确地做到这一点?我的乐器是Laravel 5.4。

我遇到的问题:

  1. 如何在数据库中存储数据:在一个包含多行(每种语言一个)的表中,或创建一些表(每种语言一个,通过外键连接)?
  2. 用户选择语言环境后如何选择正确的语言数据?我不确定,我的方法,我每次检查一个语言环境变量,当我需要发送数据来查看时,是正确的。
  3. 我问,因为我想知道如何维护和处理我的代码。

1 个答案:

答案 0 :(得分:0)

您应该创建一个中间件并将其添加到一个将保存所有需要转换的路由的组中。在中间件中,您检查会话中的语言并进行设置,以便当前请求可以使用它。

public function handle($request, Closure $next)
{
    if( !Session::has('locale' )){
        $browserLanguage = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); //read browser language

        if ( array_key_exists($browserLanguage, Config::get('languages')) ) {
            Session::set('locale', $browserLanguage);
        } else {
            Session::set('locale', 'en');
        }
    }

    //Simply set language from session 
    App::setlocale(Session::get('locale'));

    return $next($request);
}

当用户想要选择特定语言时,您可以为他们提供可用语言列表,然后将所选语言设置为会话

if (array_key_exists($language, Config::get('languages'))) {
    Session::set('locale', $language);
}

对于表格,如果您确定只有3种语言,那么您可以创建一个包含4列的单个表格

key      en      fr       es
hi       hi      salut    ola