【问题标题】:Translate Laravel route param翻译 Laravel 路由参数
【发布时间】:2018-09-02 11:30:40
【问题描述】:

我正在使用 Laravel 5.6 并试图找出翻译路线的最佳方法。

我使用顶级域对语言环境进行排序

mydomain.pt -> locale pt
mydomain.es -> locale es
mydomain.com -> locale en

我创建了一个中间件来处理这个

class Language
{

    public function handle($request, Closure $next)
    {
        $url_array = explode('.', parse_url($request->url(), PHP_URL_HOST));
        $top_domain = end($url_array);

        if(!empty($top_domain)){
            App::setLocale($top_domain);
        }
    }
}

这工作正常,当我切换域时,相应文件中的翻译字符串可以工作。

但是,出于 SEO 的目的,我希望能够拥有这样的链接

mydomain.pt/dynamic/perto-de-mim
mydomain.es/dynamic/cerca-de-mi
mydomain.com/dynamic/near-me

在 laravel 中获取我的路线的最佳方法是什么

Route::get('{category}/near-me/', 'ServicesController@nearMe');

要使用上面的所有示例吗?

谢谢

【问题讨论】:

  • 您可以使用这样的库:github.com/mcamara/laravel-localization 来帮助您并简化一些事情。
  • 如果我没记错的话,该库假定您使用的是前缀而不是像我这样的其他方法,对吗?

标签: php laravel routes localization


【解决方案1】:

Laravel 允许你提供translation string

/resources
    /lang
        /en
            routes.json
        /es
            routes.json

在资源/lang/es/routes.json 中:

{
    "near-me": "cerca-de-mi"
}

你的路线变成了:

Route::get('{category}/' . __('routes.near-me') . '/', 'ServicesController@nearMe');

您可以在此处看到使用 Laravel 辅助方法 __() 从 xx/routes.json 文件中检索翻译。

【讨论】:

  • 我已经这样做了。它不起作用......看起来,因为中间件仅在调用路由后设置区域设置。这有意义吗?因为我的代码和你的一模一样
  • 您是否尝试在包含这些路由的一组路由上应用中间件?类似于:Route::middleware('language')->group(function() { /* 你的路由 */ }); (您必须先注册一个名为“语言”的路由中间件)
  • 我已经尝试过你的建议,但它仍然不起作用......路线上的 var_dump(App::getLocale()) 每次都会给我默认的语言环境
猜你喜欢
  • 2017-04-15
  • 2013-11-29
  • 2019-11-12
  • 2016-03-05
  • 2019-06-13
  • 2021-02-04
  • 2018-04-05
  • 2016-07-11
  • 2012-02-22
相关资源
最近更新 更多