【问题标题】:Multilingual website, tricks and solutions [closed]多语言网站,技巧和解决方案[关闭]
【发布时间】:2017-08-03 12:45:01
【问题描述】:

我要制作一个多语言网站(3 种语言)。我很好奇,有什么方法或规则可以让它正确吗?我的仪器是 Laravel 5.4。

我遇到的问题:

  1. 如何在数据库中存储数据:在具有多行的单个表中(每种语言一个),还是创建几个表(每种语言一个,通过外键连接)?
  2. 用户选择区域设置后如何选择正确的语言数据?我不确定,当我需要发送数据以查看时,我每次检查语言环境变量的方法是否正确。

我问是因为我想知道如何维护和照顾我的代码。

【问题讨论】:

  • 我通常做的一件事是拥有一个app_strings 表,其中包含字段:string_key (indexed, unique), lang_id and text。在实际值表中,我只存储了 string_key。根据所选语言,我使用辅助方法获取适当的文本。例如:{{ app_trans($product->name) }} - 这里 $product->name 包含一个字符串键。
  • @techfoobar 谢谢你,我试试看!

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


【解决方案1】:

您应该制作一个中间件并将其添加到一个组中,该组将包含所有需要翻译的路由。在中间件中,您检查会话中的语言并将其设置为当前请求可以使用它。

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

【讨论】:

  • 谢谢你,这很有帮助!
  • 你也可以做一个单表,使用translation_key和locale作为主键。这将使您可以拥有任意多(或少数)的语言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2018-03-14
  • 2016-06-04
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
相关资源
最近更新 更多