当 URL 中有多个动态值时,如何实现本地化?

How can I implement localization when there is multiple dynamic values in the URL?

The documentation of laravel 说:

You may also change the active language at runtime using the setLocale method on the App facade:

Route::get('welcome/{locale}', function ($locale) {
    App::setLocale($locale);

    //
});

还说:

The default language for your application is stored in the config/app.php configuration file.

这意味着如果没有任何特定语言的值,那么 laravel 将使用默认语言 (在那里定义)


好吧,如果 URL 中有动态值呢?我的意思是当 URL 中有或没有 {locale} 时,我如何检测语言。例如:

 Route::get('post/{locale}/{id}', function ($locale, Request $request) {
     App::setLocale($locale);
     $post_id = $request->segment(2);
     // search in the database based on $post_id
 });

如您所见,我使用 segment(2) 获得了 URL 的 post id。但它不会一直有效。因为有时 {locale} 不会被设置 (我们期望 laravel 使用默认语言)。在那种情况下,我需要使用 segment(1) 来实现 post id.

无论如何,当 URL 中有其他动态值时,如何实现 localization

您可以将路线更改为:

Route::get('post/{id}/{locale?}', function ($id, $locale = null, Request $request) {
   if(! is_null($locale)) {
      App::setLocale($locale);
   }
   $post_id = $id;
   // search in the database based on $post_id
});

Docs

它叫做可选参数