Symfony 1.2中是否可以基于lang更改路由?
在我的系统中有两种语言-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>
生成的url:
<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
有一些插件可以处理这种情况(或者至少给了你一种自己做这件事的方法):
-
zxI18n例程插件
zxI18nRoutingPlugin扩展了sfPatternRouting类,提供了将路由模式静态文本转换为不同语言的可能性。
-
gbI18nRoutePlugin
I18N路由的简单方式。
另一种选择是在路由中添加区域性,如/pl/product、/en/product等。。