Laravel & 本地化:国家 + 货币 + 语言 + 时区

4
我们目前的项目只在瑞士展开,如下所示:
例子:yourfirm.com - 主要语言:德语 - 第二语言:英语和土耳其语 - 货币:瑞士法郎
当用户访问页面时,默认语言为德语,货币为瑞士法郎。
我们想要添加以下内容: 新国家: 土耳其,主要语言:土耳其语,货币:土耳其里拉 德国和奥地利,主要语言:德语,货币:欧元 欧洲其他地区,主要语言:英语,货币:欧元 世界其他地区,主要语言:英语,货币:美元
因此,我们考虑为每个国家制作类似于以下内容的东西: 当用户访问yourfirm.com时,我们可以通过他的IP确定正确的位置(国家、时区、语言、货币),并显示适合他国家的页面。 我们还考虑像这样管理它:对于yourfirm.com的每个国家,例如德国(DE)-> yourfirm.com/de 语言:德语,货币:€
但我们不知道如何确切解决它:我们进行了一些调查,但没有找到正确的解决方案。 如果有人能帮助我们,并尝试给我们一个示例代码,那就太好了。

这篇文章展示了与您在此尝试实现的类似的事情,https://codezen.io/implementing-auto-localization-in-laravel-based-on-users-location/ - Sapnesh Naik
1个回答

3
你可以创建一个中间件来检测访问者IP地址的地理位置,推荐集成一个叫做GeoIP for Laravel 5的包 (GitHub链接, 文档)。 app/Http/Middleware/DetectGeoLocation.php
public function handle($request, Closure $next, $guard = null)
{
    // check if already detect current session country
    if (!session('country')) {
        $location = geoip();
        session([
            'country' => $location->country,
            'currency' => $location->currency
        ]);
    }
}

然后将中间件安装到HTTP内核中:

app/Http/Kernel.php

protected $middlewareGroups = [
    'web' => [
        ...
        \App\Http\Middleware\DetectGeoLocation,
        ...
    ]

现在您可以在任何地方获取当前会话的国家和货币:

$country = session('country');
$currency = session('currency');

对于现代安装,请使用:$location->getLocation()->getAttribute('country')$location->getLocation()->getAttribute('currency') - Marc Garcia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接