首页  >  文章  >  后端开发  >  如何在 Laravel 中创建多语言、翻译的路线而不依赖 cookie 或会话?

如何在 Laravel 中创建多语言、翻译的路线而不依赖 cookie 或会话?

Patricia Arquette
Patricia Arquette原创
2024-11-03 15:24:30584浏览

How can I create multilingual, translated routes in Laravel without relying on cookies or sessions?

在 Laravel 中创建多语言翻译路由

本指南提供了在 Laravel 中创建多语言翻译路由的全面解决方案,确保当前语言是仅由 URL 确定,而不依赖于 cookie 或会话。

实现:

1.翻译文件:

在 app/lang/[LANGUAGE]/routes.php 目录中为所需路由创建翻译文件。例如,对于波兰语 (pl)、英语 (en) 和法语 (fr):

  • app/lang/pl/routes.php:

    return array(
      'contact' => 'kontakt',
      'about'   => 'o-nas'
    );
  • app/lang/en/routes.php:

    return array(
      'contact' => 'contact',
      'about'   => 'about-us'
    );

2.配置:

更新 app/config/app.php:

  • 设置默认语言(例如波兰语):

    'locale' => 'pl',
  • 列出替代语言(英语和法语):

    'alt_langs' => array ('en', 'fr'),
  • 定义语言环境前缀:

    'locale_prefix' => '', // Will be dynamically updated at runtime

3。路由:

编辑 app/routes.php:

...

// Set locale and locale_prefix if an alternative language is selected
if (in_array(Request::segment(1), Config::get('app.alt_langs'))) {
    App::setLocale(Request::segment(1));
    Config::set('app.locale_prefix', Request::segment(1));
}

// Set route patterns based on the translated routes
foreach(Lang::get('routes') as $k => $v) {
    Route::pattern($k, $v);
}

Route::group(array('prefix' => Config::get('app.locale_prefix')), function()
{
    Route::get(
        '/',
        function () {
            return "main page - ".App::getLocale();
        }
    );

    Route::get(
        '/{contact}/',
        function () {
            return "contact page ".App::getLocale();
        }
    );

    Route::get(
        '/{about}/',
        function () {
            return "about page ".App::getLocale();
        }
    );
});
...

此配置根据第一个 URL 段动态更新区域设置和区域设置前缀(如果它与替代语言匹配)并根据翻译后的路线设置路线模式。

4.重定向(可选):

对于未知 URL,重定向到当前语言前缀(例如 /en)而不是默认语言 (/):

// app/start/global.php
App::missing(function()
{
   return Redirect::to(Config::get('app.locale_prefix'),301);
});

以上是如何在 Laravel 中创建多语言、翻译的路线而不依赖 cookie 或会话?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn