laravel - 避免不同语言的多条路线
问题描述
我正在将我的网站翻译成不同的语言。默认情况下,语言为英语,我使用以下路线返回“欢迎”视图:
Route::get('welcome', function ()
{
return view('welcome');
});
对于我的其他语言,我正在使用这条其他路线:
Route::get('welcome/{locale}', function ($locale)
{
App::setLocale($locale);
return view('welcome');
});
有什么办法可以将这两条路线合二为一吗?例如,如果路由是“welcome”或“welcome/en”,则返回默认语言英语的“welcome”视图。
但是,如果路由是“welcome/fr”,则“welcome”视图应该以法语返回。
我将有数百条路线,所以我希望能够组合我的路线。
解决方案
应用程序的默认语言存储在config/app.php
配置文件中。您可以修改此值以满足您的应用程序的需要。您还可以使用外观上的setLocale
方法在运行时更改活动语言:App
Route::get('welcome/{locale}', function ($locale) {
if (! in_array($locale, ['en', 'es', 'fr'])) {
abort(400);
}
App::setLocale($locale);
//
});
您可以配置“备用语言”,当活动语言不包含给定的翻译字符串时将使用该语言。与默认语言一样,备用语言也在配置config/app.php
文件中配置:
'fallback_locale' => 'en',
有时您可能需要指定一个路由参数,但该路由参数的存在是可选的。?
您可以通过在参数名称后放置一个标记来做到这一点。确保给路由的对应变量一个默认值:
Route::get('welcome/{locale?}', function ($locale = null) {
//
});
推荐阅读
- java - 为什么重新启动具有限制使用 UserManager.DISALLOW_USB_FILE_TRANSFER 的应用程序的设备会导致设备无法使用?
- android - Gradle Android rootProject.configurations 与配置
- scala - 如何使用 docker 在 spark 容器中运行 scala 代码?
- python-3.x - 如果索引不匹配,Pandas 不会从系列中放置值
- kubernetes - 如何使用 OpenStack 在 Kubernetes 中的同一端口上公开多个服务
- firebase - Firestore ConnectionState 在颤振应用程序中永远处于等待状态
- c# - c# WinForms - 如何获取容器表单设置的UserControl的大小
- javascript - 为 D3 堆积条形图准备嵌套 JSON 数据
- c# - 系统异常:'无法创建没有列的表,它是否具有公共属性?
- c# - 如何通过C#中的集合存储和检索多维数据