【问题标题】:Laravel - locale optionally as first parameter in the URLLaravel - 语言环境可选地作为 URL 中的第一个参数
【发布时间】:2020-01-18 02:16:19
【问题描述】:

我更多来自原生 PHP 背景,但我开始接触 Laravel(和 Lumen)。我正在处理一个国际化项目并将 URL 结构放在一起。

我是 Apple 示例的粉丝,即 apple.com/mac 在 Apple 的美国网站上为您提供 Mac 产品。 apple.com/uk/mac 为您提供 Apple 英国网站上的 Mac 产品(即apple.com/{locale/?}route

Laravel 是否可以复制这种行为:

  1. 第一个参数是我们已知的语言环境之一
  2. 如果是,请设置语言环境并继续
  3. 如果不匹配,参数是否匹配我们注册的路由之一并继续进行

我已经看到一些类似问题的答案说,将语言环境作为可选参数 1 是不可能的,因为这样“路由器将不知道该做什么”,但有真正的-生活中的例子,A​​pple 是我给出的(以及在我从事的一些普通项目中),这是完成的。

请给点建议?

【问题讨论】:

  • 是的,你可以手动完成,也可以使用这个 Laravel 库 github.com/mcamara/laravel-localization
  • 这是可能的。只需确保 apple.com/mac 路由位于 apple.com/{locale/?}route 之前,因此它具有优先权。在处理本地化版本的控制器中,检查是否设置了区域设置并应用您的逻辑。希望能回答你的问题

标签: php laravel laravel-routing


【解决方案1】:

因此,轻松解决此问题的方法是使用提到的the package @BlackXero。

$localiseGroup = [
    'prefix' => LaravelLocalization::setLocale(),
    'middleware' => ['localeSessionRedirect', 'localizationRedirect',]
];

Route::group($localiseGroup, function() {

    Route::get('/mac', '<handler>');

});

// domain.com/mac and domain.com/es/mac would now work

如果您read the docs,您将看到所有设置说明以使其按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-10
    • 2018-07-11
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多