在Laravel 5中创建多语言(国家)网站的最佳方式是什么?

时间:2015-11-02 10:05:30

标签: php laravel

我想创建一个多语言(国家)的项目,如 EN-US EN-UK ZH-CN 。 EN-US和EN-UK网站将具有相同的内容与不同的货币,但对于作为中国用户的网站的ZH-CN网站,它将具有不同的内容,例如页脚将不具有社交媒体链接(比如facebook,twitter,youtube,因为这项服务在中国是阻止的。)

每个网站都可以使用EN-US网站等两种或三种语言,用户可以在英语和西班牙语之间切换。我知道如何在语言之间切换。

我目前不知道该怎么做是创建路线以及如何输出不同的内容。就像我硬编码路线一样,如手动写出 / en-us / en-uk / zh-cn 进入routes.php文件和每个路由输出不同的内容。

对路径进行硬编码并输出视图(仅作为示例)

Route::group(['domain' => 'mysite.local'], function() {
    Route::get('/en-us', function() {
        return view('english.home');
    });
    Route::get('/zh-cn', function() {
        return view('chinese.home');
    });
});

有没有人知道创建此类网站的更好方法。任何帮助表示赞赏。

谢谢你

1 个答案:

答案 0 :(得分:1)

我做了一些非常相似的事情,效果很好。 这是我的多域L4 APP的快速片段

应用/ HTTP / routes.php文件

use App\Domain;

Route::bind('tld', function($value, $route)
{
    $project = $route->getParameter('projectSlug');
    if($project->tld !== $value)
        App::abort(404);
    return $value;
});
Route::bind('projectSlug', function($value, $route)
{
    return Domain::where('slug', '=', $value)->firstOrFail();
});
// routes.php
Route::group(['domain' => '{projectSlug}.{tld}'], function($projectSlug)
{
    Route::get('/', [ 'as' => 'index.index', 'uses' => 'Frontend\ReportsController@index' ]);
});

在您的控制器中,您可以执行以下操作:

public function index($projectSlug) {
...
$domain = Domain::findorFail($projectSlug->id);
..
return view('domain.view', compact('domain'));
..

每个域及其名称都保存在数据库中。现在,如果用户访问该网站,laravel正在寻找此域名。 Et voila - 你有一个多域Laravel应用程序:)