【问题标题】:Change routing basing on language, translate URL parts根据语言更改路由,翻译 URL 部分
【发布时间】:2013-08-10 08:23:47
【问题描述】:

在 Symfony 1.2 中是否可以根据 lang 更改路由?

在我的系统中有 2 个语言 - EN、PL

示例路线如下所示:

produkt_show:
  url:   /products/:pslug/:idslug
  param: { module: product, action: show }

我想要实现的目标:我希望 produkt_show 路由根据当前语言匹配 [并生成] 不同的 url。所以在 PL 我的 url 看起来像这样:

 /produkty/:pslug/:idslug

这些路由必须具有相同的名称。我无法更改所有 url_for/link_to 等调用并将不同的路由名称传递给它们。

如果有任何不清楚的地方,请提前询问。

更新

根据 j0k 的建议,我使用了插件。我选择了 zxI18nRoutingPlugin。它似乎部分工作 - 如果我在浏览器地址输入中逐字写入它,它会将 url 解析为正确的路线。但它仍然会生成未翻译的 URL。

例如

我的路线:

contact_form:
  url:   /contact_form
  param: { module: contact_request, action: new}

翻译单位:

        <trans-unit>
            <source>contact_form</source>
            <target>formularz-kontaktowy</target>
        </trans-unit>

生成的网址:

<a href="/contact_form" title="Kontakt" class="menu-contact"> Kontakt </a>

但如果我输入 BASE_URL/formularz-kontaktowy - 执行正确的操作。

这是我在开发工具栏中的配置:

Request:

    parameterHolder:
      action: new
      module: contact_request
      sf_culture: pl
    attributeHolder:
      sf_route: 'sfRoute Object()'

User

    options:
      auto_shutdown: false
      culture: pl
      default_culture: pl_PL
      use_flash: true
      logging: '1'
      timeout: 10800
    attributeHolder:
      symfony/user/sfUser/attributes: { LAST_CATEGORY_ID_PATH_VAR: null, product_elements_on_page: 50 }
    culture: pl_PL

我只是想不通,如果有任何帮助、建议或任何东西,我将不胜感激,因为我一直坚持这一点。

更新 2

factories.yml:

all:
  routing:
#    class: sfPatternRouting
#    param:
#      generate_shortest_url:            true
#      extra_parameters_as_query_string: true
    class: zxPatternI18NRouting
    param:
     generate_shortest_url:            true
     extra_parameters_as_query_string: true
     use_cultures:                     [pl, de, en, ru]   # destination cultures. Plugin looks for translations for these cultures.
     culture_into_url:                 false      # defines if culture should be always placed in url 

【问题讨论】:

    标签: php routing symfony1 translation symfony-1.2


    【解决方案1】:

    有一些插件可以处理这种情况(或者至少给了你一种自己做的方法):

    • zxI18nRoutingPlugin

      zxI18nRoutingPlugin 扩展了 sfPatternRouting 类,可以将路由模式静态文本翻译成不同的语言。

    • gbI18nRoutePlugin

      轻松实现 I18N 路由。

    An other option可以在路由里面添加文化,比如/pl/product、/en/product等..

    【讨论】:

    • 这太酷了。谢谢。我之前知道最后一个选项,但这不是我们的客户想要的解决方案。我会尝试使用插件,如果它们有效,我会在一段时间内编写。
    • 我使用了zxI18nRoutingPlugin,它似乎可以部分工作,但是......它仍然会生成未翻译的URL。如果我在地址输入中逐字输入,它会解决翻译后的路线正确性。稍后我会为我的问题举一个例子。
    • 如何生成 url? cultures_into_url 的值是多少? use_cultures 的值是多少?
    • 查看我的完整路由配置更新。 use_cultures: [pl, de, en, ru] , cultures_into_url: false
    猜你喜欢
    • 1970-01-01
    • 2020-12-20
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多