当 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
});
它叫做可选参数
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
});
它叫做可选参数