具有不同区域的锂路线

时间:2015-04-27 17:07:18

标签: php internationalization lithium php-5.5

我在Li3中有一条i18n路线,看起来像:

Router::connect('/{:locale:[a-z]{2}/{:args}', [], [
    'continue' => true,
    'persist' => ['locale'],
]);

这样,当用户(或抓取工具)使用语言前缀进入我的网站时,该区域设置用于生成网站上的每个链接。

出于SEO目的,我需要在其他语言环境中生成URL,例如:

GET /en/profile/john-doe
Canonical URL: https://www.example.com/en/profile/john-doe
Link hreflang for es: https://www.example.com/es/profile/john-doe
Link hreflang for pt: https://www.example.com/pt/profile/john-doe

我的货币方法是克隆当前请求,更改区域设置,从locale数组中删除persist,并使用$request->to('url', ['absolute' => true]);

但我无法摆脱语言环境。

有关如何解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:1)

我终于解决了它扩展HTML助手类:

use lithium\template\helper\Html as BaseHtml;

class Html extends BaseHtml
{
    /**
     * Returns href lang link for a locale for the current request.
     *
     * @param string $locale
     * @return string <link />
     */
    public function getHrefLinkForLocale($locale)
    {
        return $this->link(
            'Canonical URL for ' . $locale,
            compact('locale') + $this->getRequest()->params,
            [
                'absolute' => true,
                'rel' => 'alternate',
                'type' => 'alternate',
                'hreflang' => $locale,
            ]
        );
    }
}