将URL参数翻译为占位符。

25
我想知道如何在ZF2中翻译带有参数的URL。
例如:
/{:language_link-schools-:city_link}

我不做的原因:

/:language_link-{schools}-:city_link

这是因为在某些语言中,例如西班牙语,单词的顺序会改变。

我正在使用PhpArray,但翻译时参数没有被替换,因此URL呈现为(例如在西班牙语中):

/:language_link-escuela-:city_link

与预期行为不同:

/ingles-escuela-miami

编辑:

参数为:language_link:city_link

因此,想法是在一种语言中呈现的URL可能为:

 /:language_link-schools-:city_link 

在另一种语言中,它可能是:

/:language_link-:city_link-school

类似于翻译语句时所做的操作:

sprintf($this->translate('My name is %s'), $name) ;

不,参数是:language_link和city_link,所以想法是在一种语言中,URL可能是 /:language_link-schools-:city_link,在另一种语言中,它可以是 /:language_link-:city_link-school,就像使用sprintf('My name is %s', $name)翻译语句时所做的那样。 - peterpeterson
2
那么,对于最终用户而言,参数的顺序有什么好处呢?您很可能会建立链接,让最终用户在应用程序内进行导航。但遗憾的是,我不知道您想如何实现参数的排序。附注:请根据您在评论中提到的参数顺序更新您的问题,并展示您想要的两种输出方式。 - Kwido
有可用性的好处,如果正确翻译,最终用户将能够记住URL,并且对于SEO也有帮助。 - peterpeterson
请在问题中发布路由配置。 - Edson Horacio Junior
4
我不认为这是可能的方式。在你的例子中,“schools”路由URL部分也应该是一个占位符。但在这种情况下,“:language_link”应该是硬编码的。如果你知道要使用多少种语言,只需为每种语言创建相同控制器和操作的规则集。但如果不知道,就需要提供外部配置,并使用工厂(和可能的缓存)构建它以增加性能。另一种方法是创建自定义路由规则,注册它,并依赖于你的配置以正确地解析参数。 - VirCom
显示剩余7条评论
1个回答

1
在PHP中有一个名为strtr的函数,它允许将任何模式转换为值。
通过您的示例,我们可以执行以下操作:
如果字符串如下:/:language_link-escuela-:city_link 那么您可以执行以下操作
<?php
$rawUrl = "/:language_link-escuela-:city_link";

$processedUrl = strtr($rawUrl, [
  ':language_link' => 'es',
  ':city_link' => 'barcelona',
]);

echo $processedUrl; // Output: /es-escuela-barcelona

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接