【问题标题】:Routing URLs with language in Laravel在 Laravel 中使用语言路由 URL
【发布时间】:2012-11-25 15:39:48
【问题描述】:

我想为我的路线添加本地化信息。

目前我的路线定义是:

    Route::controller('browse');
    Route::controller('search');
    Route::controller('support');
    Route::controller('filter');

我想将 URL 从 /url/browse 更改为 /url/en/browse 等。

如果 URL 中缺少语言,则应用程序应重定向到使用默认语言的同一路由。这意味着访问旧的/url/browse 将重定向到/url/default/browse

我尝试使用过滤器制作或找到一些简单的解决方案,但未成功。 感谢您的帮助!

【问题讨论】:

    标签: php routing routes url-routing laravel


    【解决方案1】:

    尝试使用配置中的默认应用程序语言和支持的语言数组。

    如果您将一种语言置于受支持的语言中,则以该段开头的任何路由都将设置当前语言,并将被视为根 url。

    与您的要求的一个不同之处在于,将接受默认语言而不是重定向,而不是 url 中的语言。

    编辑:可以帮助您进行重定向的过滤器。

    Route::filter('pattern: *', array('name' => 'langredirect', function()
    {
        $uri = Request::server('request_uri');
        $segments = explode('/', $uri);
        if ( ! array_get(Config::get('application.languages'), $segments[1]) )
        {
            return Redirect::to(URL::base() . '/' . Config::get('application.language') . $uri);
        }
    }));
    

    【讨论】:

    • 哦,我在我的资源甚至文档中都没有找到类似的东西。但是在最新版本的github上我找到了它。谢谢!顺便说一句:让它重定向的任何简单的可能性? (不编辑 laravel 本身)
    • 原因是当 en 为默认值时:url/en 和 url 指向相同的内容,我希望 url 对于搜索引擎等具有唯一性。
    • 我也想到了过滤器的解决方案,问题是。 URL::to() 等不添加默认语言前缀。因此,默认加载的每个页面都将被重定向。
    • 如果您已经在有“前缀”的路线上,乳清会添加它。
    • 我有默认的 en,即使我去地址 url/en/whatever 而不是 URL::to('/whatever');不包括 en。我刚刚测试过。
    猜你喜欢
    • 2015-10-26
    • 2016-11-29
    • 2013-09-13
    • 2013-05-17
    • 2011-01-09
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    相关资源
    最近更新 更多