【问题标题】:Symfony translating routes using BeSimple/BeSimpleI18nRoutingBundle duplicate routesSymfony 使用 BeSimple/BeSimpleI18nRoutingBundle 重复路由转换路由
【发布时间】:2015-09-09 19:03:44
【问题描述】:

我正在创建一个多语言网站,并使用BeSimple/BeSimpleI18nRoutingBundle 进行路线翻译。我的配置中的路线如下所示:

about:
    locales:  { en: "/{_locale}/about-us", lt: "/{_locale}/apie-mus" }
    defaults: { _controller: BaseBundle:Base:about }

但是在这种情况下,我会得到重复的路线,就好像我输入 /en/about-us 或 /lt/about-us 一样,这两种方式都有效。但在第二种方式中,它应该是 404 错误,因为 lt 语言环境的路由应该是 /lt/apie-mus 也可以正常工作。

有没有办法解决这个问题?或者有什么更好的翻译路线的方法?

【问题讨论】:

    标签: php symfony routing routes translation


    【解决方案1】:

    但是在这种情况下,我得到了重复的路线

    每种语言有一条路线:

    $ app/console router:debug
    about.en                 ANY    ANY    ANY  /{_locale}/about-us
    about.lt                 ANY    ANY    ANY  /{_locale}/apie-mus
    

    当您在 URL /lt/about-us 上时,UrlMatcher 将匹配 zh 版本:

    $ app/console router:match /lt/about-us
    Route "about.en" matches
    
    [router] Route "about.en"
    Name         about.en
    Path         /{_locale}/about-us
    Path Regex   #^/(?P<_locale>[^/]++)/about\-us$#s
    Host         ANY
    Host Regex
    Scheme       ANY
    Method       ANY
    Class        Symfony\Component\Routing\Route
    Defaults     _controller: AppBundle:Default:index
                 _locale: en
    Requirements NO CUSTOM
    Options      compiler_class: Symfony\Component\Routing\RouteCompiler
    

    在这种情况下,本地将是 en 而不是 lt

    但我认为您不必担心,因为访问者访问/lt/about-us 的唯一方法是自己编辑 URL。

    【讨论】:

    • 这让我担心谷歌是否能以某种方式索引 /lt/about-us/en/about-us,因为这将是不同 URL 的重复内容
    • 如果您生成的 url 如捆绑包中所述:{{ path('about', { 'locale': 'en' }) }} 谷歌没有理由索引不在您的 html 中的 url。如果还不够,可以生成robots.txtsitemap
    【解决方案2】:

    在与 BeSimple 战斗后,我在 10 分钟内将我的项目切换到了 JMSI18nRoutingBundle。它运作良好并解决了路线问题。首先:它包含多种前缀模式(带有语言环境),其次它允许翻译每条路线。

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2011-06-06
      相关资源
      最近更新 更多